0

そこで、Linux上のマウスなどの入力デバイス用のイベントハンドラードライバーであるevdev.cを変更しようとしています。

私が抱えている問題は、モジュールをコンパイルしようとすると、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

4

3 に答える 3

0
struct evdev_client __rcu *grab;

この宣言は有効ですか?(__rcuがプリプロセッサ用でない限り、私には見えません)。

この宣言は、残りのstruct evdev文字化けをレンダリングしているようです。これは、コンパイラがclient_listclient_lockなどを識別しないことを説明する可能性があります。

于 2011-04-01T12:02:19.057 に答える
0

問題は、間違ったバージョンのカーネルソースを使用していたことでした。2.6.35ではなく2.6.38であるため、ヘッダーとソースがうまく混合されていませんでした。

于 2011-04-02T20:46:14.013 に答える
0

__rcuは、include / linux/compiler.hで次のように定義されています。

# define __rcu          __attribute__((noderef, address_space(4)))
于 2018-09-28T08:49:20.970 に答える