menuconfig에 CONFIG_DEBUG_INFO_BTF, CONFIG_DEBUG_INFO_BTF_MODULES 옵션이 없는 경우
이상하군요, ^^ 커널 업데이트를 하려고 "make menuconfig"을 하는 과정 중에 CONFIG_DEBUG_INFO_BTF, CONFIG_DEBUG_INFO_BTF_MODULES 옵션이 사라지는 현상이 있습니다.
새로운 커널 빌드를 하기 전에, 현재 환경의 .config 파일을 복사해 재사용을 했는데요, 분명히 거기에는 CONFIG_DEBUG_INFO_BTF_MODULES=y 설정이 있었습니다.
$ sudo cp -v /boot/config-$(uname -r) .config
$ cat .config | grep ^CONFIG_DEBUG_INFO
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_DWARF5=y
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_DEBUG_INFO_BTF_MODULES=y
하지만 make menuconfig을 한번 거치고 나면 CONFIG_DEBUG_INFO_BTF, CONFIG_DEBUG_INFO_BTF_MODULES 설정이 사라집니다.
$ sudo make menuconfig
$ cat .config | grep ^CONFIG_DEBUG_INFO
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_DWARF5=y
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
단순히 menuconfig에서 그냥 저장만 해도 CONFIG_DEBUG_INFO_BTF와 CONFIG_DEBUG_INFO_BTF_MODULES 옵션이 사라집니다. (심지어, menuconfig을 거치지 않고 .config 파일을 복사 후 곧바로 빌드해도 그 2개 옵션이 적용되지 않은 채로 빌드가 됩니다.)
일단 menuconfig 화면에서 '/' 키를 눌러 그 2개의 옵션을 검색해 보면, 모두 'n'으로 설정된 것을 확인할 수 있습니다.
Symbol: DEBUG_INFO_BTF [=n]
Type : bool
Defined at lib/Kconfig.debug:377
Prompt: Generate BTF type information
Depends on: DEBUG_INFO [=y] && !DEBUG_INFO_SPLIT [=n] && !DEBUG_INFO_REDU
Location:
-> Kernel hacking
(1) -> Compile-time checks and compiler options
-> Generate BTF type information (DEBUG_INFO_BTF [=n]
Symbol: DEBUG_INFO_BTF_MODULES [=n]
Type : bool
Defined at lib/Kconfig.debug:410
Prompt: Generate BTF type information for kernel modules
Depends on: DEBUG_INFO [=y] && DEBUG_INFO_BTF [=n] && MODULES [=y] && PAHOLE_HAS_SPLIT_BTF [=n]
Location:
-> Kernel hacking
(1) -> Compile-time checks and compiler options
-> Generate BTF type information for kernel modules (DEBUG_INFO_BTF_MODULES [=n])
여기서 문제는, 저 설명에 따라 "Kernel hacking" / "Compile-time checks and compiler options" 메뉴를 가도 그에 대응하는 메뉴가 없다는 점입니다.
왜 이런 현상이 있나 싶었더니... 이거저거 해본 결과 ^^; pahole 패키지가 설치돼 있지 않은 경우 위에서처럼 CONFIG_DEBUG_INFO_BTF, CONFIG_DEBUG_INFO_BTF_MODULES 옵션이 사라지는 현상이 있습니다.
따라서 pahole 패키지를 설치하고 나서,
$ sudo apt install pahole -y
다시 make menuconfig을 가면 CONFIG_DEBUG_INFO_BTF, CONFIG_DEBUG_INFO_BTF_MODULES 옵션이 나타납니다.
그러니까, 커널 빌드 시 특정 도구가 설치돼 있는지에 따라 옵션도 달라질 수 있는 것 같습니다. ^^;
위와 관련해서 문서를 찾아보면 아래와 같은 내용이 있군요. ^^
BPF CO-RE (Compile Once – Run Everywhere)
; https://github.com/libbpf/libbpf?tab=readme-ov-file#bpf-co-re-compile-once--run-everywhere
If your kernel doesn't come with BTF built-in, you'll need to build custom kernel. You'll need:
pahole 1.16+ tool (part of dwarves package), which performs DWARF to BTF conversion;
kernel built with CONFIG_DEBUG_INFO_BTF=y option;
you can check if your kernel has BTF built-in by looking for /sys/kernel/btf/vmlinux file:
$ ls -la /sys/kernel/btf/vmlinux
-r--r--r--. 1 root root 3541561 Jun 2 18:16 /sys/kernel/btf/vmlinux
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]