ath79: lzma-loader: allow setting custom kernel magic

...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>
This commit is contained in:
Michael Pratt 2021-02-24 22:35:37 -05:00 committed by Petr Štetiar
parent 11d24ffe96
commit 1b8bd17c2d
4 changed files with 16 additions and 1 deletions

View File

@ -4,6 +4,7 @@ include $(INCLUDE_DIR)/image.mk
KERNEL_LOADADDR = 0x80060000 KERNEL_LOADADDR = 0x80060000
DEVICE_VARS += LOADER_FLASH_OFFS LOADER_TYPE 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 += NETGEAR_BOARD_ID NETGEAR_HW_ID
DEVICE_VARS += RAS_BOARD RAS_ROOTFS_SIZE RAS_VERSION DEVICE_VARS += RAS_BOARD RAS_ROOTFS_SIZE RAS_VERSION
@ -30,7 +31,10 @@ define Build/loader-kernel
endef endef
define Build/loader-okli-compile 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 endef
# Arguments: <output name> <kernel offset> # Arguments: <output name> <kernel offset>

View File

@ -13,6 +13,7 @@ LOADADDR := 0x80060000
LOADER := loader.bin LOADER := loader.bin
LOADER_NAME := $(basename $(notdir $(LOADER))) LOADER_NAME := $(basename $(notdir $(LOADER)))
LOADER_DATA := LOADER_DATA :=
KERNEL_MAGIC :=
TARGET_DIR := TARGET_DIR :=
FLASH_OFFS := FLASH_OFFS :=
FLASH_MAX := FLASH_MAX :=
@ -41,6 +42,7 @@ loader-compile: $(PKG_BUILD_DIR)/.prepared
LZMA_TEXT_START=$(LZMA_TEXT_START) \ LZMA_TEXT_START=$(LZMA_TEXT_START) \
LOADADDR=$(LOADADDR) \ LOADADDR=$(LOADADDR) \
LOADER_DATA=$(LOADER_DATA) \ LOADER_DATA=$(LOADER_DATA) \
KERNEL_MAGIC=$(KERNEL_MAGIC) \
FLASH_OFFS=$(FLASH_OFFS) \ FLASH_OFFS=$(FLASH_OFFS) \
FLASH_MAX=$(FLASH_MAX) \ FLASH_MAX=$(FLASH_MAX) \
BOARD="$(BOARD)" \ BOARD="$(BOARD)" \

View File

@ -18,6 +18,7 @@
LOADADDR := LOADADDR :=
LZMA_TEXT_START := 0x80a00000 LZMA_TEXT_START := 0x80a00000
LOADER_DATA := LOADER_DATA :=
KERNEL_MAGIC :=
BOARD := BOARD :=
FLASH_OFFS := FLASH_OFFS :=
FLASH_MAX := FLASH_MAX :=
@ -54,6 +55,10 @@ OBJECTS += data.o
CFLAGS += -DLZMA_WRAPPER=1 -DLOADADDR=$(LOADADDR) CFLAGS += -DLZMA_WRAPPER=1 -DLOADADDR=$(LOADADDR)
endif endif
ifneq ($(strip $(KERNEL_MAGIC)),)
CFLAGS += -DCONFIG_KERNEL_MAGIC=$(KERNEL_MAGIC)
endif
ifneq ($(strip $(KERNEL_CMDLINE)),) ifneq ($(strip $(KERNEL_CMDLINE)),)
CFLAGS += -DCONFIG_KERNEL_CMDLINE='"$(KERNEL_CMDLINE)"' CFLAGS += -DCONFIG_KERNEL_CMDLINE='"$(KERNEL_CMDLINE)"'
endif endif

View File

@ -189,7 +189,11 @@ static void lzma_init_data(void)
p = flash_base + flash_ofs; p = flash_base + flash_ofs;
magic = get_be32(p); magic = get_be32(p);
#ifdef CONFIG_KERNEL_MAGIC
if (magic == CONFIG_KERNEL_MAGIC) {
#else
if (magic == IH_MAGIC_OKLI) { if (magic == IH_MAGIC_OKLI) {
#endif
hdr = (struct image_header *) p; hdr = (struct image_header *) p;
break; break;
} }