私は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