summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot.bb35
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in28
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot/sota/boot.cmd.in41
3 files changed, 104 insertions, 0 deletions
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot.bb b/recipes-bsp/u-boot/u-boot-distro-boot.bb
new file mode 100644
index 0000000..474ec66
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-distro-boot.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Boot script for launching images with U-Boot distro boot"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS = "u-boot-mkimage-native"
+
+SRC_URI = " \
+ file://boot.cmd.in \
+"
+
+KERNEL_BOOTCMD ??= "bootz"
+KERNEL_BOOTCMD_aarch64 ?= "booti"
+
+S = "${WORKDIR}"
+
+inherit deploy
+
+do_compile() {
+ sed -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' \
+ "${WORKDIR}/boot.cmd.in" > boot.cmd
+ mkimage -T script -C none -n "Distro boot script" -d "${WORKDIR}/boot.cmd" boot.scr
+}
+
+do_deploy() {
+ install -d ${DEPLOYDIR}
+ install -m 0644 boot.scr ${DEPLOYDIR}
+}
+
+addtask deploy after do_install before do_build
+
+do_install[noexec] = "1"
+do_populate_sysroot[noexec] = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in b/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
new file mode 100644
index 0000000..606ffc2
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
@@ -0,0 +1,28 @@
+if test ${devtype} = "ubi"
+then
+ echo "This script is not meant to distro boot from raw NAND flash.
+ exit
+fi
+
+if test ${distro_bootpart} != 1
+then
+ echo "Boot partition needs to be the first partition"
+ exit
+fi
+
+if test -n ${setup}
+then
+ run setup
+else
+ env set setupargs 'console=tty1 consoleblank=0'
+fi
+test -n ${m4boot} || env set m4boot ';'
+test -n ${fdtfile} || env set fdtfile $fdt_file
+test -n ${kernel_image} || env set kernel_image ${boot_file}
+
+env set bootcmd_args 'env set bootargs ${bootargs} ${defargs} ${emmcargs} ${setupargs} ${vidargs} ${tdxargs}'
+env set bootcmd_kernel 'load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ${kernel_image}'
+env set bootcmd_dtb 'load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${fdtfile}'
+env set bootcmd_run '@@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr_r}'
+env set bootcmd 'run m4boot; run bootcmd_dtb && run bootcmd_args && run bootcmd_kernel && run bootcmd_run'
+run bootcmd
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot/sota/boot.cmd.in b/recipes-bsp/u-boot/u-boot-distro-boot/sota/boot.cmd.in
new file mode 100644
index 0000000..ca06f1d
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-distro-boot/sota/boot.cmd.in
@@ -0,0 +1,41 @@
+if test ${distro_bootpart} != 1 && test ${devtype} != "ubi"
+then
+ echo "Boot partition needs to be the first partition"
+ exit
+fi
+
+env set overlays_file "overlays.txt"
+env set load_overlay 'load ${devtype} ${devnum}:1 ${loadaddr} ${overlays_file}; env import -t ${loadaddr} ${filesize}'
+env set apply_overlays 'fdt addr ${fdt_addr_r} && fdt resize 0x20000 && for overlay_file in ${fdt_overlays}; do echo "Applying Overlay: ${overlay_file}"
+&& load ${devtype} ${devnum}:1 ${loadaddr} ${overlay_file} && fdt apply ${loadaddr}; done;'
+
+
+env set bootcmd_load_k 'load ${devtype} ${devnum}:2 ${kernel_addr_r} "/boot"${kernel_image}'
+env set bootcmd_load_r 'load ${devtype} ${devnum}:2 ${ramdisk_addr_r} "/boot"${ramdisk_image}; env set ramdisk_size ${filesize}'
+
+if test ${devtype} != ubi
+then
+# Load commands for regular block devices
+env set bootcmd_otenv 'ext4load ${devtype} ${devnum}:2 ${loadaddr} /boot/loader/uEnv.txt; env import -t ${loadaddr} ${filesize}'
+env set bootcmd_args 'env set bootargs root=LABEL=otaroot rootfstype=ext4 ${bootargs} ${tdxargs}'
+else
+# Load commands for raw NAND devices
+env set bootcmd_otenv 'ubifsmount ubi${devnum}:rootfs && load ${devtype} ${devnum}:2 ${loadaddr} /boot/loader/uEnv.txt; env import -t ${loadaddr} ${filesize}'
+env set bootcmd_args 'env set bootargs ubi.mtd=UBI root=/dev/ubi0_1 rootfstype=ubifs ubi.fm_autoconvert=1 ${bootargs} ${tdxargs}'
+fi
+
+run bootcmd_otenv
+
+if test -n ${rollback} && test ${rollback} = 1
+then
+ echo "Roolback enabled. Booting old version."
+ env set kernel_image ${kernel_image2}
+ env set ramdisk_image ${ramdisk_image2}
+ env set bootargs ${bootargs2}
+ env set fdt_path ${fdt_path2}
+fi
+
+env set bootcmd_dtb 'load ${devtype} ${devnum}:2 ${fdt_addr_r} "/boot"${fdt_path}devicetree-${fdtfile}; if test -e ${devtype} ${devnum}:1 ${overlays_file}; then run load_overlay && run apply_overlays || true;fi || true'
+env set bootcmd_run '@@KERNEL_BOOTCMD@@ ${kernel_addr_r} ${ramdisk_addr_r}:${ramdisk_size} ${fdt_addr_r}'
+env set bootcmd 'run bootcmd_dtb && run bootcmd_args && run bootcmd_load_k && run bootcmd_load_r && run bootcmd_run'
+run bootcmd