aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2020-01-12 22:56:30 +0100
committerThomas Deutschmann <whissi@gentoo.org>2020-01-12 23:17:25 +0100
commitd1331dbe7bbc3bfed1076e946bdda4a987fb3ab5 (patch)
tree023bf4c19196cf5b89dcfdd2ff2a001fc8c08a7c /gen_configkernel.sh
parentgen_compile.sh: compile_kernel(): Improve error message when kernel binary wa... (diff)
downloadgenkernel-d1331dbe7bbc3bfed1076e946bdda4a987fb3ab5.tar.gz
genkernel-d1331dbe7bbc3bfed1076e946bdda4a987fb3ab5.tar.bz2
genkernel-d1331dbe7bbc3bfed1076e946bdda4a987fb3ab5.zip
gen_initramfs.sh: create_initramfs(): Outsource compression method handling into set_initramfs_compression_method()
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'gen_configkernel.sh')
-rwxr-xr-xgen_configkernel.sh67
1 files changed, 67 insertions, 0 deletions
diff --git a/gen_configkernel.sh b/gen_configkernel.sh
index 6943050..ea7701f 100755
--- a/gen_configkernel.sh
+++ b/gen_configkernel.sh
@@ -113,6 +113,73 @@ determine_kernel_config_file() {
fi
}
+set_initramfs_compression_method() {
+ [[ ${#} -ne 1 ]] \
+ && gen_die "$(get_useful_function_stack "${FUNCNAME}")Invalid usage of ${FUNCNAME}(): Function takes exactly one argument (${#} given)!"
+
+ local kernel_config=${1}
+
+ local compress_config=NONE
+ local -a KNOWN_INITRAMFS_COMPRESSION_TYPES=()
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( NONE )
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( GZIP )
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( BZIP2 )
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( LZMA )
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( XZ )
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( LZO )
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( LZ4 )
+
+ case ${COMPRESS_INITRD_TYPE} in
+ gz)
+ compress_config='GZIP'
+ ;;
+ bz2)
+ compress_config='BZIP2'
+ ;;
+ lzma)
+ compress_config='LZMA'
+ ;;
+ xz|best|fastest)
+ compress_config='XZ'
+ ;;
+ lzop)
+ compress_config='LZO'
+ ;;
+ lz4)
+ compress_config='LZ4'
+ ;;
+ esac
+
+ local KNOWN_INITRAMFS_COMPRESSION_TYPE
+ local KOPTION_VALUE
+ for KNOWN_INITRAMFS_COMPRESSION_TYPE in "${KNOWN_INITRAMFS_COMPRESSION_TYPES[@]}"
+ do
+ KOPTION_VALUE=n
+ if [[ "${KNOWN_INITRAMFS_COMPRESSION_TYPE}" == "${compress_config}" ]]
+ then
+ KOPTION_VALUE=y
+ fi
+
+ if [ ${KV_NUMERIC} -ge 4010 ]
+ then
+ kconfig_set_opt "${kernel_config}" "CONFIG_INITRAMFS_COMPRESSION_${KNOWN_INITRAMFS_COMPRESSION_TYPE}" "${KOPTION_VALUE}"
+
+ if [[ "${KOPTION_VALUE}" == "y" && "${KNOWN_INITRAMFS_COMPRESSION_TYPE}" != "NONE" ]]
+ then
+ # Make sure that the kernel can decompress our initramfs
+ kconfig_set_opt "${kernel_config}" "CONFIG_RD_${KNOWN_INITRAMFS_COMPRESSION_TYPE}" "${KOPTION_VALUE}"
+ fi
+ else
+ [[ "${KNOWN_INITRAMFS_COMPRESSION_TYPE}" == "NONE" ]] && continue
+
+ # In <linux-4.10, to control used initramfs compression, we have to
+ # disable every supported compression type except compression type
+ # we want to use, (see $KERNEL_DIR/usr/Makefile).
+ kconfig_set_opt "${kernel_config}" "CONFIG_RD_${KNOWN_INITRAMFS_COMPRESSION_TYPE}" "${KOPTION_VALUE}"
+ fi
+ done
+}
+
config_kernel() {
local diff_cmd="$(which zdiff 2>/dev/null)"
if [ -z "${diff_cmd}" ]