2005-08-11 02:44:50 +08:00
|
|
|
#
|
|
|
|
# Configuration for initramfs
|
|
|
|
#
|
|
|
|
|
|
|
|
config INITRAMFS_SOURCE
|
|
|
|
string "Initramfs source file(s)"
|
|
|
|
default ""
|
|
|
|
help
|
|
|
|
This can be either a single cpio archive with a .cpio suffix or a
|
|
|
|
space-separated list of directories and files for building the
|
|
|
|
initramfs image. A cpio archive should contain a filesystem archive
|
|
|
|
to be used as an initramfs image. Directories should contain a
|
|
|
|
filesystem layout to be included in the initramfs image. Files
|
|
|
|
should contain entries according to the format described by the
|
|
|
|
"usr/gen_init_cpio" program in the kernel tree.
|
|
|
|
|
|
|
|
When multiple directories and files are specified then the
|
|
|
|
initramfs image will be the aggregate of all of them.
|
|
|
|
|
2007-03-16 21:01:45 +08:00
|
|
|
See <file:Documentation/early-userspace/README> for more details.
|
2005-08-11 02:44:50 +08:00
|
|
|
|
|
|
|
If you are not sure, leave it blank.
|
|
|
|
|
2017-05-09 06:56:57 +08:00
|
|
|
config INITRAMFS_FORCE
|
|
|
|
bool "Ignore the initramfs passed by the bootloader"
|
|
|
|
depends on CMDLINE_EXTEND || CMDLINE_FORCE
|
|
|
|
help
|
|
|
|
This option causes the kernel to ignore the initramfs image
|
|
|
|
(or initrd image) passed to it by the bootloader. This is
|
|
|
|
analogous to CMDLINE_FORCE, which is found on some architectures,
|
|
|
|
and is useful if you cannot or don't want to change the image
|
|
|
|
your bootloader passes to the kernel.
|
|
|
|
|
2005-08-11 02:44:50 +08:00
|
|
|
config INITRAMFS_ROOT_UID
|
|
|
|
int "User ID to map to 0 (user root)"
|
|
|
|
depends on INITRAMFS_SOURCE!=""
|
|
|
|
default "0"
|
|
|
|
help
|
2017-07-07 06:35:43 +08:00
|
|
|
If INITRAMFS_SOURCE points to a directory, files owned by this UID
|
|
|
|
(-1 = current user) will be owned by root in the resulting image.
|
2005-08-11 02:44:50 +08:00
|
|
|
|
|
|
|
If you are not sure, leave it set to "0".
|
|
|
|
|
|
|
|
config INITRAMFS_ROOT_GID
|
|
|
|
int "Group ID to map to 0 (group root)"
|
|
|
|
depends on INITRAMFS_SOURCE!=""
|
|
|
|
default "0"
|
|
|
|
help
|
2017-07-07 06:35:43 +08:00
|
|
|
If INITRAMFS_SOURCE points to a directory, files owned by this GID
|
|
|
|
(-1 = current group) will be owned by root in the resulting image.
|
2005-08-11 02:44:50 +08:00
|
|
|
|
|
|
|
If you are not sure, leave it set to "0".
|
2009-01-07 16:03:49 +08:00
|
|
|
|
|
|
|
config RD_GZIP
|
2014-12-13 08:58:03 +08:00
|
|
|
bool "Support initial ramdisks compressed using gzip"
|
2009-03-29 06:49:08 +08:00
|
|
|
depends on BLK_DEV_INITRD
|
2014-12-13 08:58:03 +08:00
|
|
|
default y
|
2009-01-07 16:03:49 +08:00
|
|
|
select DECOMPRESS_GZIP
|
|
|
|
help
|
|
|
|
Support loading of a gzip encoded initial ramdisk or cpio buffer.
|
|
|
|
If unsure, say Y.
|
|
|
|
|
|
|
|
config RD_BZIP2
|
2014-12-13 08:58:03 +08:00
|
|
|
bool "Support initial ramdisks compressed using bzip2"
|
|
|
|
default y
|
2009-03-29 06:49:08 +08:00
|
|
|
depends on BLK_DEV_INITRD
|
2009-01-07 16:03:49 +08:00
|
|
|
select DECOMPRESS_BZIP2
|
|
|
|
help
|
|
|
|
Support loading of a bzip2 encoded initial ramdisk or cpio buffer
|
|
|
|
If unsure, say N.
|
|
|
|
|
|
|
|
config RD_LZMA
|
2014-12-13 08:58:03 +08:00
|
|
|
bool "Support initial ramdisks compressed using LZMA"
|
|
|
|
default y
|
2009-03-29 06:49:08 +08:00
|
|
|
depends on BLK_DEV_INITRD
|
2009-01-07 16:03:49 +08:00
|
|
|
select DECOMPRESS_LZMA
|
|
|
|
help
|
2009-03-29 07:10:59 +08:00
|
|
|
Support loading of a LZMA encoded initial ramdisk or cpio buffer
|
2009-01-07 16:03:49 +08:00
|
|
|
If unsure, say N.
|
2009-02-20 05:43:51 +08:00
|
|
|
|
decompressors: add boot-time XZ support
This implements the API defined in <linux/decompress/generic.h> which is
used for kernel, initramfs, and initrd decompression. This patch together
with the first patch is enough for XZ-compressed initramfs and initrd;
XZ-compressed kernel will need arch-specific changes.
The buffering requirements described in decompress_unxz.c are stricter
than with gzip, so the relevant changes should be done to the
arch-specific code when adding support for XZ-compressed kernel.
Similarly, the heap size in arch-specific pre-boot code may need to be
increased (30 KiB is enough).
The XZ decompressor needs memmove(), memeq() (memcmp() == 0), and
memzero() (memset(ptr, 0, size)), which aren't available in all
arch-specific pre-boot environments. I'm including simple versions in
decompress_unxz.c, but a cleaner solution would naturally be nicer.
Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Alain Knaff <alain@knaff.lu>
Cc: Albin Tonnerre <albin.tonnerre@free-electrons.com>
Cc: Phillip Lougher <phillip@lougher.demon.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-01-13 09:01:23 +08:00
|
|
|
config RD_XZ
|
2014-12-13 08:58:03 +08:00
|
|
|
bool "Support initial ramdisks compressed using XZ"
|
decompressors: add boot-time XZ support
This implements the API defined in <linux/decompress/generic.h> which is
used for kernel, initramfs, and initrd decompression. This patch together
with the first patch is enough for XZ-compressed initramfs and initrd;
XZ-compressed kernel will need arch-specific changes.
The buffering requirements described in decompress_unxz.c are stricter
than with gzip, so the relevant changes should be done to the
arch-specific code when adding support for XZ-compressed kernel.
Similarly, the heap size in arch-specific pre-boot code may need to be
increased (30 KiB is enough).
The XZ decompressor needs memmove(), memeq() (memcmp() == 0), and
memzero() (memset(ptr, 0, size)), which aren't available in all
arch-specific pre-boot environments. I'm including simple versions in
decompress_unxz.c, but a cleaner solution would naturally be nicer.
Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Alain Knaff <alain@knaff.lu>
Cc: Albin Tonnerre <albin.tonnerre@free-electrons.com>
Cc: Phillip Lougher <phillip@lougher.demon.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-01-13 09:01:23 +08:00
|
|
|
depends on BLK_DEV_INITRD
|
2014-12-13 08:58:03 +08:00
|
|
|
default y
|
decompressors: add boot-time XZ support
This implements the API defined in <linux/decompress/generic.h> which is
used for kernel, initramfs, and initrd decompression. This patch together
with the first patch is enough for XZ-compressed initramfs and initrd;
XZ-compressed kernel will need arch-specific changes.
The buffering requirements described in decompress_unxz.c are stricter
than with gzip, so the relevant changes should be done to the
arch-specific code when adding support for XZ-compressed kernel.
Similarly, the heap size in arch-specific pre-boot code may need to be
increased (30 KiB is enough).
The XZ decompressor needs memmove(), memeq() (memcmp() == 0), and
memzero() (memset(ptr, 0, size)), which aren't available in all
arch-specific pre-boot environments. I'm including simple versions in
decompress_unxz.c, but a cleaner solution would naturally be nicer.
Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Alain Knaff <alain@knaff.lu>
Cc: Albin Tonnerre <albin.tonnerre@free-electrons.com>
Cc: Phillip Lougher <phillip@lougher.demon.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-01-13 09:01:23 +08:00
|
|
|
select DECOMPRESS_XZ
|
|
|
|
help
|
|
|
|
Support loading of a XZ encoded initial ramdisk or cpio buffer.
|
|
|
|
If unsure, say N.
|
|
|
|
|
2010-01-09 06:42:46 +08:00
|
|
|
config RD_LZO
|
2014-12-13 08:58:03 +08:00
|
|
|
bool "Support initial ramdisks compressed using LZO"
|
|
|
|
default y
|
2010-01-09 06:42:46 +08:00
|
|
|
depends on BLK_DEV_INITRD
|
|
|
|
select DECOMPRESS_LZO
|
|
|
|
help
|
|
|
|
Support loading of a LZO encoded initial ramdisk or cpio buffer
|
|
|
|
If unsure, say N.
|
|
|
|
|
2013-07-09 07:01:46 +08:00
|
|
|
config RD_LZ4
|
2014-12-13 08:58:03 +08:00
|
|
|
bool "Support initial ramdisks compressed using LZ4"
|
|
|
|
default y
|
2013-07-09 07:01:46 +08:00
|
|
|
depends on BLK_DEV_INITRD
|
|
|
|
select DECOMPRESS_LZ4
|
|
|
|
help
|
|
|
|
Support loading of a LZ4 encoded initial ramdisk or cpio buffer
|
|
|
|
If unsure, say N.
|
2016-12-15 07:06:01 +08:00
|
|
|
|
2016-12-15 07:06:04 +08:00
|
|
|
choice
|
|
|
|
prompt "Built-in initramfs compression mode"
|
|
|
|
depends on INITRAMFS_SOURCE!=""
|
|
|
|
optional
|
|
|
|
help
|
|
|
|
This option allows you to decide by which algorithm the builtin
|
|
|
|
initramfs will be compressed. Several compression algorithms are
|
|
|
|
available, which differ in efficiency, compression and
|
|
|
|
decompression speed. Compression speed is only relevant
|
|
|
|
when building a kernel. Decompression speed is relevant at
|
|
|
|
each boot. Also the memory usage during decompression may become
|
|
|
|
relevant on memory constrained systems. This is usually based on the
|
|
|
|
dictionary size of the algorithm with algorithms like XZ and LZMA
|
|
|
|
featuring large dictionary sizes.
|
|
|
|
|
|
|
|
High compression options are mostly useful for users who are
|
|
|
|
low on RAM, since it reduces the memory consumption during
|
|
|
|
boot.
|
|
|
|
|
|
|
|
Keep in mind that your build system needs to provide the appropriate
|
|
|
|
compression tool to compress the generated initram cpio file for
|
|
|
|
embedding.
|
|
|
|
|
|
|
|
If in doubt, select 'None'
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_NONE
|
|
|
|
bool "None"
|
|
|
|
help
|
|
|
|
Do not compress the built-in initramfs at all. This may sound wasteful
|
|
|
|
in space, but, you should be aware that the built-in initramfs will be
|
|
|
|
compressed at a later stage anyways along with the rest of the kernel,
|
|
|
|
on those architectures that support this. However, not compressing the
|
|
|
|
initramfs may lead to slightly higher memory consumption during a
|
|
|
|
short time at boot, while both the cpio image and the unpacked
|
|
|
|
filesystem image will be present in memory simultaneously
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_GZIP
|
|
|
|
bool "Gzip"
|
|
|
|
depends on RD_GZIP
|
|
|
|
help
|
|
|
|
Use the old and well tested gzip compression algorithm. Gzip provides
|
|
|
|
a good balance between compression ratio and decompression speed and
|
|
|
|
has a reasonable compression speed. It is also more likely to be
|
|
|
|
supported by your build system as the gzip tool is present by default
|
|
|
|
on most distros.
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_BZIP2
|
|
|
|
bool "Bzip2"
|
|
|
|
depends on RD_BZIP2
|
|
|
|
help
|
|
|
|
It's compression ratio and speed is intermediate. Decompression speed
|
|
|
|
is slowest among the choices. The initramfs size is about 10% smaller
|
|
|
|
with bzip2, in comparison to gzip. Bzip2 uses a large amount of
|
|
|
|
memory. For modern kernels you will need at least 8MB RAM or more for
|
|
|
|
booting.
|
|
|
|
|
|
|
|
If you choose this, keep in mind that you need to have the bzip2 tool
|
|
|
|
available to be able to compress the initram.
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_LZMA
|
|
|
|
bool "LZMA"
|
|
|
|
depends on RD_LZMA
|
|
|
|
help
|
|
|
|
This algorithm's compression ratio is best but has a large dictionary
|
|
|
|
size which might cause issues in memory constrained systems.
|
|
|
|
Decompression speed is between the other choices. Compression is
|
|
|
|
slowest. The initramfs size is about 33% smaller with LZMA in
|
|
|
|
comparison to gzip.
|
|
|
|
|
|
|
|
If you choose this, keep in mind that you may need to install the xz
|
|
|
|
or lzma tools to be able to compress the initram.
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_XZ
|
|
|
|
bool "XZ"
|
|
|
|
depends on RD_XZ
|
|
|
|
help
|
|
|
|
XZ uses the LZMA2 algorithm and has a large dictionary which may cause
|
|
|
|
problems on memory constrained systems. The initramfs size is about
|
|
|
|
30% smaller with XZ in comparison to gzip. Decompression speed is
|
|
|
|
better than that of bzip2 but worse than gzip and LZO. Compression is
|
|
|
|
slow.
|
|
|
|
|
|
|
|
If you choose this, keep in mind that you may need to install the xz
|
|
|
|
tool to be able to compress the initram.
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_LZO
|
|
|
|
bool "LZO"
|
|
|
|
depends on RD_LZO
|
|
|
|
help
|
|
|
|
It's compression ratio is the second poorest amongst the choices. The
|
|
|
|
kernel size is about 10% bigger than gzip. Despite that, it's
|
|
|
|
decompression speed is the second fastest and it's compression speed
|
|
|
|
is quite fast too.
|
|
|
|
|
|
|
|
If you choose this, keep in mind that you may need to install the lzop
|
|
|
|
tool to be able to compress the initram.
|
|
|
|
|
|
|
|
config INITRAMFS_COMPRESSION_LZ4
|
|
|
|
bool "LZ4"
|
|
|
|
depends on RD_LZ4
|
|
|
|
help
|
|
|
|
It's compression ratio is the poorest amongst the choices. The kernel
|
|
|
|
size is about 15% bigger than gzip; however its decompression speed
|
|
|
|
is the fastest.
|
|
|
|
|
|
|
|
If you choose this, keep in mind that most distros don't provide lz4
|
|
|
|
by default which could cause a build failure.
|
|
|
|
|
|
|
|
endchoice
|
|
|
|
|
2016-12-15 07:06:01 +08:00
|
|
|
config INITRAMFS_COMPRESSION
|
initramfs: fix disabling of initramfs (and its compression)
Commit db2aa7fd15e8 ("initramfs: allow again choice of the embedded
initram compression algorithm") introduced the possibility to select the
initramfs compression algorithm from Kconfig and while this is a nice
feature it broke the use case described below.
Here is what my build system does:
- kernel is initially configured not to have an initramfs included
- build the user space root file system
- re-configure the kernel to have an initramfs included
(CONFIG_INITRAMFS_SOURCE="/path/to/romfs") and set relevant
CONFIG_INITRAMFS options, in my case, no compression option
(CONFIG_INITRAMFS_COMPRESSION_NONE)
- kernel is re-built with these options -> kernel+initramfs image is
copied
- kernel is re-built again without these options -> kernel image is
copied
Building a kernel without an initramfs means setting this option:
CONFIG_INITRAMFS_SOURCE="" (and this one only)
whereas building a kernel with an initramfs means setting these options:
CONFIG_INITRAMFS_SOURCE="/home/fainelli/work/uclinux-rootfs/romfs /home/fainelli/work/uclinux-rootfs/misc/initramfs.dev"
CONFIG_INITRAMFS_ROOT_UID=1000
CONFIG_INITRAMFS_ROOT_GID=1000
CONFIG_INITRAMFS_COMPRESSION_NONE=y
CONFIG_INITRAMFS_COMPRESSION=""
Commit db2aa7fd15e85 ("initramfs: allow again choice of the embedded
initram compression algorithm") is problematic because
CONFIG_INITRAMFS_COMPRESSION which is used to determine the
initramfs_data.cpio extension/compression is a string, and due to how
Kconfig works it will evaluate in order, how to assign it.
Setting CONFIG_INITRAMFS_COMPRESSION_NONE with CONFIG_INITRAMFS_SOURCE=""
cannot possibly work (because of the depends on INITRAMFS_SOURCE!=""
imposed on CONFIG_INITRAMFS_COMPRESSION ) yet we still get
CONFIG_INITRAMFS_COMPRESSION assigned to ".gz" because CONFIG_RD_GZIP=y
is set in my kernel, even when there is no initramfs being built.
So we basically end-up generating two initramfs_data.cpio* files, one
without extension, and one with .gz. This causes usr/Makefile to track
usr/initramfs_data.cpio.gz, and not usr/initramfs_data.cpio anymore,
that is also largely problematic after 9e3596b0c6539e ("kbuild:
initramfs cleanup, set target from Kconfig") because we used to track
all possible initramfs_data files in the $(targets) variable before that
commit.
The end result is that the kernel with an initramfs clearly does not
contain what we expect it to, it has a stale initramfs_data.cpio file
built into it, and we keep re-generating an initramfs_data.cpio.gz file
which is not the one that we want to include in the kernel image proper.
The fix consists in hiding CONFIG_INITRAMFS_COMPRESSION when
CONFIG_INITRAMFS_SOURCE="". This puts us back in a state to the
pre-4.10 behavior where we can properly disable and re-enable initramfs
within the same kernel .config file, and be in control of what
CONFIG_INITRAMFS_COMPRESSION is set to.
Fixes: db2aa7fd15e8 ("initramfs: allow again choice of the embedded initram compression algorithm")
Fixes: 9e3596b0c653 ("kbuild: initramfs cleanup, set target from Kconfig")
Link: http://lkml.kernel.org/r/20170521033337.6197-1-f.fainelli@gmail.com
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Acked-by: Nicholas Piggin <npiggin@gmail.com>
Cc: P J P <ppandit@redhat.com>
Cc: Paul Bolle <pebolle@tiscali.nl>
Cc: Michal Marek <mmarek@suse.cz>
Cc: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-06-03 05:46:22 +08:00
|
|
|
depends on INITRAMFS_SOURCE!=""
|
2016-12-15 07:06:01 +08:00
|
|
|
string
|
2016-12-15 07:06:04 +08:00
|
|
|
default "" if INITRAMFS_COMPRESSION_NONE
|
|
|
|
default ".gz" if INITRAMFS_COMPRESSION_GZIP
|
|
|
|
default ".bz2" if INITRAMFS_COMPRESSION_BZIP2
|
|
|
|
default ".lzma" if INITRAMFS_COMPRESSION_LZMA
|
|
|
|
default ".xz" if INITRAMFS_COMPRESSION_XZ
|
|
|
|
default ".lzo" if INITRAMFS_COMPRESSION_LZO
|
|
|
|
default ".lz4" if INITRAMFS_COMPRESSION_LZ4
|
2016-12-15 07:06:01 +08:00
|
|
|
default ".gz" if RD_GZIP
|
|
|
|
default ".lz4" if RD_LZ4
|
|
|
|
default ".lzo" if RD_LZO
|
|
|
|
default ".xz" if RD_XZ
|
|
|
|
default ".lzma" if RD_LZMA
|
|
|
|
default ".bz2" if RD_BZIP2
|
|
|
|
default ""
|