From 48c3c8ccdf03301f3d96f1277e64e495942e4a7a Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Fri, 9 Jul 2021 14:42:23 +0200 Subject: [PATCH] Supoport compressed squashfs for kernel (#1418) (#1451) * Add squashfs with LZ4 and LZO compression to Barebox * Add squashfs with LZO compression to U-Boot * Use "raw" as type for kernel partition which is compatible with ext4 image as well as squashfs. Note: This does not use squashfs for the kernel but merly adds support for it. This will allow to downgrade/fallback to the non-squashfs version. Using squashfs for the kernel partition is implemented in dev (for release 7). --- buildroot-external/board/asus/tinker/uboot-boot.ush | 4 ++-- buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush | 4 ++-- buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush | 4 ++-- buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush | 4 ++-- buildroot-external/board/hardkernel/odroid-xu4/uboot-boot.ush | 4 ++-- buildroot-external/board/raspberrypi/uboot-boot.ush | 4 ++-- buildroot-external/board/raspberrypi/uboot-boot64.ush | 4 ++-- buildroot-external/bootloader/barebox.config | 4 ++++ buildroot-external/bootloader/barebox/boot/system0 | 2 +- buildroot-external/bootloader/barebox/boot/system1 | 2 +- buildroot-external/bootloader/uboot.config | 3 +++ buildroot-external/scripts/rauc.sh | 2 +- 12 files changed, 24 insertions(+), 17 deletions(-) diff --git a/buildroot-external/board/asus/tinker/uboot-boot.ush b/buildroot-external/board/asus/tinker/uboot-boot.ush index d3f86d055..5fe9872a8 100644 --- a/buildroot-external/board/asus/tinker/uboot-boot.ush +++ b/buildroot-external/board/asus/tinker/uboot-boot.ush @@ -64,7 +64,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:2 ${kernel_addr_r} zImage; then + if load mmc ${devnum}:2 ${kernel_addr_r} zImage; then setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}" fi fi @@ -72,7 +72,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:4 ${kernel_addr_r} zImage; then + if load mmc ${devnum}:4 ${kernel_addr_r} zImage; then setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}" fi fi diff --git a/buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush b/buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush index f9872d9df..f286b1a0f 100644 --- a/buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush +++ b/buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush @@ -71,7 +71,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:5 ${kernel_addr_r} Image; then + if load mmc ${devnum}:5 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}" fi fi @@ -79,7 +79,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:7 ${kernel_addr_r} Image; then + if load mmc ${devnum}:7 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}" fi fi diff --git a/buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush b/buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush index 228ba3fa7..9299a5838 100644 --- a/buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush +++ b/buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush @@ -71,7 +71,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:5 ${kernel_addr_r} Image; then + if load mmc ${devnum}:5 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}" fi fi @@ -79,7 +79,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:7 ${kernel_addr_r} Image; then + if load mmc ${devnum}:7 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}" fi fi diff --git a/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush b/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush index c00980ea6..2caef6ae8 100644 --- a/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush +++ b/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush @@ -76,7 +76,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:5 ${kernel_addr_r} Image; then + if load mmc ${devnum}:5 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}" fi fi @@ -84,7 +84,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:7 ${kernel_addr_r} Image; then + if load mmc ${devnum}:7 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}" fi fi diff --git a/buildroot-external/board/hardkernel/odroid-xu4/uboot-boot.ush b/buildroot-external/board/hardkernel/odroid-xu4/uboot-boot.ush index f50a2d761..53096cab0 100644 --- a/buildroot-external/board/hardkernel/odroid-xu4/uboot-boot.ush +++ b/buildroot-external/board/hardkernel/odroid-xu4/uboot-boot.ush @@ -51,7 +51,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:5 ${kernel_addr_r} zImage; then + if load mmc ${devnum}:5 ${kernel_addr_r} zImage; then setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}" fi fi @@ -59,7 +59,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load mmc ${devnum}:7 ${kernel_addr_r} zImage; then + if load mmc ${devnum}:7 ${kernel_addr_r} zImage; then setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}" fi fi diff --git a/buildroot-external/board/raspberrypi/uboot-boot.ush b/buildroot-external/board/raspberrypi/uboot-boot.ush index fd636e6ad..0f49f2194 100644 --- a/buildroot-external/board/raspberrypi/uboot-boot.ush +++ b/buildroot-external/board/raspberrypi/uboot-boot.ush @@ -38,7 +38,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load ${devtype} ${devnum}:2 ${kernel_addr_r} zImage; then + if load ${devtype} ${devnum}:2 ${kernel_addr_r} zImage; then setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_a} rauc.slot=A" fi fi @@ -46,7 +46,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load ${devtype} ${devnum}:4 ${kernel_addr_r} zImage; then + if load ${devtype} ${devnum}:4 ${kernel_addr_r} zImage; then setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_b} rauc.slot=B" fi fi diff --git a/buildroot-external/board/raspberrypi/uboot-boot64.ush b/buildroot-external/board/raspberrypi/uboot-boot64.ush index 4feec7e51..40a4cc1c8 100644 --- a/buildroot-external/board/raspberrypi/uboot-boot64.ush +++ b/buildroot-external/board/raspberrypi/uboot-boot64.ush @@ -38,7 +38,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load ${devtype} ${devnum}:2 ${kernel_addr_r} Image; then + if load ${devtype} ${devnum}:2 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_a} rauc.slot=A" fi fi @@ -46,7 +46,7 @@ for BOOT_SLOT in "${BOOT_ORDER}"; do 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 ext4load ${devtype} ${devnum}:4 ${kernel_addr_r} Image; then + if load ${devtype} ${devnum}:4 ${kernel_addr_r} Image; then setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_b} rauc.slot=B" fi fi diff --git a/buildroot-external/bootloader/barebox.config b/buildroot-external/bootloader/barebox.config index 96bc5a9c5..86467bdb7 100644 --- a/buildroot-external/bootloader/barebox.config +++ b/buildroot-external/bootloader/barebox.config @@ -47,4 +47,8 @@ CONFIG_FS_EXT4=y CONFIG_FS_FAT=y CONFIG_FS_FAT_WRITE=y CONFIG_FS_FAT_LFN=y +CONFIG_FS_SQUASHFS=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y CONFIG_LZ4_DECOMPRESS=y +CONFIG_LZO_DECOMPRESS=y diff --git a/buildroot-external/bootloader/barebox/boot/system0 b/buildroot-external/bootloader/barebox/boot/system0 index d1e57a8cb..47caacd68 100644 --- a/buildroot-external/bootloader/barebox/boot/system0 +++ b/buildroot-external/bootloader/barebox/boot/system0 @@ -3,6 +3,6 @@ global linux.bootargs.dyn.root="root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro" mkdir -p /mnt/system -mount -t ext4 /dev/disk*.hassos-kernel0 /mnt/system +mount /dev/disk*.hassos-kernel0 /mnt/system global bootm.image="/mnt/system/bzImage" diff --git a/buildroot-external/bootloader/barebox/boot/system1 b/buildroot-external/bootloader/barebox/boot/system1 index 73a8a73c6..ef2c8d0ba 100644 --- a/buildroot-external/bootloader/barebox/boot/system1 +++ b/buildroot-external/bootloader/barebox/boot/system1 @@ -3,6 +3,6 @@ global linux.bootargs.dyn.root="root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 rootfstype=squashfs ro" mkdir -p /mnt/system -mount -t ext4 /dev/disk*.hassos-kernel1 /mnt/system +mount /dev/disk*.hassos-kernel1 /mnt/system global bootm.image="/mnt/system/bzImage" diff --git a/buildroot-external/bootloader/uboot.config b/buildroot-external/bootloader/uboot.config index d3bf43e19..3fc6ab3ef 100644 --- a/buildroot-external/bootloader/uboot.config +++ b/buildroot-external/bootloader/uboot.config @@ -9,9 +9,12 @@ CONFIG_SYS_PROMPT="HAOS> " CONFIG_EFI_PARTITION=y CONFIG_FS_EXT4=y CONFIG_FS_FAT=y +CONFIG_FS_SQUASHFS=y # CONFIG_ENV_IS_IN_FAT is not set # CONFIG_ENV_IS_IN_EXT4 is not set CONFIG_ENV_IS_NOWHERE=Y # CONFIG_EFI_LOADER is not set CONFIG_CMD_SETEXPR=y CONFIG_CMD_FILEENV=y +CONFIG_CMD_SQUASHFS=y +CONFIG_LZO=y diff --git a/buildroot-external/scripts/rauc.sh b/buildroot-external/scripts/rauc.sh index 4e092bded..3be7c110d 100755 --- a/buildroot-external/scripts/rauc.sh +++ b/buildroot-external/scripts/rauc.sh @@ -43,7 +43,7 @@ function _write_rauc_system() { ( echo "[slot.kernel.${slot_num}]" echo "device=/dev/disk/by-partlabel/hassos-kernel${slot_num}" - echo "type=ext4" + echo "type=raw" echo "bootname=${slot_name}" echo "[slot.rootfs.${slot_num}]"