我正在尝试使用最新的稳定 PREEMPT_RT 补丁(5.4.28-rt19)编译 5.4 内核,但由于某种原因无法选择完全抢占式内核 (RT)里面的选项制作 nconfig/menconfig。
我之前编译过4.19 rt补丁,就像将当前配置(/boot/config-4.18-xxx)复制到新的一样简单.config
,并且会显示该选项。现在我只看到:
No Forced Preemption (Server)
Voluntary Kernel Preemption (Desktop)
Preemptible Kernel (Low-Latency Desktop)
如果我按 F4 到“显示所有”,我确实看到了这个选项:
XXX Fully Preemptible Kernel (Real-Time)
但无法选择它。我尝试.config
使用各种 PREEMPT 选项手动设置它,例如:
CONFIG_PREEMPT=y
CONFIG_PREEMPT_RT_BASE=y
CONFIG_PREEMPT_RT_FULL=y
但它从来没有表现出来。我只是继续编译它CONFIG_PREEMPT_RT_FULL=y
(在保存之前被覆盖make nconfig
),但它似乎仍然不是安装的完全抢占式内核。
对于 4.19,uname -a
会显示类似以下内容:
Linux 4.19.106-rt45 #2 SMP PREEMPT RT <date>
或类似的东西,但现在它只会说:
Linux 5.4.28-rt19 #2 <date>
有人知道我在这里缺少什么吗?
操作系统:CentOS 8.1.1911
内核:4.18.0-147.8.1 -> 5.4.28-rt19
答案1
make nconfig
请在启动/后启用专家模式menuconfig
。然后您将能够选择完全抢占式内核 (RT) 选项。
答案2
utk 采取的方法对我来说并不完全有效。
我在论文中使用 ARM64 服务器 (ThunderX CN8890),无论我做什么,我都无法让完全抢占式内核 (RT) 出现在菜单配置中。
检查 kernel/Kconfig.preempt 后我得到了答案:
config PREEMPT_RT
bool "Fully Preemptible Kernel (Real-Time)"
depends on EXPERT && ARCH_SUPPORTS_RT
select PREEMPTION
->https://elixir.bootlin.com/linux/latest/source/kernel/Kconfig.preempt#L61
我已启用 EXPERT 标志(通过上面评论中的 krishna chaitanya 切换嵌入式系统),但我的配置文件缺少条目:CONFIG_ARCH_SUPPORTS_RT
当我手动输入该标志时,它将被 make 步骤覆盖。要默认启用此标志,请打开文件 arch/Kconfig 并搜索条目:ARCH_SUPPORTS_RT。 (在 nano 中按 CTRL+W 进行搜索)
更改条目自
config ARCH_SUPPORTS_RT
bool
到
config ARCH_SUPPORTS_RT
def_bool y
当您现在还启用了 EXPERT(常规设置 -> 嵌入式系统)标志时,您应该在常规设置 -> 抢占模型下看到“完全可抢占内核(实时)”选项。
强制使用标志是解决这个问题的一种很奇怪的方法,但它仍然对我有用。
答案3
接受的答案适用于最高 5.8 的内核版本。从5.9开始,在出现Fully Preemptable选项之前需要禁用KVM。该选项可以在以下位置找到:
Virtualization -> Kernel-based Virtual Machine (KVM) support
我发现了这一点,感谢https://unix.stackexchange.com/a/616822/231640和https://lore.kernel.org/linux-rt-users/[电子邮件受保护]
答案4
我认为您要么缺少实时补丁,要么使用带有 RT 补丁的 Linux 内核源代码: https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git/
也可以看看Linux 基金会 wiki 实时页面