首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CONFIG_NO_HZ_FULL编译Ubuntu20.04内核会导致多个配置错误

使用CONFIG_NO_HZ_FULL编译Ubuntu20.04内核会导致多个配置错误
EN

Ask Ubuntu用户
提问于 2022-09-12 13:06:43
回答 3查看 539关注 0票数 2

我正在遵循构建自己的内核上的步骤

我从Ubuntu的git main得到了一个股票内核

代码语言:javascript
运行
复制
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-focal.git

然后继续配置内核。

代码语言:javascript
运行
复制
LANG=C fakeroot debian/rules clean
LANG=C fakeroot debian/rules editconfigs

转到“一般安装/定时器子系统/计时器滴答处理”

点击“全Dynticks系统”

转到“抢占模式”

选择“无强制抢占(服务器)”

对于低延迟内核重复这一点,在退出时,我得到以下配置错误

代码语言:javascript
运行
复制
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消息非常困惑,我不知道它们是什么意思。

注意:我确保可以完全编译内核,而不需要上面的修改。它起作用了。

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2022-09-12 17:37:31

我从未成功地使用过编译内核的引用方法。您试图进行的配置更改对配置依赖项有一定的影响,它们似乎是对check-config的一个挑战。如果我只做了一个更改,然后让编译过程计算出其余的,我得到:

代码语言:javascript
运行
复制
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低延迟。

票数 2
EN

Ask Ubuntu用户

发布于 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时定义它。因此,尽管禁用它是正确的事情,但没有办法通过检查。解决办法是注释掉执行它的注释行:

代码语言:javascript
运行
复制
sed -e '/LP:1349028/ s/^#*/#/' -i ./debian.master/config/annotations

请注意,在构建过程中,还应该通过相同的do_enforce_all=false设置来跳过注释检查:

代码语言:javascript
运行
复制
fakeroot debian/rules do_enforce_all=false binary
票数 1
EN

Ask Ubuntu用户

发布于 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

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1428956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档