如何在Yocto中使用自己的设备树和修改后的内核配置?

时间:2016-05-20 13:20:42

标签: linux-kernel embedded-linux yocto bitbake

我正在努力建立一个自己的"嵌入式Linux"与yocto。它基于SAMA5D3x-MB + SAMA5D3x-CM(RONETIX)和SAMA5D35。我有两个问题:

1。)更改设备树

我根据以下内容构建图像:MACHINE ?? =" sama5d3xek"

在生成过程之后,我在deploy dir中找到了5D35的两个设备树文件:

  • 的zImage - 4.1 + + git0 19291d7be4-R0-sama5d35ek-.dtb
  • 的zImage - 4.1 + + git0 19291d7be4-R0-sama5d35ek-REVC-.dtb

因为主板是revD我使用的是zImage - 4.1 + git0 + 19291d7be4-r0-sama5d35ek-.dtb。

在此文件中,只定义了can0和i2c1。

我也喜欢使用can1和i2c0。为此我想我需要创建一个自己的dts文件并将其包含在内核构建过程中。

到目前为止,我将dts文件放在我的元测试配方中。想法如何将其复制/修补到内核中?

2。)更改内核配置

我检查了内核 bitbake virtual / kernel -c menuconfig

因为我没有使用SAMA5D2等,只有控制台我停用了这些内核配置。我保存了新的" .config"到" my.config"进入我的食谱目录。我有一个类似的问题,如1 - 如何修补/复制到内核?

我是yocto和内核黑客的新手。知道怎么做吗?

3 个答案:

答案 0 :(得分:18)

如果您正在使用最近的Yocto项目,那么您可以使用recipetool来完成大部分的工作。您有两个选项,您可以使用现有的recipetool命令和少量的手动工作,或者您可以在meta-mentor中使用recipetool插件,该插件提供一些特定于内核的命令来为您执行此操作。

图层设置

首先,您需要一个图层来存储您的更改。如果您已经创建了一个图层,则可以使用它,否则我们可以创建一个图层并将其添加到我们的配置中:

$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local

选项一:使用meta-mentor中的recipetool插件

设置

首先,克隆元指导者:

$ git clone https://github.com/MentorEmbedded/meta-mentor

接下来,将meta-mel添加到您的配置中:

$ bitbake-layers add-layer path/to/meta-mentor/meta-mel

或者将meta-mentor / meta-mel / lib复制到您自己的图层中:

$ cp -a path/to/meta-mentor/meta-mel/lib meta-local/

设备树

$ recipetool kernel_add_dts meta-local /path/to/your.dts

内核配置

$ recipetool kernel_add_fragments meta-local /path/to/your.cfg

或者:

$ recipetool kernel_set_defconfig meta-local /path/to/the/defconfig

选项二:手动

在下面的部分中,显然您的机器名称应为sama5d3xek。传递给下面的recipetool命令的'-m your-machine-name'使得配方中的更改特定于您的机器,而不是影响使用该配方的任何机器。如果您知道配方仅用于您的机器,那么您可以放弃它,但保留它是最安全的,因为一些BSP层对多台机器使用相同的内核配方。例如,linux-yocto用于许多。

设备树

然后,假设你有一个方便的.dts你想使用:

$ recipetool appendsrcfile -wm your-machine-name path/to/meta-local virtual/kernel /path/to/your.dts 'arch/${ARCH}/boot/dts/your.dts'

这将在元本地中创建.bbappend并将.dts添加到SRC_URI,将其放在内核源代码树中的相应路径中。下一步是编辑它创建的附加,并将.dts的.dtb添加到KERNEL_DEVICETREE变量,即:

KERNEL_DEVICETREE += "your.dtb"

如果内核配方包含recipes-kernel/linux/linux-dtb.inc,则KERNEL_DEVICETREE中的任何.dtb文件都将使用内核的构建系统从其.dts文件创建。有些内核不包含linux-dtb.inc,在这种情况下你可以自己添加:

require recipes-kernel/linux/linux-dtb.inc

内核配置

内核配置稍微复杂一点,因为配置的完成方式因内核配方而略有不同。一些内核配方支持配置片段(它只是一个带有defconfig / .config部分的文本文件),而其他配置片段则必须完全覆盖配置。 'linux-yocto'配方可以处理和使用片段,就像其他一些片段一样。

要查看您正在使用的内核配方(顶部文件名将是使用的那个):

$ bitbake -e virtual/kernel | grep '^FILE='

如果要使用配置片段,可以手动创建片段,也可以生成片段:

$ bitbake -c menuconfig virtual/kernel
$ bitbake -c diffconfig virtual/kernel

'diffconfig'任务将根据menuconfig中的更改创建一个片段,并打印它的路径。

然后你可以将它添加到内核中(虽然只有某些食谱会使用它):

$ recipetool appendsrcfile -wWm your-machine-name meta-local virtual/kernel /path/to/your.cfg

要覆盖整个配置,大多数配方都会遵守并使用'defconfig'源文件,因此:

$ recipetool appendsrcfile -Wm your-machine-name meta-local virtual/kernel /path/to/the/defconfig

注意:defconfig不是自动生成的。将defconfig替换为menuconfig('。config')的结果。

答案 1 :(得分:1)

关于这个问题,出于教育目的,我试图将设备树添加到x86体系结构(内核5.2.20)。要启用设备树编译器,需要对配置进行以下补充:

CONFIG_COMPILE_TEST=y    
CONFIG_OF=y    
CONFIG_OF_ALL_DTBS=y

检查文件是否合并到您的内核配置的方便位置是文件
kernel-source / .kernel-meta / cfg / merge_config_build.log

答案 2 :(得分:0)

如果您想为 linux-yocto 内核生成补丁,devtool 会非常方便。其他内核可能不支持 devtool。

## create kernel source patch
devtool modify virtual/kernel
# make some changes
cd ~/poky_sdk/workspace/sources/linux-yocto
vi init/calibrate.c
# test before patch
bitbake -C compile virtual/kernel
# create patch
git add .
git commit -m 'some fix'
devtool update-recipe -a ~/meta-mylayer/  linux-yocto
# clean the source
rm -rf workspace/sources/linux-yocto/

详情见devtool