linux/skbuff.hにアクセスできません

linux/skbuff.hにアクセスできません

sk_buff変数にアクセスする必要があるカーネルモジュールを作成しています。しかし、私が書くとき

#include <linux/skbuff.h>

Netbeansはヘッダファイルが見つからないと言います。

答え1

/usr/include/linuxカーネルヘッダーをインストールしても、このヘッダーは意図的にインストールされません。これは、このヘッダーで定義された内容がカーネルの安定したABIの一部ではないためです。カーネル開発者は2つのバージョン間でこのヘッダーの内容を変更できるため、ドライバがリンクするカーネルバージョンヘッダーに特定の内容を引用する必要があります。 。

2.6+カーネルの場合は、次のように正しい動作を取得する方が簡単です。標準カーネルドライバのMakefileソリューションNetbeansに圧力をかける代わりに。 2.6+ドライバービルドシステムの作成たくさんNetbeansなどの「使いやすい」IDEで入手できるものよりも多くを提供します。

たぶんあなたは両方の世界の利点を得ることができます。一部のIDEではこれを素晴らしいエディタとして使用できますが、建物を外部makeツールに委任することができます。

Netbeansですべての作業を行う必要がある場合は、2.4以前のカーネル用のドライバをビルドしたときと同じように実行できます。デフォルトでは、カーネルソースコード自体のヘッダディレクトリを参照します。 GNU Makefileの用語で言うと、次のような結果が得られます。

KERNPATH=/usr/src/kernels/$(shell uname -r)
CFLAGS=-I$(KERNPATH)/include

Netbeansで同じことを行うのは難しいかもしれません。

  1. uname -rNetbeansはビルドプロセスの一部としてIDEでシェルcommand()を実行し、その出力を使用して残りのビルドで使用される変数を置き換えることができません。

  2. カーネルのソースコードパスは、Linuxディストリビューションによって異なります。 Makefileを使用すると、単純にシェルスクリプトを作成してこれらのローカル詳細を動的に取得できますが、Netbeansではこれを行うことができるかどうか疑問です。上記のパスは、この回答の作成中に誤って確認されたRed Hatタイプのシステムへのパスです。その後、Ubuntuシステムを確認して同じファイルを見つけました/usr/src/linux-headers-$(uname -r)/include。新しい2.6カーネルドライバビルドシステムが開発されるまで、これには標準はありません。

関連情報