通常、カーネルソースは/usr/src/linux-2.6.x/
に保存されます。モジュールのソースを変更した場合にカーネル全体を再コンパイルしないようにするには、そのモジュールだけを再コンパイルするにはどうすればよいですか?
ソースツリーのルートディレクトリに切り替えて、次のコマンドを実行します。
$ make modules SUBDIRS=drivers/the_module_directory
そして、コンパイルされたモジュールをインストールするには:
$ make modules_install SUBDIRS=drivers/the_module_directory
注: lunakidが述べているように、後者のコマンドはnot最初にモジュールをビルドするので、注意してください。
カーネルバージョン3.xxおよび4.xx複雑です(ただし、希望があるので読み続けてください):
make distclean
新しいソースを複製したばかりでなく、以前に他のモジュールをビルドするために使用した場合/boot/config-`uname -r`
ファイル(例:/ boot/config-4.8.0-46-generic)をカーネルソースフォルダーファイル。configおよびmake oldconfig
を実行します。モジュールがカーネルソースに属している場合は、make menuconfig
を呼び出して、モジュールを検索し、必要に応じて文字「M」を適用して、モジュールが有効になっているかどうかを確認しますmake kernelversion
で確認できます) uname -r
one)make scripts
を使用してスクリプトを作成することを強くお勧めしますmake prepare
およびmake modules_prepare
は、実際のモジュールのビルドの前に実行する必要があります/usr/src/linux-headers-`uname -r`/Module.symvers
に対応するターゲットシステムヘッダーフォルダーからコピーする必要があります(例:/ usr/src/linux-headers-3.13.0-117-generic/Module.symvers)を、モジュールのコンパイルに備えて新しく作成されたモジュールソースファイルフォルダー(1つextra例)。obj-y += <module_source_file_name>.o
またはソースコードが複雑な場合は、 heremake -C <kernel source path> M=the_module_directory
(例:make -C . M=extra/
)でモジュールをビルドするのが適切ですmodprobe --dump-modversion <module_name>.ko
を使用して、モジュールエクスポートAPIとModule.symversの対応する値との間のCRCの一致を確認します。失敗した場合は、代わりにコマンドmodinfo <module_name>.ko
を使用してください解決策は次のとおりです。
すべての変更をコミットし、git tag -a <tag version> -f
コマンドを使用してリリースタグを強制的に変更の上に移動します。次に、ステップ8からモジュールを再構築します
パラメータとして作成するモジュール名またはモジュールディレクトリへのパスを渡すことができます。
make path/to/the/module/itself.ko
make path/to/the/module/directory/
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
https://askubuntu.com/questions/515407/how-recipe-to-build-only-one-kernel-module
Drivers/net/ethernet/intel/e1000/e1000_main.cファイルのコードだけを編集した場合
モジュールをビルドします。
make scripts prepare modules_prepare
make -C . M=drivers/net/ethernet/intel/e1000
モジュールをインストールします。
cp drivers/net/ethernet/intel/e1000/e1000.ko /lib/modules/5.1.15/kernel/drivers/net/ethernet/intel/e1000/e1000.ko