如何在 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”。它有以下内容:
- "/yocto git clone" ==> Yocto 系统
- "/meta-openembedded" ==> 元嵌入食谱
- "/meta-atmel" ==> atmels yocto 层
- "/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 ==> 我自己的设备树
任何 ideas/tutorials 如何在 Yocto 中激活 RT-Kernel?
总的来说:
在 .../source/poky/recipes-kernel/linux
你应该找到一个 linux-yocto-rt_X.XX.bb
编译完整抢占式 RT 内核的方法。
对于 meta-atmel 你应该这样做:
- 为您的内核版本下载正确的 RT 补丁,并使用 .bbappend 文件将其应用到您当前的 linux 内核配方。您可以找到补丁 HERE
- 将补丁添加到您的
bbappend
文件(存储在您接受的目录之一中您自己的层中)。 p.e.: SRC_URI += "file://0001-linux-rt.patch"
- 激活抢占式内核。在您所在层的 defconfig 中手动设置
CONFIG_PREEMPT=y
。或者你可以使用 bitbake virtual/kernel -c menuconfig
meta-atmel 的陷阱:
- linux-at91_4.4.bb 配方不关心内核的补丁和子级别 (p.e. 4.4.66 -> ..)。如果 at91-linux 有新版本,它将在一段时间后进入 meta-atmel 层。
- linux 内核的 RT 分支不是为每个新的子级别提供的
- 这意味着您自己的元层不断中断
我喜欢先发制人 linux 内核和 Yocto。 作为硬件,使用了 SAMA5D3x Evalboard + SAMA5D35-CM 模块。
Atmel 正在提供元 atmel 层,其中包括 "at91-linux_*.bb" 配方。此配方为 SAMA5D3x 机器构建内核。
为了使用实时内核,我应该插入实时补丁并在 kernel config 处激活它们。
我没有找到如何使用现有内核执行此操作的教程。我的问题是:
How/where 修改给定的内核配方使其成为实时内核(preempt-rt)?
我的测试项目位于 项目目录“/home/user/yocto”。它有以下内容:
- "/yocto git clone" ==> Yocto 系统
- "/meta-openembedded" ==> 元嵌入食谱
- "/meta-atmel" ==> atmels yocto 层
- "/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 ==> 我自己的设备树
任何 ideas/tutorials 如何在 Yocto 中激活 RT-Kernel?
总的来说:
在 .../source/poky/recipes-kernel/linux
你应该找到一个 linux-yocto-rt_X.XX.bb
编译完整抢占式 RT 内核的方法。
对于 meta-atmel 你应该这样做:
- 为您的内核版本下载正确的 RT 补丁,并使用 .bbappend 文件将其应用到您当前的 linux 内核配方。您可以找到补丁 HERE
- 将补丁添加到您的
bbappend
文件(存储在您接受的目录之一中您自己的层中)。 p.e.:SRC_URI += "file://0001-linux-rt.patch"
- 激活抢占式内核。在您所在层的 defconfig 中手动设置
CONFIG_PREEMPT=y
。或者你可以使用bitbake virtual/kernel -c menuconfig
meta-atmel 的陷阱:
- linux-at91_4.4.bb 配方不关心内核的补丁和子级别 (p.e. 4.4.66 -> ..)。如果 at91-linux 有新版本,它将在一段时间后进入 meta-atmel 层。
- linux 内核的 RT 分支不是为每个新的子级别提供的
- 这意味着您自己的元层不断中断