MIPS: Add support for ZSTD-compressed kernels
Add support for self-extracting kernels with a ZSTD compression. Tested on a kernel for the GCW-Zero, it allows to reduce the size of the kernel file from 4.1 MiB with gzip to 3.5 MiB with ZSTD, and boots just as fast. Compressed kernels are now also compiled with -D__DISABLE_EXPORTS in order to disable the EXPORT_SYMBOL() macros inside of lib/zstd/decompress.c. Signed-off-by: Paul Cercueil <paul@crapouillou.net> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
This commit is contained in:
parent
1c4dd334df
commit
a510b61613
|
@ -1860,6 +1860,7 @@ config SYS_SUPPORTS_ZBOOT
|
|||
select HAVE_KERNEL_LZMA
|
||||
select HAVE_KERNEL_LZO
|
||||
select HAVE_KERNEL_XZ
|
||||
select HAVE_KERNEL_ZSTD
|
||||
|
||||
config SYS_SUPPORTS_ZBOOT_UART16550
|
||||
bool
|
||||
|
|
|
@ -22,7 +22,7 @@ KBUILD_CFLAGS := $(filter-out -pg, $(KBUILD_CFLAGS))
|
|||
|
||||
KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS))
|
||||
|
||||
KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ \
|
||||
KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ -D__DISABLE_EXPORTS \
|
||||
-DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull"
|
||||
|
||||
KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
|
||||
|
@ -70,6 +70,7 @@ tool_$(CONFIG_KERNEL_LZ4) = lz4
|
|||
tool_$(CONFIG_KERNEL_LZMA) = lzma
|
||||
tool_$(CONFIG_KERNEL_LZO) = lzo
|
||||
tool_$(CONFIG_KERNEL_XZ) = xzkern
|
||||
tool_$(CONFIG_KERNEL_ZSTD) = zstd22
|
||||
|
||||
targets += vmlinux.bin.z
|
||||
$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
|
||||
|
|
|
@ -72,6 +72,10 @@ void error(char *x)
|
|||
#include "../../../../lib/decompress_unxz.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_ZSTD
|
||||
#include "../../../../lib/decompress_unzstd.c"
|
||||
#endif
|
||||
|
||||
const unsigned long __stack_chk_guard = 0x000a0dff;
|
||||
|
||||
void __stack_chk_fail(void)
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* Very small subset of simple string routines
|
||||
*/
|
||||
|
||||
#include <linux/compiler_attributes.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
void *memcpy(void *dest, const void *src, size_t n)
|
||||
|
@ -27,3 +28,19 @@ void *memset(void *s, int c, size_t n)
|
|||
ss[i] = c;
|
||||
return s;
|
||||
}
|
||||
|
||||
void * __weak memmove(void *dest, const void *src, size_t n)
|
||||
{
|
||||
unsigned int i;
|
||||
const char *s = src;
|
||||
char *d = dest;
|
||||
|
||||
if ((uintptr_t)dest < (uintptr_t)src) {
|
||||
for (i = 0; i < n; i++)
|
||||
d[i] = s[i];
|
||||
} else {
|
||||
for (i = n; i > 0; i--)
|
||||
d[i - 1] = s[i - 1];
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue