#
# 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.

	  See <file:Documentation/early-userspace/README> for more details.

	  If you are not sure, leave it blank.

config INITRAMFS_ROOT_UID
	int "User ID to map to 0 (user root)"
	depends on INITRAMFS_SOURCE!=""
	default "0"
	help
	  This setting is only meaningful if the INITRAMFS_SOURCE is
	  contains a directory.  Setting this user ID (UID) to something
	  other than "0" will cause all files owned by that UID to be
	  owned by user root in the initial ramdisk image.

	  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
	  This setting is only meaningful if the INITRAMFS_SOURCE is
	  contains a directory.  Setting this group ID (GID) to something
	  other than "0" will cause all files owned by that GID to be
	  owned by group root in the initial ramdisk image.

	  If you are not sure, leave it set to "0".

config RD_GZIP
	bool "Initial ramdisk compressed using gzip"
	default y
	depends on BLK_DEV_INITRD=y
	select DECOMPRESS_GZIP
	help
	  Support loading of a gzip encoded initial ramdisk or cpio buffer.
	  If unsure, say Y.

config RD_BZIP2
	bool "Initial ramdisk compressed using bzip2"
	default n
	depends on BLK_DEV_INITRD=y
	select DECOMPRESS_BZIP2
	help
	  Support loading of a bzip2 encoded initial ramdisk or cpio buffer
	  If unsure, say N.

config RD_LZMA
	bool "Initial ramdisk compressed using lzma"
	default n
	depends on BLK_DEV_INITRD=y
	select DECOMPRESS_LZMA
	help
	  Support loading of a lzma encoded initial ramdisk or cpio buffer
	  If unsure, say N.

choice
	prompt "Built-in initramfs compression mode"
	help
	  This setting is only meaningful if the INITRAMFS_SOURCE is
	  set. It decides by which algorithm the INITRAMFS_SOURCE 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.

	  If you have any problems with bzip2 or lzma compressed
	  initramfs, mail me (Alain Knaff) <alain@knaff.lu>.

	  High compression options are mostly useful for users who
	  are low on disk space (embedded systems), but for whom ram
	  size matters less.

	  If in doubt, select 'gzip'

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
	  The old and tried gzip compression. Its compression ratio is
	  the poorest among the 3 choices; however its speed (both
	  compression and decompression) is the fastest.

config INITRAMFS_COMPRESSION_BZIP2
	bool "Bzip2"
	depends on RD_BZIP2
	help
	  Its compression ratio and speed is intermediate.
	  Decompression speed is slowest among the three.  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.

config INITRAMFS_COMPRESSION_LZMA
	bool "LZMA"
	depends on RD_LZMA
	help
	  The most recent compression algorithm.
	  Its ratio is best, decompression speed is between the other
	  two. Compression is slowest.	The initramfs size is about 33%
	  smaller with LZMA in comparison to gzip.

endchoice
