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

Linuxヘッダファイルをダウンロードしました

sudo apt install linux-headers-`uname -r`

ツールの内部にはobjtoolファイルが1つしかありません。

私は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ハブモジュールを構築するのと同じ問題がありました。

この変更の理由を調査しましたが、成功しませんでした。

後続のコマンドをあまり苦痛にするために、次のコマンドを使用して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

おすすめ記事