Currently I try to implement A/B partitioning so I can perform system updates with Mender and rollback if necessary. One problem is, that the device numbers can change randomly and I need to consider this.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 7.3G 0 disk # This can became mmcblk1
|-mmcblk0p1 179:1 0 250M 0 part / # rootfsA, rootfsB not implemented yet
`-mmcblk0p2 179:2 0 50M 0 part /mnt # Data partition, persistent
mmcblk0boot0 179:32 0 4M 1 disk
mmcblk0boot1 179:64 0 4M 1 disk
At the moment I handle this way.
set_bootargs=env set bootargs root=PARTUUID=00000000-0${bootpart} rootfstype=ext4 rootwait ${console} rw panic=5
After I performed the update (custom script overwrites rootfsB), I need to perform fw_setenv upgrade_available 1
. Afterwards if boot to rootfsB was successful I will set fw_setenv upgrade_available 0
and fw_setenv bootcount 0
.
My fw_config.cfg
looks like this
# U-Boot environment is stored on the data partition
/mnt/uboot.env 0x0000 0x1000
What do I need to do in order to load /mnt/uboot.env
into U-Boot and, write to it from OS and keep this changes so if bootcount
== bootlimit
my altbootcmd
will control which partition to boot?
Component | Specification |
---|---|
SBC | Radxa Zero v1.51, 2GB RAM, 8GB eMMC, 4 Cores |
SOC | S905Y2 |
Processor | ARM Cortex-A53 |
Architecture | ARMv8-A |
WiFi/BT | AP6256, BCM43456/BCM4345C5, b/g/n/a/ac - BT5.0 |
OS | Buildroot 2022.11, System V |
Kernel | Latest CIP SLTS version (5.10.145-cip17) |
Bootloader | Custom U-Boot 2021.01 with vendor FIP |
Pinout | Link |
Quick Reference Manual | Link |