- Embedded Linux Development Using Yocto Project Cookbook(Second Edition)
- Alex González
- 294字
- 2021-06-30 19:21:29
Adding a custom device tree to the Linux kernel
To add this device tree file to the Linux kernel, we need to add the device tree file to the arch/arm/boot/dts directory under the Linux kernel source, and a new default configuration under /arch/arm/configs/, initially both just copied from the reference board, and also modify the Linux build system's arch/arm/boot/dts/Makefile file to build it as follows:
dtb-$(CONFIG_SOC_IMX6Q) += \ + imx6qp-wandboard-custom-revd1.dtb \
This code uses diff formatting, where the lines with a minus prefix are removed, the ones with a plus sign are added, and the ones without a prefix are left as reference.
Once the patch is prepared, it can be added to the meta-bsp-custom/recipes-kernel/linux/linux-wandboard-4.1-2.0.x/ directory, as specified in the FILESEXTRAPATHS variable, and the Linux kernel recipe appended adding a meta-bsp-custom/recipes-kernel/linux/linux-wandboard_4.1-2.0.x.bbappend file with the following content:
FILESEXTRAPATHS_prepend := "${THISDIR}/${BP}:" SRC_URI_append = " file://0001-01_02-Add-a-custom-device-tree-and-configuration.patch" COMPATIBLE_MACHINE = "(wandboard|wandboard-custom)"
The FILESEXTRAPATHS variable is used to extend BitBake's search path to include the directory with our patch, and using the := BitBake operator expands the variable's contents on definition instead of waiting until it is actually used.
It then adds the patch to the SRC_URI variable so that it is applied when building. Files added to the SRC_URI variable that end in the patch or diff prefixes will be applied in the order they are found. You can also force a file to be treated as patch by specifying an apply=yes property to it in SRC_URI.
Finally, it extends the COMPATIBLE_MACHINE variable to include both the wandboard and wandboard-custom machine, which means the recipe is not skipped when building for both machines.
A complete example patch that adds a custom device tree to the Linux kernel can be found in the source code that accompanies the book.