このソースをクロスコンパイルすると、あるホストで「ターゲットを作成するルールなし」エラーが発生しますが、他のホストでは発生しません。

このソースをクロスコンパイルすると、あるホストで「ターゲットを作成するルールなし」エラーが発生しますが、他のホストでは発生しません。

次のLinuxカーネルソースコードストアをいくつかの他のホスト(私のローカルコンピュータとGithub Actionsランナー)に複製しました。

https://gitlab.conclusive.pl/devices/linux/-/tree/master

使っていますkstr-sama5d27 defconfig

ビルドモジュールを使用すると、make modules -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOCALVERSION=-kstr-sama5d27GAホストで次のエラーが発生します。

make[2]: *** 'net/wireless/extra-certs.c' に必要な '/lib/firmware' ターゲットを生成するルールはありません。止まる

そして私のローカルコンピュータではビルドが成功します。

GEN net/wireless/extra-certs.c
CC [M] net/wireless/extra-certs.o

net/wireless/Makefileを見ましたが、この問題を解決する方法についてのアイデアを提供するものはありません。

この問題は、ビルド環境の違いによって引き起こされると思います。

答え1

このためですCONFIG_CFG80211_EXTRA_REGDB_KEYDIRに設定します/lib/firmware。この構成項目が空でない場合、ビルドが発生します。頼るextra-certs.o、それ自体構成値で指定されたディレクトリによって異なる。したがって、ビルドは自分のシステムでは成功しますが、/lib/firmwareGitHub Action Runnerでは失敗します。

追加の証明書を含める必要がない場合は、この構成設定が空になるように上書きする必要があります。これを行うと/lib/firmware

追加の証明書が必要な場合は、カーネルストアのレプリカ(例えば firmware)の横にある()を指すようにlinux変更します。CONFIG_CFG80211_EXTRA_REGDB_KEYDIR../firmware

答え2

Github Actionsランナーには、/lib/firmwareLinuxディストリビューションなどのパッケージファームウェアが含まれていないようです。

Stephen Kittの答えは、追加の証明書を必要としない状況に適しています。これらの証明書が本当に必要な場合は、ファームウェアをインポートしてその証明書の構成を指定する必要があります。

レプリケーションでファームウェアを入手できます。 git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

既存のファームウェアを上書きするのを防ぐのではなく、ファームウェアをディレクトリに保存することをお勧めします/lib/firmware(Github Actionsでは問題にならないようです)。

関連情報