[완료] 디바이스 드라이버 컴파일 에러
글쓴이: mycluster / 작성시간: 목, 2008/04/24 - 1:34오후
항상 유저로서 사용만 하다가, 커널 모듈 컴파일에서 에러가 나서 소스를 보니 아는게 별로 없어서
고수님들께 질문 하나 올립니다.
커널 모듈에 2.6.9에서는 문제 없이 컴파일되던 것이 2.6.22 커널에서는 에러가 나서 보니, 커널 헤더가
바뀐 것 때문에 그런 것 같습니다.
static ssize_t show_rxbuf_min(struct class_device *cd, char *buf) { struct net_device *netdev = container_of(cd, struct net_device, <span>class_dev</span>); struct netfront_info *info = netdev_priv(netdev); return sprintf(buf, "%u\n", info->rx_min_target); }
요부분하고,
error = class_device_create_file(&netdev-><span>class_dev</span>, &xennet_attrs[i]);
요 부분에서
'struct net_de vice' has no member named 'class_dev'
에러가 나고 있네요. 찾아보니 include/linux/netdevice.h 에서 net_device struct에 보니,
2.6.9 에서는
/* class/net/name entry */ struct class_device class_dev;
로 되어 있던 부분이
2.6.22 에서는
/* class/net/name entry */ struct device dev;
로 struct의 멤버가 바뀌기는 했는데, 이 문제를 어디서 부터 봐야 할 까요?
구글을 찾아보니, 디바이스 드라이버 컴파일 하는 데마다 비슷한 문제로 고생한 사람은 있는데,
해결했다는 사람을 본적이 별로 없네요.
혹시라도 비슷한 경험을 하신 분이 있으면, 문제를 어디서부터 접근해야하는지 가르침을 부탁드립니다.
Forums:
비슷한 고민을 한
비슷한 고민을 한 애들이 많기는 한데... 이런 식으로 날코딩으로 다 바꿔야한단 말인가 ㅠ.ㅜ
http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.19-rc5/2.6.19-rc5-mm1/broken-out/adapt-macb-driver-to-net_device-changes.patch
--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러
--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러
커널 내부의 api는
커널 내부의 api는 버젼이 바뀌면서 수시로 바뀝니다.
제일 좋은 방법은 비슷한 모양의 드라이버 소스를 찾아서 버젼이 올라가면서 어떻게 바꼈는지 같이 살펴보는 방법밖에 없을 것 같습니다.
http://lxr.linux.no/linux+v2.6.25/Documentation/ko_KR/stable_api_nonsense.txt
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
class_device_create_file()을
class_device_create_file()을 device_create_file()로 교체하시면 될것같습니다.
해결(절반의
해결(절반의 성공)했습니다.
힌트를 주신 분들의 글과, 여러가지를 파악하여 모든 class_device 및 class_dev를 device와 dev로 치환하면
문제없이 모듈이 컴파일이 되더군요. owlet님의 충고대로 소스에 포함된 function들에서도 class를 다 떼내니
됩니다.
그런데, FedoraCore에서는 문제가 없는데 Ubuntu 7.10에서는 여전히 안되는 군요. FC7은 2.6.21, FC8은 2.6.23인데 우분투는 2.6.22라서 그런거 같지는 않고, 아마 커널소스가 좀 다른 듯 합니다.
아 그런데, 정말 이 짓을 해야하는지는 심각하게 고민하고 있습니다. 솔직히 상용으로 쓸 물건을 만들면서
계속 커널이 변하고, 내부 패키지가 버전이 막 달라지는 페도라나 우분투를 개발툴로 사용하는 것이 맞는
것인지 상당히 궁금하네요(제가 개발하는 것이 아니라 뭐라 할 말은 없지만...)
어쨌던 일정을 잡아서 버전업이 되는 레드햇이나 하다못헤 CentOS를 사용하는 것이 어떨지 말해봐야할 것 같네요.
--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러
--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러
댓글 달기