저는 Linux를 처음 사용하고 Debian bookworm virtualization(UTM)에서 외부 커널 모듈을 컴파일하려고 합니다.
파일 생성
obj-m += hello_world.o
PWD := $(CURDIR)
all:
make -C /lib/modules/`uname -r`/build M=$(PWD)
clean:
make -C /lib/modules/`uname -r`/build M=$(PWD) clean
컴파일이 실패하고 표시됩니다.
./tools/bpf/resolve_btfids/resolve_btfids: not found
리눅스 헤더 파일을 다운로드했습니다
sudo apt install linux-headers-`uname -r`
도구 내부에는 objtool 파일이 하나만 있습니다.
나는 리눅스 소스 코드를 다운로드하고 필요한 파일을 컴파일하여 다음 위치에 넣었습니다.
/usr/src/linux-headers-`uname -r`/tools/bpf/resolve_btfids
모듈을 컴파일하는 데 사용됩니다.
또한 CONFIG_DEBUG_INFO_BTS_MODULES가 이에 대한 책임이 있음을 확인하고 해당 규칙을 제거했습니다.
ifdef CONFIG_DEBUG_INFO_BTF_MODULES
+$(if $(newer-prereqs),$(call cmd,btf_ko))
endif
~에서
/usr/src/linux-headers-`uname -r`/scripts/Makefile.modfinal
빌드도 성공할 수 있습니다.
나는 알고 싶다
- 내가 뭐 잘못 했어요?
- 왜 이런 일이 발생합니까?
- 커널 모듈 개발에 있어서 이것이 정상적인 것입니까?
- 컴파일 도구를 구할 수 있는 다른 방법이 있나요?
관련된 링크들:
답변1
사용하고 싶은 많은 git 허브 모듈을 구축하는 것과 동일한 문제가 있었습니다.
이 변경의 이유를 조사했지만 성공하지 못했습니다.
후속 명령을 덜 고통스럽게 만들기 위해 다음 명령을 사용하여 btfids 도구를 구축했습니다.
apt install linux-source-6.6
tar xvf linux-source-6.6.tar.xz
find linux-source-6.6 | grep resolve_btfids
cd linux-source-6.6/tools/bpf/resolve_btfids
make
file tools/bpf/resolve_btfids/resolve_btfids
mkdir -p /usr/src/linux-headers-`uname -r`/tools/bpf/resolve_btfids
ln -s $(realpath resolve_btfids) /usr/src/linux-headers-`uname -r`/tools/bpf/resolve_btfids