编译含sched_ext的内核时自定义配置被自动删除的问题求助
解决sched_ext内核编译配置被自动删除的问题
问题原因
CONFIG_SCHED_CLASS_EXT的生效依赖三个前置配置:CONFIG_BPF_SYSCALL=y、CONFIG_BPF_JIT=y、CONFIG_DEBUG_INFO_BTF=y(且DEBUG_INFO_BTF还依赖CONFIG_DEBUG_INFO=y)。你之前仅手动添加了目标配置和部分依赖,未满足完整依赖条件,内核配置系统会自动移除不满足依赖的无效配置项,同时menuconfig也会隐藏未满足依赖的选项。
解决步骤
通过menuconfig完整开启依赖与目标配置
执行make menuconfig进入图形配置界面:- 导航到
General setup→BPF subsystem,将Enable the BPF system call(对应CONFIG_BPF_SYSCALL)设为y - 导航到
Kernel hacking→BPF debugging,将Compile the kernel with BPF JIT support(对应CONFIG_BPF_JIT)设为y - 导航到
Kernel hacking→Compile-time checks and compiler options,先开启Compile the kernel with debug info(对应CONFIG_DEBUG_INFO=y),再开启Generate BTF type information(对应CONFIG_DEBUG_INFO_BTF=y) - 此时回到
Kernel Features→Preemption Model,就能找到Extended scheduler class support(对应CONFIG_SCHED_CLASS_EXT),将其设为y
- 导航到
手动编辑.config的正确方式
如果偏好直接修改配置文件,需先完整添加所有依赖项,再添加目标配置:sudo vim .config在文件中添加/修改以下内容:
CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO_BTF=y CONFIG_SCHED_CLASS_EXT=y保存后执行
make oldconfig,此时配置不会被系统自动删除。规避localmodconfig的局限性
localmodconfig会基于当前系统加载的模块生成最小化配置,可能默认关闭BPF等未被当前系统使用的功能。建议先从基础配置开始:make defconfig再通过
menuconfig或手动修改.config开启所需选项,减少依赖缺失的问题。
内容的提问来源于stack exchange,提问作者Amir Kooshky
相关产品推荐
相关产品推荐

