Am 7. Juli 2023 17:11:43 MESZ schrieb Tomasz Maciej Nowak <[email protected]>:
>From: Tomasz Maciej Nowak <[email protected]>
>
>Alter command boot sequence in U-Boot on first boot after upgrade to
>workaround the kernel size limitation. The kernel size read from flash
>will be 8MiB, which should suffice for forseable future. As precaution a
>warning interupting upgrade is emited, explaining what to do.
>
>Signed-off-by: Tomasz Maciej Nowak <[email protected]>
>---
> .../etc/uci-defaults/05_fix-compat-version         |  3 ++-
> .../base-files/lib/preinit/81_patch_uboot_env.sh   | 14 ++++++++++++++
> target/linux/ipq40xx/image/generic.mk              | 10 +++++++++-
> 3 files changed, 25 insertions(+), 2 deletions(-)
> create mode 100644 
> target/linux/ipq40xx/base-files/lib/preinit/81_patch_uboot_env.sh
>
>diff --git 
>a/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version 
>b/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
>index c01192089712..a3f90125c6e5 100644
>--- a/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
>+++ b/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
>@@ -4,7 +4,8 @@ case "$(board_name)" in
> linksys,ea6350v3|\
> linksys,ea8300|\
> linksys,mr8300|\
>-ezviz,cs-w3-wd1200g-eup)
>+ezviz,cs-w3-wd1200g-eup|\
>+pakedge,wr-1)
>       uci set system.@system[0].compat_version="2.0"
>       uci commit system
>       ;;
>diff --git a/target/linux/ipq40xx/base-files/lib/preinit/81_patch_uboot_env.sh 
>b/target/linux/ipq40xx/base-files/lib/preinit/81_patch_uboot_env.sh
>new file mode 100644
>index 000000000000..0cc0ab0fca6f
>--- /dev/null
>+++ b/target/linux/ipq40xx/base-files/lib/preinit/81_patch_uboot_env.sh
>@@ -0,0 +1,14 @@
>+. /lib/functions.sh
>+
>+preinit_patch_uboot_env() {
>+      case $(board_name) in
>+      pakedge,wr-1)
>+              if ! fw_printenv -n OpenWrt &>/dev/null; then
>+                      fw_setenv OpenWrt 'sf probe; sf read 0x84000000 
>0x180000 0x800000; bootm 0x84000000'
>+                      fw_setenv bootcmd "$(fw_printenv -n bootcmd | sed -e 
>'s,bootipq,run OpenWrt,')"
>+              fi
>+              ;;
>+      esac
>+}
>+
>+boot_hook_add preinit_main preinit_patch_uboot_env
>diff --git a/target/linux/ipq40xx/image/generic.mk 
>b/target/linux/ipq40xx/image/generic.mk
>index d9d60a25ff0f..0dadae122a87 100644
>--- a/target/linux/ipq40xx/image/generic.mk
>+++ b/target/linux/ipq40xx/image/generic.mk
>@@ -958,8 +958,16 @@ define Device/pakedge_wr-1
>       SOC := qcom-ipq4018
>       BLOCKSIZE := 64k
>       IMAGE_SIZE := 31232k
>-      KERNEL_SIZE := 4096k
>+      KERNEL_SIZE := 8192k
>       IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | 
> append-rootfs | pad-rootfs | append-metadata
>+      DEVICE_COMPAT_VERSION := 2.0
>+      DEVICE_COMPAT_MESSAGE := \n$\
>+              Booting command in U-Boot needs to be changed because of kernel 
>\n$\
>+              growing beyond 4MiB. If OpenWrt 23.05.0 or later is running on 
>\n$\
>+              on the device, it has already been done and You can safely 
>force \n$\
>+              upgrade. If that's not the case, first upgrade to 23.05.0 and 
>it \n$\
>+              will automatically amend booting command in U-Boot on first 
>boot. \n$\
>+              Then proceed with the upgrade to desired version.
> endef
> TARGET_DEVICES += pakedge_wr-1
> 

This is one way of fixing this. But we could also switch all of these from 
FitImage to FitzImage. (self-decompressing xz) 
That should suffice for quite a while (kernel was 1/4 smaller for my device 
afterwards). 3MiB in use leaves us quite some headroom.
Headroom to implement lzma-loader at some point.

What for? To prevent compat increases. Asking people to modify their bootloader 
environment can work but it's a hassle. Also you have to modify lots of wiki 
entries so the installation instructions all mention this.


Regards
Felix Baumann / Djfe

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to