Arch Linuxでカーネルモジュールをコンパイルする

Arch Linuxでカーネルモジュールをコンパイルする

私は現在linux-3.0-ARCHでArch Linuxを実行しており、linux-2.6.22.14用に書かれたカーネルモジュールをコンパイルしたいと思います。

私は事前設定されたDebianでのみカーネルモジュールをコンパイルしました。したがって、私が知る必要があるのは、カーネルソースがどこにあるのか、それに応じてモジュールのMakefileを編集する方法です。

しかし、今私のコンピュータでこれを試しているので、2.6.22.14のソースコードをダウンロードして/ root /に入れました。このファイルを指すようにモジュールのMakefileを変更し、「make」を実行しました。私が今得るものは次のとおりです。

Makefile:1443: *** mixed implicit and normal rules. Stop.

誰かがこのカーネルソースコードをコンパイルする必要があると言ったことがあります。それでは、ソースコードの代わりにここに挿入してコンパイルされたバージョンを取得するより簡単な方法はありますか?

答え1

カーネルヘッダーパッケージが欠落している可能性があります。pacman -S linux-headers

これにより、適切なカーネルヘッダが提供されます。

答え2

モジュールは、3.0 付近の Linux カーネルで正しく動作しない可能性があります。たとえば、スケジューラは2.6.23で大幅に修正されました。モジュールがスケジューラ環境についていくつかの仮定を行うことも、そうでない場合もありますが、最新のシステムで動作するという保証はありません。

構成および構築されていないカーネルソースツリーに対してモジュールを構築することはできません。最も簡単な方法は、/lib/modules/$(uname -r)/build/ほとんどのディストリビューションによって提供されるカーネルパッケージによって提供されるシンボリックリンクを使用し、外部モジュールを構築するのに十分なヘッダーと構成データを提供することです。

現在のカーネル用のモジュールをビルドするには、ディレクトリをモジュールのソースディレクトリに変更して、次のコマンドを実行します。

make -C /lib/modules/`uname -r`/build M=$PWD

これにより、モジュールを正しく構築するためにkbuildメカニズムが呼び出されます。詳しくはDocumentation/kbuild/modules.txtカーネルのソースコードをご覧ください。

答え3

2.6.22 カーネルが古すぎるため、3.0 と互換性がありません。

関連情報