[openwrt/openwrt] ath79: remove 'fakeroot' for Senao devices
LEDE Commits
lede-commits at lists.infradead.org
Fri Jun 11 00:01:36 PDT 2021
ynezz pushed a commit to openwrt/openwrt.git, branch openwrt-21.02:
https://git.openwrt.org/64d845ef027b31f3dc8f1a6a692c960a3a8844f3
commit 64d845ef027b31f3dc8f1a6a692c960a3a8844f3
Author: Michael Pratt <mcpratt at pm.me>
AuthorDate: Wed Feb 24 22:55:09 2021 -0500
ath79: remove 'fakeroot' for Senao devices
By using the same custom kernel header magic
in both OKLI lzma-loader, DTS, and makefile
this hack is not necessary anymore
However, "rootfs" size and checksum
must now be supplied by the factory.bin image
through a script that is accepted by the OEM upgrade script.
This is because Senao OEM scripts assume a squashfs header exists
at the offset for the original "rootfs" partition
which is actually the kernel + rootfs in this implementation,
and takes size value from the header that would be there with hexdump,
but this offset is now the uImage header instead.
This frees up 1 eraseblock
previously used by the "fakeroot" partition
for bypassing the OEM image verification.
Also, these Senao devices with a 'failsafe' partition
and the tar-gz factory.bin platform would otherwise require
flashing the new tar-gz sysupgrade.bin afterward.
So this also prevents having to flash both images
when starting from OEM or 'failsafe'
the OEM upgrade script verifies the header magic numbers,
but only the first two bytes.
Example:
[ "${magic_word_kernel}" = "2705" ] &&
[ "${magic_word_rootfs}" = "7371" -o "${magic_word_rootfs}" = "6873" ] &&
errcode="0"
therefore picked the magic number
0x73714f4b
which is
'sqOK'
Signed-off-by: Michael Pratt <mcpratt at pm.me>
(cherry picked from commit 4a0cc5d4ef29a11914850c72158aca1e2a170fb0)
---
target/linux/ath79/dts/ar724x_senao_loader.dtsi | 12 +++---------
target/linux/ath79/dts/ar934x_senao_loader.dtsi | 12 +++---------
target/linux/ath79/dts/qca955x_senao_loader.dtsi | 12 +++---------
target/linux/ath79/image/common-senao.mk | 15 +++++++++++----
target/linux/ath79/image/generic.mk | 24 ++++++++++++------------
target/linux/ath79/image/tiny.mk | 12 ++++++------
6 files changed, 38 insertions(+), 49 deletions(-)
diff --git a/target/linux/ath79/dts/ar724x_senao_loader.dtsi b/target/linux/ath79/dts/ar724x_senao_loader.dtsi
index fdc2726e6f..54dbec18b3 100644
--- a/target/linux/ath79/dts/ar724x_senao_loader.dtsi
+++ b/target/linux/ath79/dts/ar724x_senao_loader.dtsi
@@ -15,7 +15,7 @@
partition at 0 {
compatible = "openwrt,uimage", "denx,uimage";
- openwrt,ih-magic = <IH_MAGIC_OKLI>;
+ openwrt,ih-magic = <0x73714f4b>;
label = "firmware";
reg = <0x0 0x0>;
};
@@ -64,15 +64,9 @@
reg = <0xb0000 0xf0000>;
};
- partition at 1a0000 {
- label = "fakeroot";
- reg = <0x1a0000 0x10000>;
- read-only;
- };
-
- fwconcat0: partition at 1b0000 {
+ fwconcat0: partition at 1a0000 {
label = "fwconcat0";
- reg = <0x1b0000 0x4c0000>;
+ reg = <0x1a0000 0x4d0000>;
};
partition at 670000 {
diff --git a/target/linux/ath79/dts/ar934x_senao_loader.dtsi b/target/linux/ath79/dts/ar934x_senao_loader.dtsi
index aa8a36d242..35e5f13535 100644
--- a/target/linux/ath79/dts/ar934x_senao_loader.dtsi
+++ b/target/linux/ath79/dts/ar934x_senao_loader.dtsi
@@ -15,7 +15,7 @@
partition at 0 {
compatible = "openwrt,uimage", "denx,uimage";
- openwrt,ih-magic = <IH_MAGIC_OKLI>;
+ openwrt,ih-magic = <0x73714f4b>;
label = "firmware";
reg = <0x0 0x0>;
};
@@ -68,15 +68,9 @@
reg = <0x0b0000 0x170000>;
};
- partition at 220000 {
- label = "fakeroot";
- reg = <0x220000 0x010000>;
- read-only;
- };
-
- fwconcat0: partition at 230000 {
+ fwconcat0: partition at 220000 {
label = "fwconcat0";
- reg = <0x230000 0xbc0000>;
+ reg = <0x220000 0xbd0000>;
};
partition at df0000 {
diff --git a/target/linux/ath79/dts/qca955x_senao_loader.dtsi b/target/linux/ath79/dts/qca955x_senao_loader.dtsi
index 3f5fc0e938..77eabde80a 100644
--- a/target/linux/ath79/dts/qca955x_senao_loader.dtsi
+++ b/target/linux/ath79/dts/qca955x_senao_loader.dtsi
@@ -17,7 +17,7 @@
partition at 0 {
compatible = "openwrt,uimage", "denx,uimage";
- openwrt,ih-magic = <IH_MAGIC_OKLI>;
+ openwrt,ih-magic = <0x73714f4b>;
label = "firmware";
reg = <0x0 0x0>;
};
@@ -66,15 +66,9 @@
reg = <0x0b0000 0x170000>;
};
- partition at 220000 {
- label = "fakeroot";
- reg = <0x220000 0x010000>;
- read-only;
- };
-
- fwconcat0: partition at 230000 {
+ fwconcat0: partition at 220000 {
label = "fwconcat0";
- reg = <0x230000 0xb40000>;
+ reg = <0x220000 0xb50000>;
};
partition at d70000 {
diff --git a/target/linux/ath79/image/common-senao.mk b/target/linux/ath79/image/common-senao.mk
index dd1a53c969..9b5903d8e7 100644
--- a/target/linux/ath79/image/common-senao.mk
+++ b/target/linux/ath79/image/common-senao.mk
@@ -3,30 +3,37 @@ DEVICE_VARS += SENAO_IMGNAME
# This needs to make /tmp/_sys/sysupgrade.tgz an empty file prior to
# sysupgrade, as otherwise it will implant the old configuration from
# OEM firmware when writing rootfs from factory.bin
+# rootfs size and checksum is taken from a squashfs header
+# the header does not exist, therefore, supply the size and md5
define Build/senao-tar-gz
-[ -f "$@" ] && \
mkdir -p $@.tmp && \
touch $@.tmp/failsafe.bin && \
echo '#!/bin/sh' > $@.tmp/before-upgrade.sh && \
echo ': > /tmp/_sys/sysupgrade.tgz' >> $@.tmp/before-upgrade.sh && \
+ echo -n $$(( $$(cat $@ | wc -c) / 4096 * 4096 )) > $@.len && \
+ dd if=$@ bs=$$(cat $@.len) count=1 | md5sum - | cut -d ' ' -f 1 > $@.md5 && \
+ echo '#!/bin/sh' > $@.tmp/after-upgrade.sh && \
+ printf 'fw_setenv rootfs_size 0x%08x\n' $$(cat $@.len) >> $@.tmp/after-upgrade.sh && \
+ printf 'fw_setenv rootfs_checksum %s\n' $$(cat $@.md5) >> $@.tmp/after-upgrade.sh && \
$(CP) $(KDIR)/loader-$(DEVICE_NAME).uImage \
$@.tmp/openwrt-$(word 1,$(1))-uImage-lzma.bin && \
$(CP) $@ $@.tmp/openwrt-$(word 1,$(1))-root.squashfs && \
$(TAR) -cp --numeric-owner --owner=0 --group=0 --mode=a-s --sort=name \
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
-C $@.tmp . | gzip -9n > $@ && \
- rm -rf $@.tmp
+ rm -rf $@.tmp $@.len $@.md5
endef
define Device/senao_loader_okli
- KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x4f4b4c49
+ KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x73714f4b
+ LOADER_KERNEL_MAGIC := 0x73714f4b
LOADER_TYPE := bin
COMPILE := loader-$(1).bin loader-$(1).uImage
COMPILE/loader-$(1).bin := loader-okli-compile
COMPILE/loader-$(1).uImage := append-loader-okli $(1) | pad-to 64k | lzma | \
uImage lzma
IMAGES += factory.bin
- IMAGE/factory.bin := append-squashfs-fakeroot-be | pad-to $$$$(BLOCKSIZE) | \
- append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
+ IMAGE/factory.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
check-size | senao-tar-gz $$$$(SENAO_IMGNAME)
endef
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index f358d44064..bda47ce74d 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -994,8 +994,8 @@ define Device/engenius_eap1200h
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := EAP1200H
DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct
- IMAGE_SIZE := 11520k
- LOADER_FLASH_OFFS := 0x230000
+ IMAGE_SIZE := 11584k
+ LOADER_FLASH_OFFS := 0x220000
SENAO_IMGNAME := ar71xx-generic-eap1200h
endef
TARGET_DEVICES += engenius_eap1200h
@@ -1006,8 +1006,8 @@ define Device/engenius_eap300-v2
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := EAP300
DEVICE_VARIANT := v2
- IMAGE_SIZE := 12032k
- LOADER_FLASH_OFFS := 0x230000
+ IMAGE_SIZE := 12096k
+ LOADER_FLASH_OFFS := 0x220000
SENAO_IMGNAME := senao-eap300v2
endef
TARGET_DEVICES += engenius_eap300-v2
@@ -1017,8 +1017,8 @@ define Device/engenius_eap600
SOC := ar9344
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := EAP600
- IMAGE_SIZE := 12032k
- LOADER_FLASH_OFFS := 0x230000
+ IMAGE_SIZE := 12096k
+ LOADER_FLASH_OFFS := 0x220000
SENAO_IMGNAME := senao-eap600
endef
TARGET_DEVICES += engenius_eap600
@@ -1054,8 +1054,8 @@ define Device/engenius_ecb600
SOC := ar9344
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := ECB600
- IMAGE_SIZE := 12032k
- LOADER_FLASH_OFFS := 0x230000
+ IMAGE_SIZE := 12096k
+ LOADER_FLASH_OFFS := 0x220000
SENAO_IMGNAME := senao-ecb600
endef
TARGET_DEVICES += engenius_ecb600
@@ -1067,8 +1067,8 @@ define Device/engenius_ens202ext-v1
DEVICE_MODEL := ENS202EXT
DEVICE_VARIANT := v1
DEVICE_PACKAGES := rssileds
- IMAGE_SIZE := 12032k
- LOADER_FLASH_OFFS := 0x230000
+ IMAGE_SIZE := 12096k
+ LOADER_FLASH_OFFS := 0x220000
SENAO_IMGNAME := senao-ens202ext
endef
TARGET_DEVICES += engenius_ens202ext-v1
@@ -1080,8 +1080,8 @@ define Device/engenius_enstationac-v1
DEVICE_MODEL := EnStationAC
DEVICE_VARIANT := v1
DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct rssileds
- IMAGE_SIZE := 11520k
- LOADER_FLASH_OFFS := 0x230000
+ IMAGE_SIZE := 11584k
+ LOADER_FLASH_OFFS := 0x220000
SENAO_IMGNAME := ar71xx-generic-enstationac
endef
TARGET_DEVICES += engenius_enstationac-v1
diff --git a/target/linux/ath79/image/tiny.mk b/target/linux/ath79/image/tiny.mk
index dec3cd368d..e9aab2ce06 100644
--- a/target/linux/ath79/image/tiny.mk
+++ b/target/linux/ath79/image/tiny.mk
@@ -37,8 +37,8 @@ define Device/engenius_eap350-v1
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := EAP350
DEVICE_VARIANT := v1
- IMAGE_SIZE := 4864k
- LOADER_FLASH_OFFS := 0x1b0000
+ IMAGE_SIZE := 4928k
+ LOADER_FLASH_OFFS := 0x1a0000
SENAO_IMGNAME := senao-eap350
endef
TARGET_DEVICES += engenius_eap350-v1
@@ -49,8 +49,8 @@ define Device/engenius_ecb350-v1
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := ECB350
DEVICE_VARIANT := v1
- IMAGE_SIZE := 4864k
- LOADER_FLASH_OFFS := 0x1b0000
+ IMAGE_SIZE := 4928k
+ LOADER_FLASH_OFFS := 0x1a0000
SENAO_IMGNAME := senao-ecb350
endef
TARGET_DEVICES += engenius_ecb350-v1
@@ -62,8 +62,8 @@ define Device/engenius_enh202-v1
DEVICE_MODEL := ENH202
DEVICE_VARIANT := v1
DEVICE_PACKAGES := rssileds
- IMAGE_SIZE := 4864k
- LOADER_FLASH_OFFS := 0x1b0000
+ IMAGE_SIZE := 4928k
+ LOADER_FLASH_OFFS := 0x1a0000
SENAO_IMGNAME := senao-enh202
endef
TARGET_DEVICES += engenius_enh202-v1
More information about the lede-commits
mailing list