カーネル モジュールを作成しようとしていますが、別のモジュール ヘッダーで定義されている構造体のメンバーにアクセスするのに行き詰まっています。私は説明しようとします:
他のモジュールが次のようなものであるとしましょう:
<kernel-src>/drivers/xxx/xxx.c|.h
xxx.c には、ドライバーで使用しているエクスポートされた関数がいくつかあります。ただし、 xxx.h で定義されている構造体s_xxxからメンバーm1にアクセスしたい:
struct s_xxx {
...
int m1;
};
次に、これを /usr/include/linux/yyy.h に入れます。
struct s_xxx;
struct s_yyy {
...
struct s_xxx *p_xxx;
};
私は私のドライバーです:
#include <linux/yyy.h>
xxxドライバーからエクスポートされたシンボルを正常に使用しています。しかし、もちろん、s_xxxから member にアクセスしようとすると、コンパイラは文句を言います:
struct s_yyy *p_yyy;
...
m = p_yyy->p_xxx->m1; /* error */
xxx.h が /usr/include/linux/ に見つかりません。これまでのところ、2 つの回避策を見つけました。
1) カーネル ソースをダウンロードし、モジュールに xxx.h へのフル パスを含める
2) s_xxx 定義を xxx.h からモジュールにコピー/貼り付けます
これを行う正しい方法は何ですか?
(長くてくだらない説明でごめんなさい:@ )