如果您正在使用最近的 Yocto 项目版本,则可以使用 Recipetool 来完成大部分相关工作。您有两种选择,您可以使用现有的recipetool命令和少量的手动工作,或者您可以使用meta-mentor中的recipetool插件,它提供了一些特定于内核的命令来为您完成此操作。
图层设置
首先,您需要一个层来存储您的更改。如果您已经创建了一个图层,则可以使用它,否则我们可以创建一个图层并将其添加到我们的配置中:
$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local
选项一:使用来自meta-mentor的recipetool插件
Setup
首先,克隆元导师:
$ 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
Or:
$ 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') 的结果。