mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-12-20 02:18:37 +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
75 lines
2.3 KiB
Plaintext
75 lines
2.3 KiB
Plaintext
|
|
part start ${devtype} ${devnum} 6 dev_env
|
|
${devtype} dev ${devnum}
|
|
|
|
setenv loadbootstate " \
|
|
echo 'loading env...'; \
|
|
${devtype} read ${ramdisk_addr_r} ${dev_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; \
|
|
${devtype} write ${ramdisk_addr_r} ${dev_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 rootwait systemd.machine_id=${MACHINE_ID} cgroup_enable=memory fsck.repair=yes ${BOOT_CONDITION}"
|
|
|
|
# HassOS system A/B
|
|
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd ro"
|
|
setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 ro"
|
|
|
|
# Preserve origin bootargs
|
|
setenv bootargs_rpi
|
|
setenv fdt_org ${fdt_addr}
|
|
fdt addr ${fdt_org}
|
|
fdt get value bootargs_rpi /chosen bootargs
|
|
|
|
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 ${devtype} ${devnum}:2 ${kernel_addr_r} Image; then
|
|
setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_a} rauc.slot=A"
|
|
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 ${devtype} ${devnum}:4 ${kernel_addr_r} Image; then
|
|
setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_b} rauc.slot=B"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
setenv fdt_addr
|
|
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
|
|
|
|
echo "Starting kernel"
|
|
booti ${kernel_addr_r} - ${fdt_org}
|
|
|
|
echo "Boot failed, resetting..."
|
|
reset
|