我正在遵循构建自己的内核上的步骤
我从Ubuntu的git main得到了一个股票内核
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-focal.git
然后继续配置内核。
LANG=C fakeroot debian/rules clean
LANG=C fakeroot debian/rules editconfigs
转到“一般安装/定时器子系统/计时器滴答处理”
点击“全Dynticks系统”
转到“抢占模式”
选择“无强制抢占(服务器)”
对于低延迟内核重复这一点,在退出时,我得到以下配置错误
check-config: /tmp/tmp.B1SJkC9a1n/CONFIGS/amd64-config.flavour.generic: loading config
check-config: /src/ubuntu-focal/debian.master/config/annotations loading annotations
check-config: FAIL (n != y): CONFIG_NO_HZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf':
'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}>
check-config: FAIL (n != -): CONFIG_CONTEXT_TRACKING_FORCE policy<{'amd64': '-',
'arm64': '-', 'armhf': '-', 'i386': '-', 'ppc64el': '-', 's390x': '-'}>
note<LP:1349028> mark<ENFORCED>
check-config: FAIL (n != y): CONFIG_NO_HZ_IDLE policy<{'amd64': 'y', 'arm64': 'y',
'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> note<LP:1413968>
check-config: FAIL (y != n): CONFIG_NO_HZ_FULL policy<{'amd64': 'n', 'arm64': 'n',
'armhf': 'n', 'ppc64el': 'n'}>
check-config: FAIL (- != y): CONFIG_TICK_CPU_ACCOUNTING policy<{'amd64': 'y', 'arm64': 'y',
'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', }>
check-config: FAIL (y != n): CONFIG_VIRT_CPU_ACCOUNTING_GEN policy<{'amd64': 'n',
'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}>
如果我继续编译二进制文件,它最终会失败。
我觉得我在尝试手动调整参数,这简直是白费力气。这里有遗漏的一步吗?
我对这些config消息非常困惑,我不知道它们是什么意思。
注意:我确保可以完全编译内核,而不需要上面的修改。它起作用了。
发布于 2022-09-12 17:37:31
我从未成功地使用过编译内核的引用方法。您试图进行的配置更改对配置依赖项有一定的影响,它们似乎是对check-config
的一个挑战。如果我只做了一个更改,然后让编译过程计算出其余的,我得到:
doug@s19:~/kernel/linux$ scripts/diffconfig .config-6.0-rc5 .config
-TICK_CPU_ACCOUNTING y
NO_HZ_FULL n -> y
NO_HZ_IDLE y -> n
VIRT_CPU_ACCOUNTING_GEN n -> y
+CONTEXT_TRACKING_USER y
+CONTEXT_TRACKING_USER_FORCE n
+RCU_NOCB_CPU y
+RCU_NOCB_CPU_DEFAULT_ALL n
+VIRT_CPU_ACCOUNTING y
您可以在check-config
错误列表中看到其中一些错误。使用这方法,内核为我编译了很好,尽管6.0-rc5低延迟。
发布于 2023-01-14 02:14:35
有一个有用的指南来自规范张贴作为公认的答案这里:
“注释文件由规范管理,用于防止在维护期间发生内核配置错误。如果有人正在修改内核信任,我们假设他们知道他们在做什么,我们建议他们禁用注释检查。<...>要禁用注释检查,可以运行以下命令:
fakeroot debian/rules editconfigs do_enforce_all=false
因此,在大多数情况下,手工编辑烦恼是不必要的,这些检查可以(而且应该)跳过do_enforce_all=false
。
注意:当非交互地更改信任时,例如使用
scripts/config
时,可以将相同的参数传递给fakeroot debian/rules updateconfigs do_enforce_all=false
。
这方面的一个例外是使用mark<ENFORCED>
标记的规则,这些规则是强制执行的。具体来说,CONTEXT_TRACKING_FORCE
是作为未定义的强制执行的。这个已完成可以防止用户无意中启用它,但是必须在启用NO_HZ_FULL
时定义它。因此,尽管禁用它是正确的事情,但没有办法通过检查。解决办法是注释掉执行它的注释行:
sed -e '/LP:1349028/ s/^#*/#/' -i ./debian.master/config/annotations
请注意,在构建过程中,还应该通过相同的do_enforce_all=false
设置来跳过注释检查:
fakeroot debian/rules do_enforce_all=false binary
发布于 2022-09-12 17:37:02
好了,这个问题解决了。如果您在这里看到了这个内核指南,那么问题是check-config
脚本会检查内核中的配置是否正是他们发布的黄金配置。
这意味着,如果您更改了单个配置条目,则必须编辑文件debian.master/config/annotations
,搜索相应的条目并更改平台的设置(在我的示例中是amd64)。
我做的另一个错误是在编译分支debian.master/config/annotations
时编辑origin/hwe-5.15.0
。如果您不在主版,则应改为编辑debian.hwe-5.15.0/config/annotations
。
一旦手动修改了所有内容,您就可以编译内核了,没有问题。
报告:https://lucisqr.substack.com/p/compiling-a-tickless-kernel-on-ubuntu
https://askubuntu.com/questions/1428956
复制相似问题