次のコマンドを含むビルドスクリプトを使用してカーネルモジュールをコンパイルしています。
make -C /lib/modules/$(uname -r)/build SUBDIRS=$PWD modules
以前は動作していましたが、今は次のエラーで失敗します。
make[1]: Entering directory '/usr/src/linux-headers-5.4.0-42-generic'
fs/aufs/Makefile:3: fs/aufs/magic.mk: No such file or directory
make[3]: *** No rule to make target 'fs/aufs/magic.mk'. Stop.
scripts/Makefile.clean:67: recipe for target 'fs/aufs' failed
make[2]: *** [fs/aufs] Error 2
Makefile:1738: recipe for target '_clean_fs' failed
make[1]: *** [_clean_fs] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.4.0-42-generic'
Makefile:39: recipe for target 'clean' failed
make: *** [clean] Error 2
他の出力なしでビルドがここで停止します。どうしたの?
答え1
重要な手がかりは、コンパイルできないカーネルバージョンである5.4.0-42-genericです。
パラメータのサポートはSUBDIRS
次のとおりです。このバージョンから削除されましたM
更新されたパラメータとKBUILD_EXTMOD
環境変数をサポートします。
以前のバージョン(以降2018年11月)は成功したコンパイルにも警告を出力するので、パッケージを更新する頻度に応じてしばらく表示する必要があります。
make[1]: Entering directory '/usr/src/linux-headers-5.3.0-40-generic'
Makefile:227: ================= WARNING ================
Makefile:228: 'SUBDIRS' will be removed after Linux 5.3
Makefile:229:
Makefile:230: If you are building an individual subdirectory
Makefile:231: in the kernel tree, you can do like this:
Makefile:232: $ make path/to/dir/you/want/to/build/
Makefile:233: (Do not forget the trailing slash)
Makefile:234:
Makefile:235: If you are building an external module,
Makefile:236: Please use 'M=' or 'KBUILD_EXTMOD' instead
Makefile:237: ==========================================
これらの警告を無視しないでください!ほぼ常に領域を表します。技術負債。
使用するにはビルドを更新する必要があります。外部モジュールを構築する新しい方法。