Commit c0dfadfe authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'x86-boot-2020-08-03' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 boot updates from Ingo Molnar:
 "The main change in this cycle was to add support for ZSTD-compressed
  kernel and initrd images.

  ZSTD has a very fast decompressor, yet it compresses better than gzip"

* tag 'x86-boot-2020-08-03' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  Documentation: dontdiff: Add zstd compressed files
  .gitignore: Add ZSTD-compressed files
  x86: Add support for ZSTD compressed kernel
  x86: Bump ZO_z_extra_bytes margin for zstd
  usr: Add support for zstd compressed initramfs
  init: Add support for zstd compressed kernel
  lib: Add zstd support to decompress
  lib: Prepare zstd for preboot environment, improve performance
parents ba77c568 1ac1efa5
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
*.tab.[ch] *.tab.[ch]
*.tar *.tar
*.xz *.xz
*.zst
Module.symvers Module.symvers
modules.builtin modules.builtin
modules.order modules.order
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
*.ver *.ver
*.xml *.xml
*.xz *.xz
*.zst
*_MODULES *_MODULES
*_vga16.c *_vga16.c
*~ *~
......
...@@ -782,9 +782,9 @@ Protocol: 2.08+ ...@@ -782,9 +782,9 @@ Protocol: 2.08+
uncompressed data should be determined using the standard magic uncompressed data should be determined using the standard magic
numbers. The currently supported compression formats are gzip numbers. The currently supported compression formats are gzip
(magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA
(magic number 5D 00), XZ (magic number FD 37), and LZ4 (magic number (magic number 5D 00), XZ (magic number FD 37), LZ4 (magic number
02 21). The uncompressed payload is currently always ELF (magic 02 21) and ZSTD (magic number 28 B5). The uncompressed payload is
number 7F 45 4C 46). currently always ELF (magic number 7F 45 4C 46).
============ ============== ============ ==============
Field name: payload_length Field name: payload_length
......
...@@ -464,6 +464,7 @@ KLZOP = lzop ...@@ -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 := ...@@ -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
......
...@@ -188,6 +188,7 @@ config X86 ...@@ -188,6 +188,7 @@ config X86
select HAVE_KERNEL_LZMA select HAVE_KERNEL_LZMA
select HAVE_KERNEL_LZO select HAVE_KERNEL_LZO
select HAVE_KERNEL_XZ select HAVE_KERNEL_XZ
select HAVE_KERNEL_ZSTD
select HAVE_KPROBES select HAVE_KPROBES
select HAVE_KPROBES_ON_FTRACE select HAVE_KPROBES_ON_FTRACE
select HAVE_FUNCTION_ERROR_INJECTION select HAVE_FUNCTION_ERROR_INJECTION
......
...@@ -26,7 +26,7 @@ OBJECT_FILES_NON_STANDARD := y ...@@ -26,7 +26,7 @@ OBJECT_FILES_NON_STANDARD := y
KCOV_INSTRUMENT := n KCOV_INSTRUMENT := n
targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \
vmlinux.bin.xz vmlinux.bin.lzo vmlinux.bin.lz4 vmlinux.bin.xz vmlinux.bin.lzo vmlinux.bin.lz4 vmlinux.bin.zst
KBUILD_CFLAGS := -m$(BITS) -O2 KBUILD_CFLAGS := -m$(BITS) -O2
KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC) KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC)
...@@ -42,6 +42,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, gnu) ...@@ -42,6 +42,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += -Wno-pointer-sign KBUILD_CFLAGS += -Wno-pointer-sign
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=) KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
KBUILD_CFLAGS += -D__DISABLE_EXPORTS
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
GCOV_PROFILE := n GCOV_PROFILE := n
...@@ -145,6 +146,8 @@ $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE ...@@ -145,6 +146,8 @@ $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
$(call if_changed,lzo) $(call if_changed,lzo)
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE $(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
$(call if_changed,lz4) $(call if_changed,lz4)
$(obj)/vmlinux.bin.zst: $(vmlinux.bin.all-y) FORCE
$(call if_changed,zstd22)
suffix-$(CONFIG_KERNEL_GZIP) := gz suffix-$(CONFIG_KERNEL_GZIP) := gz
suffix-$(CONFIG_KERNEL_BZIP2) := bz2 suffix-$(CONFIG_KERNEL_BZIP2) := bz2
...@@ -152,6 +155,7 @@ suffix-$(CONFIG_KERNEL_LZMA) := lzma ...@@ -152,6 +155,7 @@ suffix-$(CONFIG_KERNEL_LZMA) := lzma
suffix-$(CONFIG_KERNEL_XZ) := xz suffix-$(CONFIG_KERNEL_XZ) := xz
suffix-$(CONFIG_KERNEL_LZO) := lzo suffix-$(CONFIG_KERNEL_LZO) := lzo
suffix-$(CONFIG_KERNEL_LZ4) := lz4 suffix-$(CONFIG_KERNEL_LZ4) := lz4
suffix-$(CONFIG_KERNEL_ZSTD) := zst
quiet_cmd_mkpiggy = MKPIGGY $@ quiet_cmd_mkpiggy = MKPIGGY $@
cmd_mkpiggy = $(obj)/mkpiggy $< > $@ cmd_mkpiggy = $(obj)/mkpiggy $< > $@
......
...@@ -19,13 +19,6 @@ ...@@ -19,13 +19,6 @@
*/ */
#define BOOT_CTYPE_H #define BOOT_CTYPE_H
/*
* _ctype[] in lib/ctype.c is needed by isspace() of linux/ctype.h.
* While both lib/ctype.c and lib/cmdline.c will bring EXPORT_SYMBOL
* which is meaningless and will cause compiling error in some cases.
*/
#define __DISABLE_EXPORTS
#include "misc.h" #include "misc.h"
#include "error.h" #include "error.h"
#include "../string.h" #include "../string.h"
......
...@@ -77,6 +77,10 @@ static int lines, cols; ...@@ -77,6 +77,10 @@ static int lines, cols;
#ifdef CONFIG_KERNEL_LZ4 #ifdef CONFIG_KERNEL_LZ4
#include "../../../../lib/decompress_unlz4.c" #include "../../../../lib/decompress_unlz4.c"
#endif #endif
#ifdef CONFIG_KERNEL_ZSTD
#include "../../../../lib/decompress_unzstd.c"
#endif
/* /*
* NOTE: When adding a new decompressor, please update the analysis in * NOTE: When adding a new decompressor, please update the analysis in
* ../header.S. * ../header.S.
......
...@@ -539,8 +539,14 @@ pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr ...@@ -539,8 +539,14 @@ pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr
# the size-dependent part now grows so fast. # the size-dependent part now grows so fast.
# #
# extra_bytes = (uncompressed_size >> 8) + 65536 # extra_bytes = (uncompressed_size >> 8) + 65536
#
# ZSTD compressed data grows by at most 3 bytes per 128K, and only has a 22
# byte fixed overhead but has a maximum block size of 128K, so it needs a
# larger margin.
#
# extra_bytes = (uncompressed_size >> 8) + 131072
#define ZO_z_extra_bytes ((ZO_z_output_len >> 8) + 65536) #define ZO_z_extra_bytes ((ZO_z_output_len >> 8) + 131072)
#if ZO_z_output_len > ZO_z_input_len #if ZO_z_output_len > ZO_z_input_len
# define ZO_z_extract_offset (ZO_z_output_len + ZO_z_extra_bytes - \ # define ZO_z_extract_offset (ZO_z_output_len + ZO_z_extra_bytes - \
ZO_z_input_len) ZO_z_input_len)
......
...@@ -24,9 +24,16 @@ ...@@ -24,9 +24,16 @@
# error "Invalid value for CONFIG_PHYSICAL_ALIGN" # error "Invalid value for CONFIG_PHYSICAL_ALIGN"
#endif #endif
#ifdef CONFIG_KERNEL_BZIP2 #if defined(CONFIG_KERNEL_BZIP2)
# define BOOT_HEAP_SIZE 0x400000 # define BOOT_HEAP_SIZE 0x400000
#else /* !CONFIG_KERNEL_BZIP2 */ #elif defined(CONFIG_KERNEL_ZSTD)
/*
* Zstd needs to allocate the ZSTD_DCtx in order to decompress the kernel.
* The ZSTD_DCtx is ~160KB, so set the heap size to 192KB because it is a
* round number and to allow some slack.
*/
# define BOOT_HEAP_SIZE 0x30000
#else
# define BOOT_HEAP_SIZE 0x10000 # define BOOT_HEAP_SIZE 0x10000
#endif #endif
......
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef LINUX_DECOMPRESS_UNZSTD_H
#define LINUX_DECOMPRESS_UNZSTD_H
int unzstd(unsigned char *inbuf, long len,
long (*fill)(void*, unsigned long),
long (*flush)(void*, unsigned long),
unsigned char *output,
long *pos,
void (*error_fn)(char *x));
#endif
...@@ -191,13 +191,16 @@ config HAVE_KERNEL_LZO ...@@ -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 ...@@ -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
......
...@@ -342,6 +342,10 @@ config DECOMPRESS_LZ4 ...@@ -342,6 +342,10 @@ config DECOMPRESS_LZ4
select LZ4_DECOMPRESS select LZ4_DECOMPRESS
tristate tristate
config DECOMPRESS_ZSTD
select ZSTD_DECOMPRESS
tristate
# #
# Generic allocator support is selected if needed # Generic allocator support is selected if needed
# #
......
...@@ -170,6 +170,7 @@ lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o ...@@ -170,6 +170,7 @@ lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
lib-$(CONFIG_DECOMPRESS_XZ) += decompress_unxz.o lib-$(CONFIG_DECOMPRESS_XZ) += decompress_unxz.o
lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o
lib-$(CONFIG_DECOMPRESS_LZ4) += decompress_unlz4.o lib-$(CONFIG_DECOMPRESS_LZ4) += decompress_unlz4.o
lib-$(CONFIG_DECOMPRESS_ZSTD) += decompress_unzstd.o
obj-$(CONFIG_TEXTSEARCH) += textsearch.o obj-$(CONFIG_TEXTSEARCH) += textsearch.o
obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/decompress/inflate.h> #include <linux/decompress/inflate.h>
#include <linux/decompress/unlzo.h> #include <linux/decompress/unlzo.h>
#include <linux/decompress/unlz4.h> #include <linux/decompress/unlz4.h>
#include <linux/decompress/unzstd.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -37,6 +38,9 @@ ...@@ -37,6 +38,9 @@
#ifndef CONFIG_DECOMPRESS_LZ4 #ifndef CONFIG_DECOMPRESS_LZ4
# define unlz4 NULL # define unlz4 NULL
#endif #endif
#ifndef CONFIG_DECOMPRESS_ZSTD
# define unzstd NULL
#endif
struct compress_format { struct compress_format {
unsigned char magic[2]; unsigned char magic[2];
...@@ -52,6 +56,7 @@ static const struct compress_format compressed_formats[] __initconst = { ...@@ -52,6 +56,7 @@ static const struct compress_format compressed_formats[] __initconst = {
{ {0xfd, 0x37}, "xz", unxz }, { {0xfd, 0x37}, "xz", unxz },
{ {0x89, 0x4c}, "lzo", unlzo }, { {0x89, 0x4c}, "lzo", unlzo },
{ {0x02, 0x21}, "lz4", unlz4 }, { {0x02, 0x21}, "lz4", unlz4 },
{ {0x28, 0xb5}, "zstd", unzstd },
{ {0, 0}, NULL, NULL } { {0, 0}, NULL, NULL }
}; };
......
This diff is collapsed.
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
****************************************************************/ ****************************************************************/
#include "bitstream.h" #include "bitstream.h"
#include "fse.h" #include "fse.h"
#include "zstd_internal.h"
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> /* memcpy, memset */ #include <linux/string.h> /* memcpy, memset */
...@@ -60,14 +61,6 @@ ...@@ -60,14 +61,6 @@
enum { FSE_static_assert = 1 / (int)(!!(c)) }; \ enum { FSE_static_assert = 1 / (int)(!!(c)) }; \
} /* use only *after* variable declarations */ } /* use only *after* variable declarations */
/* check and forward error code */
#define CHECK_F(f) \
{ \
size_t const e = f; \
if (FSE_isError(e)) \
return e; \
}
/* ************************************************************** /* **************************************************************
* Templates * Templates
****************************************************************/ ****************************************************************/
......
...@@ -127,7 +127,14 @@ static const U32 OF_defaultNormLog = OF_DEFAULTNORMLOG; ...@@ -127,7 +127,14 @@ static const U32 OF_defaultNormLog = OF_DEFAULTNORMLOG;
* Shared functions to include for inlining * Shared functions to include for inlining
*********************************************/ *********************************************/
ZSTD_STATIC void ZSTD_copy8(void *dst, const void *src) { ZSTD_STATIC void ZSTD_copy8(void *dst, const void *src) {
memcpy(dst, src, 8); /*
* zstd relies heavily on gcc being able to analyze and inline this
* memcpy() call, since it is called in a tight loop. Preboot mode
* is compiled in freestanding mode, which stops gcc from analyzing
* memcpy(). Use __builtin_memcpy() to tell gcc to analyze this as a
* regular memcpy().
*/
__builtin_memcpy(dst, src, 8);
} }
/*! ZSTD_wildcopy() : /*! ZSTD_wildcopy() :
* custom version of memcpy(), can copy up to 7 bytes too many (8 bytes if length==0) */ * custom version of memcpy(), can copy up to 7 bytes too many (8 bytes if length==0) */
...@@ -137,13 +144,16 @@ ZSTD_STATIC void ZSTD_wildcopy(void *dst, const void *src, ptrdiff_t length) ...@@ -137,13 +144,16 @@ ZSTD_STATIC void ZSTD_wildcopy(void *dst, const void *src, ptrdiff_t length)
const BYTE* ip = (const BYTE*)src; const BYTE* ip = (const BYTE*)src;
BYTE* op = (BYTE*)dst; BYTE* op = (BYTE*)dst;
BYTE* const oend = op + length; BYTE* const oend = op + length;
/* Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81388. #if defined(GCC_VERSION) && GCC_VERSION >= 70000 && GCC_VERSION < 70200
/*
* Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81388.
* Avoid the bad case where the loop only runs once by handling the * Avoid the bad case where the loop only runs once by handling the
* special case separately. This doesn't trigger the bug because it * special case separately. This doesn't trigger the bug because it
* doesn't involve pointer/integer overflow. * doesn't involve pointer/integer overflow.
*/ */
if (length <= 8) if (length <= 8)
return ZSTD_copy8(dst, src); return ZSTD_copy8(dst, src);
#endif
do { do {
ZSTD_copy8(op, ip); ZSTD_copy8(op, ip);
op += 8; op += 8;
......
...@@ -413,6 +413,28 @@ quiet_cmd_xzkern = XZKERN $@ ...@@ -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
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
......
...@@ -100,6 +100,15 @@ config RD_LZ4 ...@@ -100,6 +100,15 @@ config RD_LZ4
Support loading of a LZ4 encoded initial ramdisk or cpio buffer Support loading of a LZ4 encoded initial ramdisk or cpio buffer
If unsure, say N. If unsure, say N.
config RD_ZSTD
bool "Support initial ramdisk/ramfs compressed using ZSTD"
default y
depends on BLK_DEV_INITRD
select DECOMPRESS_ZSTD
help
Support loading of a ZSTD encoded initial ramdisk or cpio buffer.
If unsure, say N.
choice choice
prompt "Built-in initramfs compression mode" prompt "Built-in initramfs compression mode"
depends on INITRAMFS_SOURCE != "" depends on INITRAMFS_SOURCE != ""
...@@ -196,6 +205,17 @@ config INITRAMFS_COMPRESSION_LZ4 ...@@ -196,6 +205,17 @@ config INITRAMFS_COMPRESSION_LZ4
If you choose this, keep in mind that most distros don't provide lz4 If you choose this, keep in mind that most distros don't provide lz4
by default which could cause a build failure. by default which could cause a build failure.
config INITRAMFS_COMPRESSION_ZSTD
bool "ZSTD"
depends on RD_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.
If you choose this, keep in mind that you may need to install the zstd
tool to be able to compress the initram.
config INITRAMFS_COMPRESSION_NONE config INITRAMFS_COMPRESSION_NONE
bool "None" bool "None"
help help
......
...@@ -15,6 +15,7 @@ compress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA) := lzma ...@@ -15,6 +15,7 @@ compress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA) := lzma
compress-$(CONFIG_INITRAMFS_COMPRESSION_XZ) := xzmisc compress-$(CONFIG_INITRAMFS_COMPRESSION_XZ) := xzmisc
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZO) := lzo compress-$(CONFIG_INITRAMFS_COMPRESSION_LZO) := lzo
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4) := lz4 compress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4) := lz4
compress-$(CONFIG_INITRAMFS_COMPRESSION_ZSTD) := zstd
obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment