From 95aeed8975dd5a2af782ec986f2af6176b585c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Tue, 26 Apr 2022 16:42:55 +0200 Subject: [PATCH] fix(dracut): default to correct firmware search paths 1. /sys/module/firmware_class/parameters/path (fw_path_para), if any 2. /lib/firmware/updates/$(uname -r) 3. /lib/firmware/updates 4. /lib/firmware/$(uname -r) 5. /lib/firmware https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/base/firmware_loader/main.c?h=v5.17#n406 Reference:https://github.com/dracutdevs/dracut/commit/95aeed8975dd5a2af782ec986f2af6176b585c59 Conflict:context adaptation --- dracut-init.sh | 2 -- dracut.sh | 5 ++++- src/install/dracut-install.c | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/dracut-init.sh b/dracut-init.sh index b6e3714..1d29181 100644 --- a/dracut-init.sh +++ b/dracut-init.sh @@ -72,8 +72,6 @@ srcmods="$dracutsysrootdir/lib/modules/$kernel/" } export srcmods -[[ $DRACUT_FIRMWARE_PATH ]] || export DRACUT_FIRMWARE_PATH="/lib/firmware/updates:/lib/firmware:/lib/firmware/$kernel" - # export standard hookdirs [[ $hookdirs ]] || { hookdirs="cmdline pre-udev pre-trigger netroot " diff --git a/dracut.sh b/dracut.sh index 0df6508..02632c5 100755 --- a/dracut.sh +++ b/dracut.sh @@ -988,7 +988,10 @@ stdloglvl=$((stdloglvl + verbosity_mod_l)) [[ $mdadmconf_l ]] && mdadmconf=$mdadmconf_l [[ $lvmconf_l ]] && lvmconf=$lvmconf_l [[ $dracutbasedir ]] || dracutbasedir="$dracutsysrootdir"/usr/lib/dracut -[[ $fw_dir ]] || fw_dir="$dracutsysrootdir/lib/firmware/updates:$dracutsysrootdir/lib/firmware:$dracutsysrootdir/lib/firmware/$kernel" +[[ $fw_dir ]] || { + fw_path_para=$(< /sys/module/firmware_class/parameters/path) + fw_dir="${fw_path_para:+$dracutsysrootdir$fw_path_para:}$dracutsysrootdir/lib/firmware/updates/$kernel:$dracutsysrootdir/lib/firmware/updates:$dracutsysrootdir/lib/firmware/$kernel:$dracutsysrootdir/lib/firmware" +} [[ $tmpdir_l ]] && tmpdir="$tmpdir_l" [[ $tmpdir ]] || tmpdir="$TMPDIR" [[ $tmpdir ]] || tmpdir="$dracutsysrootdir"/var/tmp diff --git a/src/install/dracut-install.c b/src/install/dracut-install.c index 9122f39..b41bfc7 100644 --- a/src/install/dracut-install.c +++ b/src/install/dracut-install.c @@ -1017,9 +1017,12 @@ static void usage(int status) "\n" " --module,-m Install kernel modules, instead of files\n" " --kerneldir Specify the kernel module directory\n" - " (default: /lib/modules/`uname -r`)\n" + " (default: /lib/modules/$(uname -r))\n" " --firmwaredirs Specify the firmware directory search path with : separation\n" - " (default: DRACUT_FIRMWARE_PATH env var, /lib/firmware if not set)\n" + " (default: $DRACUT_FIRMWARE_PATH, otherwise kernel-compatible\n" + " $(