diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2020-01-12 22:56:30 +0100 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2020-01-12 23:17:25 +0100 |
commit | d1331dbe7bbc3bfed1076e946bdda4a987fb3ab5 (patch) | |
tree | 023bf4c19196cf5b89dcfdd2ff2a001fc8c08a7c /gen_configkernel.sh | |
parent | gen_compile.sh: compile_kernel(): Improve error message when kernel binary wa... (diff) | |
download | genkernel-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-x | gen_configkernel.sh | 67 |
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}" ] |