Author: arekm
Date: Thu Jun  5 12:46:45 2008
New Revision: 9795

Modified:
   geninitrd/trunk/geninitrd
Log:
Autoload possibly needed firmware but don't fail if it's not found. Warnings 
are prefixed with WARNING string.

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd   (original)
+++ geninitrd/trunk/geninitrd   Thu Jun  5 12:46:45 2008
@@ -115,11 +115,11 @@
 }
 
 warn() {
-       msg "$*" >&2
+       msg "WARNING: $*" >&2
 }
 
 debug() {
-       [ -n "$verbose" ] && warn "$*"
+       [ -n "$verbose" ] && msg "$*" >&2
 }
 
 # aborts program abnormally
@@ -310,6 +310,11 @@
        done
 }
 
+find_firmware() {
+       local module="$1"
+       echo -n $(modinfo -k $kernel -F firmware $module 2>/dev/null | xargs)
+}
+
 findmodule() {
        local skiperrors=""
        local modName=$1
@@ -936,6 +941,7 @@
 firmware_install_module() {
        local module="$1"
        local firmware_files="$2"
+       local force="$3"
 
        debug "Adding Firmwares ($firmware_files) to initrd for module $module"
        # firmware not yet installed
@@ -952,7 +958,15 @@
        fi
 
        for firmware in $firmware_files; do
-               inst /lib/firmware/$firmware /lib/firmware/$firmware
+               if [ ! -f "/lib/firmware/$firmware" ]; then
+                       if [ -n "$force" ]; then
+                               die "firmware file /lib/firmware/$firmware 
doesn't exist."
+                       else
+                               warn "firmware file /lib/firmware/$firmware 
doesn't exist. Skipping."
+                       fi
+               else
+                       inst /lib/firmware/$firmware /lib/firmware/$firmware
+               fi
        done
 
        mount_sys
@@ -996,12 +1010,20 @@
                        if [ "$sleep_var" ]; then
                                s="$s and $sleep_var usleep"
                        fi
-                       warn "Loading module [$module]$s"
+                       debug "Loading module [$module]$s"
                fi
 
                if [ -n "$firmware_var" ]; then
-                       firmware_install_module "$module" "$firmware_var"
+                       firmware_install_module "$module" "$firmware_var" 
"force=yes"
+               else
+                       firmware_files=$(find_firmware "$module")
+                       if [ -n "$firmware_files" ]; then
+                               for file in $firmware_files; do
+                                       firmware_install_module "$module" 
"$file"
+                               done
+                       fi
                fi
+
                echo "$insmod /lib/modules/$kernel/$modpath $options" | 
add_linuxrc
                if [ -n "$sleep_var" ]; then
                        echo "usleep $sleep_var" | add_linuxrc
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to