Linux kernel 的编译选项(flags)

最近在一个树莓派上实验 BPF 工具, 首先安装了 BCC 和 bpftrace. 不过安装之后有些不能用. 根据官方安装文档, 要使用这些工具, Linux kernel 在编译的时候, 需要打开某些 flags. 根据文档, 这些 flags 在这些地方:

Kernel compile flags can usually be checked by looking at
/proc/config.gz or /boot/config-<kernel-version>.

但是我的树莓派却没有这些文件:

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.15.32-v7+ #1538 SMP Thu Mar 31 19:38:48 BST 2022 armv7l GNU/Linux
pi@raspberrypi:~ $ cat /etc/issue
Raspbian GNU/Linux 11 \n \l

pi@raspberrypi:~ $ ls -lah /proc/config.gz
ls: cannot access '/proc/config.gz': No such file or directory
pi@raspberrypi:~ $ ls -lah /boot/* | grep config
-rwxr-xr-x 1 root root 1.7K Oct  4  2018 /boot/config.txt
pi@raspberrypi:~ $ cat /boot/config.txt | grep BPF

可以看到, 我最新版本的 Raspbian 里面没有 /proc/config.gz 文件. 虽然能在 /boot/ 目录看到一个 config.txt, 却没有找到 BPF 相关的配置.

于是去查看 proc 伪文件系统的 man 文档, 可以看到说 /proc/config.gz 其实是由 /lib/modules/$(uname -r)/build/.config 复制过来的. 于是去查看这个原始文件:

pi@raspberrypi:~ $ cat /lib/modules/$(uname -r)/build/.config | grep BPF
CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
# BPF subsystem
CONFIG_BPF_SYSCALL=y
# CONFIG_BPF_JIT is not set
# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
# CONFIG_BPF_PRELOAD is not set
# end of BPF subsystem
CONFIG_CGROUP_BPF=y
CONFIG_NETFILTER_XT_MATCH_BPF=m
# CONFIG_BPFILTER is not set
# CONFIG_NET_CLS_BPF is not set
# CONFIG_NET_ACT_BPF is not set
# CONFIG_BPF_STREAM_PARSER is not set
CONFIG_LWTUNNEL_BPF=y
CONFIG_BPF_LIRC_MODE2=y
# CONFIG_NBPFAXI_DMA is not set
CONFIG_BPF_EVENTS=y
# CONFIG_TEST_BPF is not set

所以, 其实这些 kernel 的编译配置都是在存在这个文件的.

标签: none

添加新评论