이 소스를 크로스 컴파일할 때 한 호스트에서는 "대상을 만드는 규칙 없음" 오류가 발생하지만 다른 호스트에서는 발생하지 않는 이유는 무엇입니까?

이 소스를 크로스 컴파일할 때 한 호스트에서는 "대상을 만드는 규칙 없음" 오류가 발생하지만 다른 호스트에서는 발생하지 않는 이유는 무엇입니까?

다음 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에서는 문제가 되지 않는 것 같습니다).

관련 정보