2011-09-20 9 views
7

カーネルドライバをツリーの外に構築するときは、 ドライバディレクトリでmakeを実行します。ここで、KERNELDIRはカーネルソースへのパスまたはヘッダです。Linuxヘッダ、モジュールを正しくエクスポートする

make -C $(KERNELDIR) M=$(PWD) modules 

使用してヘッダを構築するために自分自身をしよう: いくつかのファイルとフォルダが、私は(完全なカーネルソースツリーなし)に対するモジュールを構築するために、輸出が不適当見つける

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 

は次のように、不足しているように見えますrules.realで説明したように、それは見ている、Documentation/make/headers_install.txtに記述されているだけではありませんが、Makefileを、スクリプト、include/generated/autoconf.hまたはinclude/config/auto.confなど

Debianは、使用可能な方法で物事を行いますmsは "標準的な"方法ではありません。

要するに:私は正しくLinuxヘッダをエクスポートするので、それに対して外部モジュールを構築できますか?

+0

自分自身で 'autoconf.h'に問題がありました。私が正しく覚えていれば、カーネルを構築したフォルダの近くからコピーしたばかりです – Shahbaz

答えて

2

私は、headers_installのファイルターゲットを作ることは、Cライブラリとツールチェーンの作成のためのLinuxヘッダーの作成を意図しており、ツリーカーネルモジュールを構築するためではないことを信じています。 。

実際、完全なカーネルソースコードなしでツリーカーネルモジュールを構築することはサポートされておらず、実際にはディストリビューションによって作成された「ハック」です。

5

headers_installは、ユーザースペースの観点から使用するのに適したヘッダーファイルのセットをエクスポートするためのものです。カーネルの公開されたユーザー空間です。あなたがカストムなデータ構造を備えたすばらしい新しいioctlを作成したとしましょう。これはあなたが知りたいと思っていない種類の情報なので、ユーザー空間プログラムは素敵な新しいioctlを使うことができます。

しかし、ユーザー空間からは見えないもの、つまりカーネルや他の言葉では「プライベート」なものはすべてユーザー空間に公開されません。

ツリー外モジュールを構築するには、完全に構成されたソースツリーか、ディストリビューションによってパッケージ化されたカーネルヘッダが必要です。たとえば、Ubuntu/Debian上でlinux-headersまたはlinux-kernel-headers パッケージを探してください。

関連する問題