我是 Linux 新手,我正在尝试在 Debian bookworm 虚拟化 (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
我已经下载了 linux 头文件
sudo apt install linux-headers-`uname -r`
在工具内部只有一个 objtool 文件。
我下载了linux源码,编译了所需的文件并将其放在
/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 hub 模块时遇到了同样的问题。
我研究了这种变化的原因/原因,但没有成功。
我确实设法使用以下命令构建了 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