This patch adds support to use the u-boot builtin device tree instead of
the one from the rootfs / linux. This enables the use of dt overlays
even if the corresponding device tree in the kernel is not compiled with
symbol support (u-boot builtin DTBs always have symbol information).
To use the builtin dt, add the WKS sourceparam "builtin_dt=yes" to the
rootfs-u-boot sourcer.
Co-developed-by: Florian Bezdeka <
florian...@siemens.com>
.../u-boot-script/files/u-boot-script | 3 +++
.../u-boot-script/files/update-u-boot-script | 16 ++++++++++++----
.../lib/wic/plugins/source/rootfs-u-boot.py | 3 +++
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/meta/recipes-bsp/u-boot-script/files/u-boot-script b/meta/recipes-bsp/u-boot-script/files/u-boot-script
index d053d721..a11212c0 100644
--- a/meta/recipes-bsp/u-boot-script/files/u-boot-script
+++ b/meta/recipes-bsp/u-boot-script/files/u-boot-script
@@ -15,3 +15,6 @@ NO_INITRD=""
# U-boot commands to prepend to boot script
SCRIPT_PREPEND=""
+
+# use u-boot builtin device tree
+BUILTIN_DT="no"
diff --git a/meta/recipes-bsp/u-boot-script/files/update-u-boot-script b/meta/recipes-bsp/u-boot-script/files/update-u-boot-script
index 1d9c6d45..2eb6097c 100755
--- a/meta/recipes-bsp/u-boot-script/files/update-u-boot-script
+++ b/meta/recipes-bsp/u-boot-script/files/update-u-boot-script
@@ -33,10 +33,18 @@ echo "${SCRIPT_PREPEND}" >> ${BOOT_CMD}
echo "setenv bootargs ${KERNEL_ARGS}" >> ${BOOT_CMD}
-echo "echo Loading /usr/lib/linux-image-${KERNEL_VERSION}/\${fdtfile}..." \
- >> ${BOOT_CMD}
-echo "load \${devtype} \${devnum}:${ROOT_PARTITION} \${fdt_addr_r}" \
- "/usr/lib/linux-image-${KERNEL_VERSION}/\${fdtfile}" >> ${BOOT_CMD}
+if [ "${BUILTIN_DT}" = "yes" ]; then
+ echo "echo Loading builtin device tree..." \
+ >> ${BOOT_CMD}
+ echo "fdt addr \${fdtcontroladdr}" >> ${BOOT_CMD}
+ echo "fdt move \${fdtcontroladdr} \${fdt_addr_r}" >> ${BOOT_CMD}
+else
+ echo "echo Loading /usr/lib/linux-image-${KERNEL_VERSION}/\${fdtfile}..." \
+ >> ${BOOT_CMD}
+ echo "load \${devtype} \${devnum}:${ROOT_PARTITION} \${fdt_addr_r}" \
+ "/usr/lib/linux-image-${KERNEL_VERSION}/\${fdtfile}" >> ${BOOT_CMD}
+fi
+
echo "echo Loading /boot/${KERNEL_FILE}-${KERNEL_VERSION}..." >> ${BOOT_CMD}
echo "load \${devtype} \${devnum}:\${distro_bootpart} \${kernel_addr_r}" \
"/boot/${KERNEL_FILE}-${KERNEL_VERSION}" >> ${BOOT_CMD}
diff --git a/meta/scripts/lib/wic/plugins/source/rootfs-u-boot.py b/meta/scripts/lib/wic/plugins/source/rootfs-u-boot.py
index 0b4f9eec..93600dc2 100644
--- a/meta/scripts/lib/wic/plugins/source/rootfs-u-boot.py
+++ b/meta/scripts/lib/wic/plugins/source/rootfs-u-boot.py
@@ -10,6 +10,7 @@
# Recognized sourceparams:
# - no_initrd=yes (disables initrd loading)
# - overlays=file.dtbo ... (overlay files)
+# - builtin_dt=no (use DT from uboot instead of kernel)
# - script_prepend=cmd;... (prepends U-Boot command)
import glob
@@ -82,6 +83,8 @@ class RootfsUBootPlugin(RootfsPlugin):
cfg.write('NO_INITRD="%s"\n' % no_initrd)
overlays = source_params.get('overlays') or ''
cfg.write('OVERLAYS="%s"\n' % overlays)
+ builtin_dt = source_params.get('builtin_dt') or ''
+ cfg.write('BUILTIN_DT="%s"\n' % builtin_dt)
script_prepend = source_params.get('script_prepend') or ''
# remove escapes from $\{var\} that are needed to avoid expansion by wic
script_prepend = re.sub(r'\$\\{([^\\]+)\\}', r'${\1}', script_prepend)
--
2.34.1