Attached is a better patch which: 1) Logs modprobe error messages 2) Only reloads modules that do not have a network
Thank you! Daniel Lewart Urbana, Illinois
--- check-missing-firmware.sh.orig 2021-05-30 15:47:29.000000000 -0500 +++ check-missing-firmware.sh 2021-06-26 00:00:00.000000000 -0500 @@ -103,7 +103,7 @@ # Give modules some time to request firmware. sleep 1 - + modules="" files="" @@ -138,7 +138,7 @@ # decode firmware filename as encoded by # udev firmware.agent fwfile="$(basename $file | sed -e 's#\\x2f#/#g')" - + # strip probably nonexistant firmware subdirectory devpath="$(readlink $file | sed 's/\/firmware\/.*//')" # the symlink is supposed to point to the device in /sys @@ -157,7 +157,7 @@ if grep -q "^$fwfile$" $DENIED 2>/dev/null; then continue fi - + files="$fwfile${files:+ $files}" if [ "$module" = usbcore ]; then @@ -334,8 +334,24 @@ for module in $(echo $modules | tr " " "\n" | sort -u); do if ! nic_is_configured $module; then log "removing and loading kernel module $module" - modprobe -r $module || true - modprobe $module || true + message=$(modprobe -r $module 2>&1 || true) + [ -n "$message" ] && log "$message" + message=$(modprobe $module 2>&1 || true) + [ -n "$message" ] && log "$message" + + # Module name can be different than driver name + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=973733 + driver=$module + if modpath=$(readlink /sys/bus/*/drivers/"$driver"/module); then + module2=$(basename $modpath) + if [ $module2 != "$driver" ]; then + log "removing and loading kernel module $module2 for driver '$driver'" + message=$(modprobe -r $module2 2>&1 || true) + [ -n "$message" ] && log "$message" + message=$(modprobe $module2 2>&1 || true) + [ -n "$message" ] && log "$message" + fi + fi fi done done