从源代码进行配置/编译时,无法选择“完全抢占式内核(实时)”

从源代码进行配置/编译时,无法选择“完全抢占式内核(实时)”

我正在尝试使用最新的稳定 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/231640https://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 实时页面

相关内容