2011-04-01 5 views
0

그래서 리눅스에서 mouse와 같은 입력 장치를위한 이벤트 핸들러 드라이버 인 evdev.c를 수정하려고합니다.리눅스 모듈 컴파일 : struct evdev member not

내가 겪고있는 문제는 모듈을 컴파일하려고 할 때 evdev 멤버를 찾을 수 없다는 오류가 발생한다는 것입니다.

/home/mousedev_dbl.c:215: error: ‘struct evdev’ has no member named ‘client_lock’ 
/home/mousedev_dbl.c:216: error: ‘struct evdev’ has no member named ‘client_list’ 
/hom/mousedev_dbl.c:217: error: ‘struct evdev’ has no member named ‘client_lock’ 
/home/mousedev_dbl.c: In function ‘evdev_detach_client’: 
/home/mousedev_dbl.c:224: error: ‘struct evdev’ has no member named ‘client_lock’ 
/home/mousedev_dbl.c:226: error: ‘struct evdev’ has no member named ‘client_lock’ 
/home/mousedev_dbl.c: In function ‘evdev_open_device’: 
/home/mousedev_dbl.c:234: error: ‘struct evdev’ has no member named ‘mutex’ 
/home/mousedev_dbl.c:238: error: ‘struct evdev’ has no member named ‘exist’ 

이것은 오류의 일부에 지나지 않습니다.

evdev 용 구조체가 컴파일 할 mousedev_dbl.c 파일에 명확하게 있습니다. 여기 예를 들어

struct evdev { 
     int open; 
     int minor; 
     struct input_handle handle; 
     wait_queue_head_t wait; 
     struct evdev_client __rcu *grab; 
     struct list_head client_list; 
     spinlock_t client_lock; /* protects client_list */ 
     struct mutex mutex; 
     struct device dev; 
     bool exist; 
}; 

은, 이러한 오류가 원인이 무엇

spin_lock(&evdev->client_lock); 
list_add_tail_rcu(&client->node, &evdev->client_list); 
spin_unlock(&evdev->client_lock); 
synchronize_rcu(); 

라인 (215)에 사용되는 방법이다 ?? 전체 파일은 여기에서 찾을 수 있습니다 : http://lxr.free-electrons.com/source/drivers/input/evdev.c

+0

귀하의 OS는 무엇입니까? 그것이 우분투라면 'apt-get build-dep '을 시도한 다음 'apt-get source -b '을 써서 패키지를 컴파일하는 데 필요한 모든 것을 처리 할 것입니다. – sashoalm

+0

우분투를 사용하면서 패키지에 대한 이야기는하지 않았습니다. . 나는/usr/include/linux에서 컴파일해야 할 모든 것을 가지고있다. 문제는 컴파일러가 컴파일하려는 파일에있는 구조체의 멤버를 찾지 못하는 것입니다. – user623879

+0

어떻게 소스를 얻었습니까? – sashoalm

답변

0

문제는 내가 잘못된 버전의 커널 소스를 사용하고 있다는 것이 었습니다. 2.6.35가 아닌 2.6.38이므로 헤더와 소스가 잘 섞이지 않았습니다.

0
struct evdev_client __rcu *grab; 

이 선언은 유효합니까? (__rcu가 전처리 기가 아닌 이상 나에게 보이지 않습니다.)

이 선언은 나머지 struct evdev이 깨져 보이고있는 것 같습니다. 컴파일러가 client_list, client_lock 등을 식별하지 못했음을 설명 할 수 있습니다.