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
100 lines
3.1 KiB
Plaintext
100 lines
3.1 KiB
Plaintext
|
|
part start mmc ${devnum} 6 mmc_env
|
|
mmc dev ${devnum}
|
|
setenv loadbootstate " \
|
|
echo 'loading env...'; \
|
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x40; \
|
|
env import -c ${ramdisk_addr_r} 0x8000;"
|
|
|
|
setenv storebootstate " \
|
|
echo 'storing env...'; \
|
|
env export -c -s 0x8000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x40;"
|
|
|
|
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=8d3d53e3-6d49-4c38-8349-aff6859e82fd ro rootwait"
|
|
setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 ro rootwait"
|
|
|
|
# Load environment from haos-config.txt
|
|
if test -e mmc ${devnum}:1 haos-config.txt; then
|
|
fatload mmc ${devnum}:1 ${ramdisk_addr_r} haos-config.txt
|
|
env import -t ${ramdisk_addr_r} ${filesize}
|
|
fi
|
|
|
|
# Load extraargs
|
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
|
|
|
# Load device tree
|
|
if test "$devnum" = "0"; then
|
|
setenv fdtfile "rk3288-tinker-s.dtb"
|
|
else
|
|
setenv fdtfile "rk3288-tinker.dtb"
|
|
fi
|
|
|
|
echo "Loading standard device tree ${fdtfile}"
|
|
fatload mmc ${devnum}:1 ${fdt_addr_r} ${fdtfile}
|
|
fdt addr ${fdt_addr_r}
|
|
|
|
# load dt overlays
|
|
fdt resize 65536
|
|
for overlay_file in ${overlays}; do
|
|
if fatload mmc ${devnum}:1 ${ramdisk_addr_r} overlays/${overlay_file}.dtbo; then
|
|
echo "Applying kernel provided DT overlay ${overlay_file}.dtbo"
|
|
fdt apply ${ramdisk_addr_r} || setenv overlay_error "true"
|
|
fi
|
|
done
|
|
if test "${overlay_error}" = "true"; then
|
|
echo "Error applying DT overlays, restoring original DT"
|
|
fatload mmc ${devnum}:1 ${fdt_addr_r} ${fdtfile}
|
|
fi
|
|
|
|
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}:2 ${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}:4 ${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
|
|
|
|
echo "Starting kernel"
|
|
bootz ${kernel_addr_r} - ${fdt_addr_r}
|
|
|
|
echo "Boot failed, resetting..."
|
|
reset
|