如何在 Yocto 中为评估板(具有制造商的预设内核)设置抢占式实时内核?

How to setup a pre-emptive real time kernel in Yocto for a evalboard(which has a preset kernel from the manufacturer)?

我喜欢先发制人 linux 内核和 Yocto。 作为硬件,使用了 SAMA5D3x Evalboard + SAMA5D35-CM 模块。

Atmel 正在提供元 atmel 层,其中包括 "at91-linux_*.bb" 配方。此配方为 SAMA5D3x 机器构建内核。

为了使用实时内核,我应该插入实时补丁并在 kernel config 处激活它们。

我没有找到如何使用现有内核执行此操作的教程。我的问题是:

How/where 修改给定的内核配方使其成为实时内核(preempt-rt)?

我的测试项目位于 项目目录“/home/user/yocto”。它有以下内容:

任何 ideas/tutorials 如何在 Yocto 中激活 RT-Kernel?

总的来说:

.../source/poky/recipes-kernel/linux 你应该找到一个 linux-yocto-rt_X.XX.bb 编译完整抢占式 RT 内核的方法。

对于 meta-atmel 你应该这样做:

  1. 为您的内核版本下载正确的 RT 补丁,并使用 .bbappend 文件将其应用到您当前的 linux 内核配方。您可以找到补丁 HERE
  2. 将补丁添加到您的 bbappend 文件(存储在您接受的目录之一中您自己的层中)。 p.e.: SRC_URI += "file://0001-linux-rt.patch"
  3. 激活抢占式内核。在您所在层的 defconfig 中手动设置 CONFIG_PREEMPT=y。或者你可以使用 bitbake virtual/kernel -c menuconfig

meta-atmel 的陷阱:

  1. linux-at91_4.4.bb 配方不关心内核的补丁和子级别 (p.e. 4.4.66 -> ..)。如果 at91-linux 有新版本,它将在一段时间后进入 meta-atmel 层。
  2. linux 内核的 RT 分支不是为每个新的子级别提供的
  3. 这意味着您自己的元层不断中断