如果你正在使用最新的Yocto项目版本,你可以使用recipetool来做大部分工作。你有两个选项,你可以使用现有的recipetool命令和少量手动工作,或者你可以使用meta-mentor中提供的recipetool插件,该插件提供了一些针对内核的特定命令来为您完成这些工作。
层设置
首先,您需要有一个图层来存储您的更改。如果您已经创建了一个图层,您可以使用它,否则我们可以创建一个并将其添加到我们的配置中:
$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local
选项一:使用来自meta-mentor的recipetool插件
设置
首先,克隆meta-mentor:
$ 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
选项二:手动
在下面的部分,请确保 your-machine-name 替换成 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中创建.bbpappend文件,并将.dts添加到SRC_URI中,将其放置在内核源代码树中的适当路径下。下一步是编辑它创建的附加文件并将.dtbs添加到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不会自动生成。请用menuconfig('.config')的结果替换defconfig。
.cfg
扩展名。我认为这在poky/meta/classes/kernel-yocto.bbclass
文件中有定义。花了一点时间我才意识到不能使用.config
扩展名。 - Cody Piersall