最新のカーネルで「SUBDIRS=...」を使用したカーネルモジュールのコンパイルが失敗するのはなぜですか?

最新のカーネルで「SUBDIRS=...」を使用したカーネルモジュールのコンパイルが失敗するのはなぜですか?

次のコマンドを含むビルドスクリプトを使用してカーネルモジュールをコンパイルしています。

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: ==========================================

これらの警告を無視しないでください!ほぼ常に領域を表します。技術負債

使用するにはビルドを更新する必要があります。外部モジュールを構築する新しい方法

おすすめ記事