From: "abdelkhalek-mansouri" <abdelkhalek.manso...@gmail.com>

Description:
This patch adds a new boot script "ab.boot.cmd.in", to support A/B partition 
layout.
The recipe "rpi-u-boot-scr" has been updated by consequence.

Signed-off-by: abdelkhalek-mansouri <abdelkhalek.manso...@gmail.com>
---
 .../rpi-u-boot-scr/files/ab.boot.cmd.in       | 50 +++++++++++++++++++
 recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in  |  1 +
 recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bb  | 22 +++++---
 3 files changed, 67 insertions(+), 6 deletions(-)
 create mode 100644 recipes-bsp/rpi-u-boot-scr/files/ab.boot.cmd.in

diff --git a/recipes-bsp/rpi-u-boot-scr/files/ab.boot.cmd.in 
b/recipes-bsp/rpi-u-boot-scr/files/ab.boot.cmd.in
new file mode 100644
index 0000000..2d33586
--- /dev/null
+++ b/recipes-bsp/rpi-u-boot-scr/files/ab.boot.cmd.in
@@ -0,0 +1,50 @@
+# Set the address of the Flattened Device Tree (FDT) and retreive the boot 
arguments
+fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
+
+echo "Using A/B rootfs layout setup"
+test -n "${BOOT_ORDER}"   || setenv BOOT_ORDER "A B"
+test -n "${BOOT_A_LEFT}"  || setenv BOOT_A_LEFT 3
+test -n "${BOOT_B_LEFT}"  || setenv BOOT_B_LEFT 3
+test -n "${BOOT_PART_NUM}" || setenv BOOT_PART_NUM "0:1"
+
+setenv bootpart
+
+for BOOT_SLOT in "${BOOT_ORDER}"; do
+  if test "x${bootpart}" != "x"; then
+    # skip remaining slots
+  elif test "x${BOOT_SLOT}" = "xA"; then
+    if itest ${BOOT_A_LEFT} -gt 0; then
+      setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
+      echo "Found valid slot A"
+      setenv bootpart "/dev/mmcblk0p2"
+      setenv BOOT_PART_NUM "0:2"
+    fi
+  elif test "x${BOOT_SLOT}" = "xB"; then
+    if itest ${BOOT_B_LEFT} -gt 0; then
+      setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
+      echo "Found valid slot B"
+      setenv bootpart "/dev/mmcblk0p3"
+      setenv BOOT_PART_NUM "0:3"
+    fi
+  fi
+done
+
+if test -n "${bootpart}"; then
+  setenv bootargs "${bootargs} root=${bootpart}"
+  saveenv
+else
+  echo "No valid slot found. Resetting tries to 3"
+  setenv BOOT_A_LEFT 3
+  setenv BOOT_B_LEFT 3
+  saveenv
+  reset
+fi        
+
+# Load the kernel image
+load @@BOOT_MEDIA@@ ${BOOT_PART_NUM} ${kernel_addr_r} boot/@@KERNEL_IMAGETYPE@@
+      
+# Check if the uboot.env file exists on the specified boot media and partition 
   
+if test ! -e @@BOOT_MEDIA@@ 0:1 uboot.env; then saveenv; fi;
+
+# Execute the kernel boot command
+@@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr}
diff --git a/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in 
b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in
index 58fd86a..59eebd0 100644
--- a/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in
+++ b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in
@@ -1,3 +1,4 @@
+echo "Using single rootfs layout setup"
 fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
 fatload @@BOOT_MEDIA@@ 0:1 ${kernel_addr_r} @@KERNEL_IMAGETYPE@@
 if test ! -e @@BOOT_MEDIA@@ 0:1 uboot.env; then saveenv; fi;
diff --git a/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bb 
b/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bb
index 1dff808..0e7b78d 100644
--- a/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bb
+++ b/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bb
@@ -7,16 +7,26 @@ DEPENDS = "u-boot-mkimage-native"
 
 INHIBIT_DEFAULT_DEPS = "1"
 
-SRC_URI = "file://boot.cmd.in"
+SRC_URI = "file://boot.cmd.in \
+           file://ab.boot.cmd.in"
 
 BOOT_MEDIA ?= "mmc"
 
 do_compile() {
-    sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
-        -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' \
-        -e 's/@@BOOT_MEDIA@@/${BOOT_MEDIA}/' \
-        "${WORKDIR}/boot.cmd.in" > "${WORKDIR}/boot.cmd"
-    mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d 
"${WORKDIR}/boot.cmd" boot.scr
+    if [ "${RPI_AB_PARTITION_LAYOUT}" = "0" ]; then
+        sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
+            -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' \
+            -e 's/@@BOOT_MEDIA@@/${BOOT_MEDIA}/' \
+            "${WORKDIR}/boot.cmd.in" > "${WORKDIR}/boot.cmd"
+        mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d 
"${WORKDIR}/boot.cmd" boot.scr
+    else
+        sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
+            -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' \
+            -e 's/@@BOOT_MEDIA@@/${BOOT_MEDIA}/' \
+            -e 's/@@RPI_AB_PARTITION_LAYOUT@@/${RPI_AB_PARTITION_LAYOUT}/' \
+            "${WORKDIR}/ab.boot.cmd.in" > "${WORKDIR}/boot.cmd"
+        mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d 
"${WORKDIR}/boot.cmd" boot.scr
+    fi
 }
 
 inherit kernel-arch deploy nopackages
-- 
2.43.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#64898): https://lists.yoctoproject.org/g/yocto/message/64898
Mute This Topic: https://lists.yoctoproject.org/mt/111444314/21656
Group Owner: yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to