2011-04-01 25 views
0

所以,我試圖修改evdev.c,這是一個輸入設備的事件處理程序驅動程序,如Linux上的鼠標。Linux模塊編譯:struct evdev沒有找到成員

我遇到的問題是,當我嘗試編譯模塊時,出現大量錯誤,指出找不到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; 
}; 

舉個例子,在這裏是如何使用它上線215

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

什麼會導致這些錯誤?整個文件可以在這裏找到: http://lxr.free-electrons.com/source/drivers/input/evdev.c

+0

哪一款是您的操作系統?如果是Ubuntu,你可以試試'apt-get build-dep ',然後'apt-get source -b ',他們會照顧包編譯所需的所有東西 – sashoalm 2011-04-01 06:34:25

+0

使用ubuntu,但不是在談論軟件包。我有我需要在/ usr/include/linux下編譯的所有東西。問題是編譯器似乎沒有找到位於我希望編譯的文件中的結構成員。 – user623879 2011-04-01 06:42:29

+0

你是如何獲得源代碼的? – sashoalm 2011-04-01 07:03:44

回答

0

問題是,我使用的是錯誤版本的內核源代碼。 2.6.38而不是2.6.35,所以標題和源文件混合不好。

0
struct evdev_client __rcu *grab; 

這是聲明是否有效? (看起來不像我,除非__rcu用於預處理器)。

似乎這個聲明是渲染你的其餘struct evdev亂碼。這可以解釋編譯器不識別client_list,client_lock