由于缺少resolve_btfids,在 Debian bookworm 上编译外部内核模块失败

由于缺少resolve_btfids,在 Debian bookworm 上编译外部内核模块失败

我是 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

相关内容