我将以下 Linux 内核源代码库克隆到几个不同的主机(我的本地计算机和 Github Actions 运行器)
https://gitlab.conclusive.pl/devices/linux/-/tree/master
使用构建模块时,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 来说这似乎不是问题)。