MIPS: ZBOOT: Support XZ compression scheme
Add support for the XZ compression scheme in the ZBOOT decompression stub, in order to support it we need to: - select the "xzkern" compression tool to compress the vmlinux.bin payload - link with ashldi3.o for xz_dec_run() to work - memcpy() is also required for decompress_unxz.c so we share the implementation between GZIP and XZ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Cc: linux-mips@linux-mips.org Cc: blogic@openwrt.org Cc: james.hogan@imgtec.com Patchwork: https://patchwork.linux-mips.org/patch/5818/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Родитель
26fca83a22
Коммит
4e23eb631c
|
@ -1491,6 +1491,7 @@ config SYS_SUPPORTS_ZBOOT
|
||||||
select HAVE_KERNEL_BZIP2
|
select HAVE_KERNEL_BZIP2
|
||||||
select HAVE_KERNEL_LZMA
|
select HAVE_KERNEL_LZMA
|
||||||
select HAVE_KERNEL_LZO
|
select HAVE_KERNEL_LZO
|
||||||
|
select HAVE_KERNEL_XZ
|
||||||
|
|
||||||
config SYS_SUPPORTS_ZBOOT_UART16550
|
config SYS_SUPPORTS_ZBOOT_UART16550
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -37,6 +37,10 @@ vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o
|
||||||
vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o
|
vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_KERNEL_XZ
|
||||||
|
vmlinuzobjs-y += $(obj)/../../lib/ashldi3.o
|
||||||
|
endif
|
||||||
|
|
||||||
targets += vmlinux.bin
|
targets += vmlinux.bin
|
||||||
OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S
|
OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S
|
||||||
$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
|
$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
|
||||||
|
@ -46,6 +50,7 @@ tool_$(CONFIG_KERNEL_GZIP) = gzip
|
||||||
tool_$(CONFIG_KERNEL_BZIP2) = bzip2
|
tool_$(CONFIG_KERNEL_BZIP2) = bzip2
|
||||||
tool_$(CONFIG_KERNEL_LZMA) = lzma
|
tool_$(CONFIG_KERNEL_LZMA) = lzma
|
||||||
tool_$(CONFIG_KERNEL_LZO) = lzo
|
tool_$(CONFIG_KERNEL_LZO) = lzo
|
||||||
|
tool_$(CONFIG_KERNEL_XZ) = xzkern
|
||||||
|
|
||||||
targets += vmlinux.bin.z
|
targets += vmlinux.bin.z
|
||||||
$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
|
$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
|
||||||
|
|
|
@ -43,7 +43,7 @@ void error(char *x)
|
||||||
/* activate the code for pre-boot environment */
|
/* activate the code for pre-boot environment */
|
||||||
#define STATIC static
|
#define STATIC static
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_GZIP
|
#if defined(CONFIG_KERNEL_GZIP) || defined(CONFIG_KERNEL_XZ)
|
||||||
void *memcpy(void *dest, const void *src, size_t n)
|
void *memcpy(void *dest, const void *src, size_t n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -54,6 +54,8 @@ void *memcpy(void *dest, const void *src, size_t n)
|
||||||
d[i] = s[i];
|
d[i] = s[i];
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_KERNEL_GZIP
|
||||||
#include "../../../../lib/decompress_inflate.c"
|
#include "../../../../lib/decompress_inflate.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -78,6 +80,10 @@ void *memset(void *s, int c, size_t n)
|
||||||
#include "../../../../lib/decompress_unlzo.c"
|
#include "../../../../lib/decompress_unlzo.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_KERNEL_XZ
|
||||||
|
#include "../../../../lib/decompress_unxz.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
void decompress_kernel(unsigned long boot_heap_start)
|
void decompress_kernel(unsigned long boot_heap_start)
|
||||||
{
|
{
|
||||||
unsigned long zimage_start, zimage_size;
|
unsigned long zimage_start, zimage_size;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче