Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 如何在Yocto中使用自己的设备树和修改过的内核配置?_Linux Kernel_Embedded Linux_Yocto_Bitbake - Fatal编程技术网

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

Linux kernel 如何在Yocto中使用自己的设备树和修改过的内核配置?,linux-kernel,embedded-linux,yocto,bitbake,Linux Kernel,Embedded Linux,Yocto,Bitbake,我正在与yocto一起构建自己的“EmbededLinux”。它基于SAMA5D3x MB+SAMA5D3x CM(RONETIX)和SAMA5D35。我有两个问题: 1.)更改设备树 我基于:MACHINE???=“sama5d3xek”构建图像 生成过程之后,我在deploy目录中找到了5D35的两个设备树文件: zImage--4.1+git0+19291d7be4-r0-sama5d35ek-.dtb zImage--4.1+git0+19291d7be4-r0-sama5d35ek-

我正在与yocto一起构建自己的“EmbededLinux”。它基于SAMA5D3x MB+SAMA5D3x CM(RONETIX)和SAMA5D35。我有两个问题:

1.)更改设备树

我基于:MACHINE???=“sama5d3xek”构建图像

生成过程之后,我在deploy目录中找到了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虚拟/内核-c菜单配置

因为我没有使用SAMA5D2等,只有控制台停用了这些内核配置。我将新的“.config”保存到“my.config”中的my recipe目录中。我有一个类似于1的问题-如何将其修补/复制到内核中


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

如果你正在参加一个最新的Yocto项目发布,你可以利用recipetool来完成这方面的大部分工作。您有两个选项,可以使用现有的recipetool命令和少量的手动工作,也可以使用meta mentor中的recipetool插件,该插件提供一些特定于内核的命令来完成这项工作

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

$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local
$ bitbake-layers add-layer path/to/meta-mentor/meta-mel
选项一:使用meta mentor的recipetool插件 安装程序 首先,克隆元导师:

$ git clone https://github.com/MentorEmbedded/meta-mentor
接下来,将mel添加到配置中:

$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local
$ 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/
设备树 内核配置 或:

备选方案二:手动 在下面的部分中,显然在您的情况下,您的机器名应该是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'
这将在meta local中创建一个.bbappend,并将.dts添加到SRC_URI中,将其放置在内核源代码树中的适当路径中。下一步是编辑它创建的append,并将.dts的.dtb添加到KERNEL\u DEVICETREE变量中,即:

KERNEL_DEVICETREE += "your.dtb"
如果内核配方包括
recipes kernel/linux/linux dtb.inc
,那么内核设备树中的任何.dtb文件都将使用内核的构建系统从它们的.dts文件创建。有些内核不包含linux-dtb.inc,在这种情况下,您可以在附加中自己添加:

require recipes-kernel/linux/linux-dtb.inc
内核配置 内核配置稍微复杂一点,这是因为不同内核配方之间配置的方式略有不同。一些内核配方支持配置片段(这只是一个文本文件,其中包含defconfig/.config的一部分),而其他内核配方则必须完全覆盖配置。“linux yocto”配方可以处理和使用片段,其他一些配方也可以

要查看您正在使用的内核配方(最上面的文件名将是使用的文件名):

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

$ bitbake -c menuconfig virtual/kernel
$ bitbake -c diffconfig virtual/kernel
“diffconfig”任务将使用menuconfig中的更改创建一个片段,并打印其路径

然后,您可以将其添加到内核中(尽管同样,只有某些配方会使用它):

要覆盖整个配置,大多数配方将遵循并使用“defconfig”源文件,因此:

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

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

与此问题相关,出于教育目的,我尝试将设备树添加到x86体系结构(内核5.2.20)。要启用设备树编译器,需要在配置中添加以下内容:

CONFIG_COMPILE_TEST=y    
CONFIG_OF=y    
CONFIG_OF_ALL_DTBS=y
此外,为了在运行时启用设备树支持,还需要:

CONFIG_OF_UNITTEST=y    
检查内核配置是否合并没有问题的一个方便的地方是文件

kernel source/.kernel meta/cfg/merge_config_build.log

如果您想为linux yocto内核生成补丁,开发工具非常方便。其他内核可能不支持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/

有关详细信息,请参见

我尝试了第二个选项。它失败了。我的本地机器是“sama5d3xek”。我用它来代替meta local。recipetool未能找到层“虚拟/内核”。顺便说一句,找到“虚拟/内核”目标。知道吗?啊!很抱歉,我忘记了-m参数使用机器名,以使更改特定于机器。这有点奇怪,因为我希望它只是默认为当前机器,而不是要求指定它。如果您添加机器名,它将按预期工作。即recipetool appendsrcfile-Wm sama5d3xek meta-local-virtual/kernel/path/to/the/defconfig。我会更新这个答案。谢谢。我的内核配置仍然有问题。bitbake-c menuconfig virtual/kernel->正在生成一个新的“.config”。diffconfig正在创建一个文件。我把它命名为myConfg.cfg。内核的新构建没有考虑它。尽管“defconfig”的大小约为7kB,而“.config”的大小约为79kB。如何进行有效配置?如回答中所述,diffconfig任务生成一个配置片段,而不是def
CONFIG_COMPILE_TEST=y    
CONFIG_OF=y    
CONFIG_OF_ALL_DTBS=y
CONFIG_OF_UNITTEST=y    
## 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/