mirror of
https://github.com/torvalds/linux
synced 2024-10-06 19:34:19 +00:00
init: Add support for zstd compressed kernel
- Add the zstd and zstd22 cmds to scripts/Makefile.lib - Add the HAVE_KERNEL_ZSTD and KERNEL_ZSTD options Architecture specific support is still needed for decompression. Signed-off-by: Nick Terrell <terrelln@fb.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20200730190841.2071656-4-nickrterrell@gmail.com
This commit is contained in:
parent
4963bb2b89
commit
48f7ddf785
3
Makefile
3
Makefile
|
@ -464,6 +464,7 @@ KLZOP = lzop
|
||||||
LZMA = lzma
|
LZMA = lzma
|
||||||
LZ4 = lz4c
|
LZ4 = lz4c
|
||||||
XZ = xz
|
XZ = xz
|
||||||
|
ZSTD = zstd
|
||||||
|
|
||||||
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
||||||
-Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
|
-Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
|
||||||
|
@ -512,7 +513,7 @@ CLANG_FLAGS :=
|
||||||
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
|
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
|
||||||
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
|
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
|
||||||
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
||||||
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ
|
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
|
||||||
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
|
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
|
||||||
|
|
||||||
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
||||||
|
|
15
init/Kconfig
15
init/Kconfig
|
@ -191,13 +191,16 @@ config HAVE_KERNEL_LZO
|
||||||
config HAVE_KERNEL_LZ4
|
config HAVE_KERNEL_LZ4
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config HAVE_KERNEL_ZSTD
|
||||||
|
bool
|
||||||
|
|
||||||
config HAVE_KERNEL_UNCOMPRESSED
|
config HAVE_KERNEL_UNCOMPRESSED
|
||||||
bool
|
bool
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "Kernel compression mode"
|
prompt "Kernel compression mode"
|
||||||
default KERNEL_GZIP
|
default KERNEL_GZIP
|
||||||
depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_UNCOMPRESSED
|
depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_ZSTD || HAVE_KERNEL_UNCOMPRESSED
|
||||||
help
|
help
|
||||||
The linux kernel is a kind of self-extracting executable.
|
The linux kernel is a kind of self-extracting executable.
|
||||||
Several compression algorithms are available, which differ
|
Several compression algorithms are available, which differ
|
||||||
|
@ -276,6 +279,16 @@ config KERNEL_LZ4
|
||||||
is about 8% bigger than LZO. But the decompression speed is
|
is about 8% bigger than LZO. But the decompression speed is
|
||||||
faster than LZO.
|
faster than LZO.
|
||||||
|
|
||||||
|
config KERNEL_ZSTD
|
||||||
|
bool "ZSTD"
|
||||||
|
depends on HAVE_KERNEL_ZSTD
|
||||||
|
help
|
||||||
|
ZSTD is a compression algorithm targeting intermediate compression
|
||||||
|
with fast decompression speed. It will compress better than GZIP and
|
||||||
|
decompress around the same speed as LZO, but slower than LZ4. You
|
||||||
|
will need at least 192 KB RAM or more for booting. The zstd command
|
||||||
|
line tool is required for compression.
|
||||||
|
|
||||||
config KERNEL_UNCOMPRESSED
|
config KERNEL_UNCOMPRESSED
|
||||||
bool "None"
|
bool "None"
|
||||||
depends on HAVE_KERNEL_UNCOMPRESSED
|
depends on HAVE_KERNEL_UNCOMPRESSED
|
||||||
|
|
|
@ -413,6 +413,28 @@ quiet_cmd_xzkern = XZKERN $@
|
||||||
quiet_cmd_xzmisc = XZMISC $@
|
quiet_cmd_xzmisc = XZMISC $@
|
||||||
cmd_xzmisc = cat $(real-prereqs) | $(XZ) --check=crc32 --lzma2=dict=1MiB > $@
|
cmd_xzmisc = cat $(real-prereqs) | $(XZ) --check=crc32 --lzma2=dict=1MiB > $@
|
||||||
|
|
||||||
|
# ZSTD
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Appends the uncompressed size of the data using size_append. The .zst
|
||||||
|
# format has the size information available at the beginning of the file too,
|
||||||
|
# but it's in a more complex format and it's good to avoid changing the part
|
||||||
|
# of the boot code that reads the uncompressed size.
|
||||||
|
#
|
||||||
|
# Note that the bytes added by size_append will make the zstd tool think that
|
||||||
|
# the file is corrupt. This is expected.
|
||||||
|
#
|
||||||
|
# zstd uses a maximum window size of 8 MB. zstd22 uses a maximum window size of
|
||||||
|
# 128 MB. zstd22 is used for kernel compression because it is decompressed in a
|
||||||
|
# single pass, so zstd doesn't need to allocate a window buffer. When streaming
|
||||||
|
# decompression is used, like initramfs decompression, zstd22 should likely not
|
||||||
|
# be used because it would require zstd to allocate a 128 MB buffer.
|
||||||
|
|
||||||
|
quiet_cmd_zstd = ZSTD $@
|
||||||
|
cmd_zstd = { cat $(real-prereqs) | $(ZSTD) -19; $(size_append); } > $@
|
||||||
|
|
||||||
|
quiet_cmd_zstd22 = ZSTD22 $@
|
||||||
|
cmd_zstd22 = { cat $(real-prereqs) | $(ZSTD) -22 --ultra; $(size_append); } > $@
|
||||||
|
|
||||||
# ASM offsets
|
# ASM offsets
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue