BPF(Berkeley Packet Filter) 最初是一种用于高效网络数据包过滤的内核机制,广泛应用于网络抓包和流量分析工具如 tcpdump。随着内核技术的发展,BPF逐步扩展为 eBPF(extended BPF),即扩展BPF。eBPF 是一种内核虚拟机技术,允许用户在内核空间运行经过安全校验的自定义程序,而无需修改内核源代码。eBPF 程序可以在网络、追踪、性能分析、安全等多个场景下动态加载和运行,大大增强了系统的可观测性和灵活性。eBPF 具备强大的安全性,支持沙箱运行和验证,防止恶意操作,并通过JIT编译和多种挂载点与内核深度集成。eBPF 已成为 Linux 内核生态中不可或缺的底层基础技术,被广泛用于云原生、容器网络、系统监控、安全防护等领域,推动了系统可编程性和智能化水平的提升。本节重点介绍如何在 BiscuitOS 部署和使用 eBPF, 参考如下命令(在部署之前请确保已经部署 BiscuitOS 开发环境,如果未部署请参考 《BiscuitOS 用户手册 - 1.2》:

# 切换到 BiscuitOS 项目目录
cd */BiscuitOS
# 选择开发环境,如果已经选择过可以跳过,这里与 linux 6.10 X86 为例
make linux-6.10-x86_64_defconfig
make docker
# 通过 Kbuild 选择需要部署的应用程序
make menuconfig

  [*] Package  --->
      [*] BFP/EBPF
          -*- BPFTOOL
          [*] BPF C DEMO CODE

# 配置完毕保存,然后进行部署
make

# 切换到实践案例所在目录
cd /BiscuitOS/output/linux-6.10-x86_64/package/BiscuitOS-BPF-default
# 编译实践案例
make download
# 安装依赖组件
make prepare
# 安装到 BiscuitOS
make build

通过上面命令,系统会自动部署 eBPF 运行的环境,并编译测试用例,当 BiscuitOS 启动之后,直接运行 RunBiscuitOS.sh 脚本可以运行测试用例. 可以看到测试用例通过 eBPF 获得内核相关的信息. 开发者可以参考 BiscuitOS-BPF-default 目录下 main.c 文件编写基于 C 的 eBPF 程序.