内核与 BTF
Honk 的核心用 CO-RE eBPF,没有 BTF 就起不来。九成的「装好了启动失败」都出在这里,先按这一页排查。
内核版本
eBPF 数据面要求 Linux 6.12+。24.10 及更早(6.6 / 5.15)装上也起不来,所以只发 25.12 的包。
查看当前内核:
uname -r
BTF 查找顺序
与核心内部的查找顺序一致,前一个命中的就用它:
| 顺序 | 位置 | 说明 |
|---|---|---|
| 1 | HONK_VMLINUX_BTF 指定的文件 | 设了它就只认这一个,读不到直接拒绝启动,不回退 |
| 2 | /sys/kernel/btf/vmlinux | 内核自带 BTF 的固件有(如 ImmortalWrt) |
| 3 | /usr/lib/debug/boot/vmlinux | vmlinux-btf 装的就是这里,官方 OpenWrt 走这条 |
快速确认有没有:
ls -l /sys/kernel/btf/vmlinux /usr/lib/debug/boot/vmlinux 2>/dev/null
两条路径都没有怎么办
- 先试软件源:安装脚本会自动补装
vmlinux-btf,也可以手动apk add vmlinux-btf,版本要和内核主次版本一致 - 自编译或快照内核:拿同一次编译的
vmlinux生成 BTF:pahole --btf_encode_detached=vmlinux.btf vmlinux,放到/usr/lib/debug/boot/vmlinux - 临时指过去:把生成好的 BTF 放到任意位置,用
HONK_VMLINUX_BTF=/path/to/vmlinux.btf指给它
用外部 BTF 时「原生 UDP 接收追踪」会降级,其余功能不受影响。只有内核自带 BTF 才能开这项。
起不来时按顺序看
uname -r—— 低于 6.12 直接换固件,别继续折腾- BTF 三条路径是否存在(见上)
- 依赖模块是否加载:
lsmod | grep -E "sch_ingress|cls_bpf|veth|nft_queue" - LuCI「服务 → Honk → 维护 → 系统检查」,它会逐项报缺什么
- 再看常见问题里对应的现象