commit: d1331dbe7bbc3bfed1076e946bdda4a987fb3ab5 Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> AuthorDate: Sun Jan 12 21:56:30 2020 +0000 Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> CommitDate: Sun Jan 12 22:17:25 2020 +0000 URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=d1331dbe
gen_initramfs.sh: create_initramfs(): Outsource compression method handling into set_initramfs_compression_method() Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> gen_configkernel.sh | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ gen_initramfs.sh | 63 +------------------------------------------------ 2 files changed, 68 insertions(+), 62 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}" ] diff --git a/gen_initramfs.sh b/gen_initramfs.sh index 8620414..783d9a7 100755 --- a/gen_initramfs.sh +++ b/gen_initramfs.sh @@ -1859,40 +1859,6 @@ create_initramfs() { sed -i '/^.*CONFIG_INITRAMFS_SOURCE=.*$/d' "${KERNEL_OUTPUTDIR}/.config" \ || gen_die "failed to delete CONFIG_INITRAMFS_SOURCE from '${KERNEL_OUTPUTDIR}/.config'" - 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 ) - - if isTrue "${COMPRESS_INITRD}" - then - 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 - fi - print_info 1 "$(get_indent 1)>> --integrated-initramfs is set; Setting CONFIG_INITRAMFS_* options ..." [ -f "${KCONFIG_MODIFIED_MARKER}" ] && rm "${KCONFIG_MODIFIED_MARKER}" @@ -1901,34 +1867,7 @@ create_initramfs() { kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INITRAMFS_ROOT_UID" "0" kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INITRAMFS_ROOT_GID" "0" - 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_OUTPUTDIR}/.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_OUTPUTDIR}/.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_OUTPUTDIR}/.config" "CONFIG_RD_${KNOWN_INITRAMFS_COMPRESSION_TYPE}" "${KOPTION_VALUE}" - fi - done + set_initramfs_compression_method "${KERNEL_OUTPUTDIR}/.config" if [ -f "${KCONFIG_MODIFIED_MARKER}" ] then