交叉编译此源时,为什么我在一台主机上收到“没有规则来制作目标”错误,而在另一台主机上却没有

交叉编译此源时,为什么我在一台主机上收到“没有规则来制作目标”错误,而在另一台主机上却没有

我将以下 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-sama5d27我在 GA 主机上收到以下错误:

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/firmware,但在 GitHub 操作运行器上失败,而后者没有。

如果您不需要包含额外的证书,则应覆盖此配置设置,使其最终为空。这将允许构建在没有/lib/firmware.

如果您确实需要额外的证书,请将它们放在您的内核存储库克隆旁边的目录中(例如 firmware)旁边linux并更改CONFIG_CFG80211_EXTRA_REGDB_KEYDIR为指向 ( ../firmware)。

答案2

Github Actions 运行程序显然没有/lib/firmware像 Linux 发行版那样包含打包的固件。

斯蒂芬·基特(Stephen Kitt)的答案非常适合您不需要额外证书的情况。如果您确实需要这些证书,那么您需要获取固件并将配置指向它们。

固件可以通过克隆获得 git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

您可能希望将固件放在一个目录中,而不是/lib/firmware避免覆盖现有固件(对于 Github Actions 来说这似乎不是问题)。

相关内容