ath79: lzma-loader: allow setting custom kernel magic
authorMichael Pratt <mcpratt@pm.me>
Thu, 25 Feb 2021 03:35:37 +0000 (22:35 -0500)
committerPetr Štetiar <ynezz@true.cz>
Fri, 11 Jun 2021 05:20:31 +0000 (07:20 +0200)
...and max flash offset

The mtdsplit parser was recently refactored
to allow the kernel to have custom image header magic.

Let's also do this for the lzma-loader

For example:
When implemented together,
this allows the kernel to "appear" to be a rootfs
by OEM software in order to write an image
that is actually kernel + rootfs.

At the same time,
it would boot to openwrt normally
by setting the same magic in DTS.

Both of the variables
have a default value that is unchanged
when not defined in the makefiles

This has no effect on the size of the loader
when lzma compressed.

Signed-off-by: Michael Pratt <mcpratt@pm.me>
(cherry picked from commit 1b8bd17c2d07c7397015a86941db9e114e1d349a)

target/linux/ath79/image/Makefile
target/linux/ath79/image/lzma-loader/Makefile
target/linux/ath79/image/lzma-loader/src/Makefile
target/linux/ath79/image/lzma-loader/src/loader.c

index c2d2474..d8b8800 100644 (file)
@@ -4,6 +4,7 @@ include $(INCLUDE_DIR)/image.mk
 KERNEL_LOADADDR = 0x80060000
 
 DEVICE_VARS += LOADER_FLASH_OFFS LOADER_TYPE
+DEVICE_VARS += LOADER_FLASH_MAX LOADER_KERNEL_MAGIC
 DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_HW_ID
 DEVICE_VARS += RAS_BOARD RAS_ROOTFS_SIZE RAS_VERSION
 
@@ -30,7 +31,10 @@ define Build/loader-kernel
 endef
 
 define Build/loader-okli-compile
-       $(call Build/loader-common,FLASH_OFFS=$(LOADER_FLASH_OFFS) FLASH_MAX=0)
+       $(call Build/loader-common, \
+               FLASH_OFFS=$(LOADER_FLASH_OFFS) \
+               FLASH_MAX=$(LOADER_FLASH_MAX) \
+               KERNEL_MAGIC=$(LOADER_KERNEL_MAGIC) )
 endef
 
 # Arguments: <output name> <kernel offset>
index 0ff59bc..2b1ed82 100644 (file)
@@ -13,6 +13,7 @@ LOADADDR      := 0x80060000
 LOADER         := loader.bin
 LOADER_NAME    := $(basename $(notdir $(LOADER)))
 LOADER_DATA    :=
+KERNEL_MAGIC   :=
 TARGET_DIR     :=
 FLASH_OFFS     :=
 FLASH_MAX      :=
@@ -41,6 +42,7 @@ loader-compile: $(PKG_BUILD_DIR)/.prepared
                LZMA_TEXT_START=$(LZMA_TEXT_START) \
                LOADADDR=$(LOADADDR) \
                LOADER_DATA=$(LOADER_DATA) \
+               KERNEL_MAGIC=$(KERNEL_MAGIC) \
                FLASH_OFFS=$(FLASH_OFFS) \
                FLASH_MAX=$(FLASH_MAX) \
                BOARD="$(BOARD)" \
index 7773f02..c7bb935 100644 (file)
@@ -18,6 +18,7 @@
 LOADADDR       :=
 LZMA_TEXT_START        := 0x80a00000
 LOADER_DATA    :=
+KERNEL_MAGIC   :=
 BOARD          :=
 FLASH_OFFS     :=
 FLASH_MAX      :=
@@ -54,6 +55,10 @@ OBJECTS              += data.o
 CFLAGS         += -DLZMA_WRAPPER=1 -DLOADADDR=$(LOADADDR)
 endif
 
+ifneq ($(strip $(KERNEL_MAGIC)),)
+CFLAGS         += -DCONFIG_KERNEL_MAGIC=$(KERNEL_MAGIC)
+endif
+
 ifneq ($(strip $(KERNEL_CMDLINE)),)
 CFLAGS         += -DCONFIG_KERNEL_CMDLINE='"$(KERNEL_CMDLINE)"'
 endif
index 794c4b6..0213e94 100644 (file)
@@ -189,7 +189,11 @@ static void lzma_init_data(void)
 
                p = flash_base + flash_ofs;
                magic = get_be32(p);
+#ifdef CONFIG_KERNEL_MAGIC
+               if (magic == CONFIG_KERNEL_MAGIC) {
+#else
                if (magic == IH_MAGIC_OKLI) {
+#endif
                        hdr = (struct image_header *) p;
                        break;
                }