Resolve_btfids 누락으로 인해 Debian bookworm에서 외부 커널 모듈 컴파일이 실패합니다.

Resolve_btfids 누락으로 인해 Debian bookworm에서 외부 커널 모듈 컴파일이 실패합니다.

저는 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

관련 정보