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



我喜欢玩一个先发制人的Linux内核和Yocto。 作为硬件,使用SAMA5D3x Evalboard + SAMA5D35-CM模块。

Atmel 提供了一个元 atmel 层,其中包括"at91-linux_*.bb"配方。此配方为 SAMA5D3x 计算机构建内核。

为了使用实时内核,我应该插入实时补丁并在内核配置中激活它们。

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

如何/在哪里修改给定的内核配方以使其成为实时内核(preempt-rt)?

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

  • "/yocto git clone" ==> Yocto 系统
  • "/元开放嵌入式" ==>元嵌入式配方
  • "/meta-atmel" ==> Atmels yocto layer
  • "/meta-atmel/recipes-kernel/linux/linux-at91_4.4.bb" ==>内核配方
  • "/meta-atmel/conf/machine/sama5d3xek.conf" ==>运行内核的机器
  • "/myTest" ==>我的测试项目
  • "/myTest/recipes-kernel/linux-at91_%.bbappend" ==> 替换内核配置 + 添加自己的设备树
  • "/myTest/recipes-kernel/linux/linux-at91/sama5d3xek/defconfig" ==> 我自己的内核配置
  • /
  • myTest/recipes-kernel/linux/linux-at91/sama5d3xek/myDev.dts ==> 我自己的设备树

任何想法/教程如何设法激活Yocto中的RT内核?

一般来说:

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

对于元 atmel,您应该执行以下操作:

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

元阿特梅尔的陷阱:

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