私は現在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 と互換性がありません。