SVN: geninitrd/trunk/geninitrd

arekm arekm at pld-linux.org
Thu Jun 5 12:46:46 CEST 2008


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


More information about the pld-cvs-commit mailing list