mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-12-19 18:08:29 +00:00
* Use name.sh functions for paths in genimage Paths for images generated outside of genimage were not used in genimage definitions. Use them as the single source of truth. Images generated by genimage itself (e.g. kernel.img) don't need to use those functions, so remove the unused ones. * Use EROFS instead of SquashFS for root FS * Enabled EROFS in common kernel fragment * RootFS image switched to EROFS with options to get decent compression * rootfstype removed from kernel command line * Get size of correct FS image in GH build summary
88 lines
2.5 KiB
Plaintext
88 lines
2.5 KiB
Plaintext
|
|
###########################################
|
|
|
|
part start mmc ${devnum} 9 mmc_env
|
|
mmc dev ${devnum}
|
|
|
|
# Note that import is performed twice for backwards compatability.
|
|
setenv loadbootstate " \
|
|
echo 'loading env...'; \
|
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x20; \
|
|
env import -c ${ramdisk_addr_r} 0x4000;"
|
|
|
|
setenv storebootstate " \
|
|
echo 'storing env...'; \
|
|
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x20;"
|
|
|
|
run loadbootstate
|
|
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
|
|
|
|
# Allows ConditionFirstBoot=
|
|
test -n "${MACHINE_ID}" || setenv BOOT_CONDITION "systemd.condition-first-boot=true"
|
|
|
|
# HassOS bootargs
|
|
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 systemd.machine_id=${MACHINE_ID} fsck.repair=yes ${BOOT_CONDITION}"
|
|
|
|
# HassOS system A/B
|
|
setenv bootargs_a "root=PARTUUID=48617373-06 ro rootwait"
|
|
setenv bootargs_b "root=PARTUUID=48617373-08 ro rootwait"
|
|
|
|
# Load extraargs
|
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
|
fatload mmc ${devnum}:1 ${fdt_addr_r} exynos5422-odroidxu4.dtb
|
|
fdt addr ${fdt_addr_r}
|
|
|
|
|
|
# logical volumes get numbered after physical ones.
|
|
# 1. boot
|
|
# 2. Extended partition
|
|
# 3. Overlay
|
|
# 4. Data
|
|
# 5. KernelA
|
|
# 6. SystemA
|
|
# 7. KernelB
|
|
# 8. SystemB
|
|
# 9. BootInfo
|
|
setenv bootargs
|
|
for BOOT_SLOT in "${BOOT_ORDER}"; do
|
|
if test "x${bootargs}" != "x"; then
|
|
# skip remaining slots
|
|
elif test "x${BOOT_SLOT}" = "xA"; then
|
|
if test ${BOOT_A_LEFT} -gt 0; then
|
|
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
|
|
echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..."
|
|
if load mmc ${devnum}:5 ${kernel_addr_r} zImage; then
|
|
setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}"
|
|
fi
|
|
fi
|
|
elif test "x${BOOT_SLOT}" = "xB"; then
|
|
if test ${BOOT_B_LEFT} -gt 0; then
|
|
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
|
|
echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..."
|
|
if load mmc ${devnum}:7 ${kernel_addr_r} zImage; then
|
|
setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if test -n "${bootargs}"; then
|
|
run storebootstate
|
|
else
|
|
echo "No valid slot found, resetting tries to 3"
|
|
setenv BOOT_A_LEFT 3
|
|
setenv BOOT_B_LEFT 3
|
|
run storebootstate
|
|
reset
|
|
fi
|
|
|
|
printenv bootargs
|
|
echo "Starting kernel"
|
|
bootz ${kernel_addr_r} - ${fdt_addr_r}
|
|
|
|
echo "Boot failed, resetting..."
|
|
reset
|