SVN: geninitrd/trunk/mod-depmod24.sh

glen glen at pld-linux.org
Tue Mar 3 10:43:25 CET 2009


Author: glen
Date: Tue Mar  3 10:43:25 2009
New Revision: 10166

Added:
   geninitrd/trunk/mod-depmod24.sh
Log:
- old depmod finding code from geninitrd at 9271 


Added: geninitrd/trunk/mod-depmod24.sh
==============================================================================
--- (empty file)
+++ geninitrd/trunk/mod-depmod24.sh	Tue Mar  3 10:43:25 2009
@@ -0,0 +1,80 @@
+#!/bin/sh
+#
+# geninitrd mod: depmod for 2.4 kernel
+
+# Finds module dependencies
+#
+# @param	$module
+# @param	$mode	[silent]
+#
+# Outputs each dependant module full path.
+find_depmod() {
+	local module="$1"
+	local mode="$2"
+
+	typeset mods module f level depfile first
+
+	depfile=/lib/modules/$kernel/modules.dep
+
+	if [ ! -f $depfile ]; then
+		die "No $depfile! Run depmod and rerun $PROGRAM."
+	fi
+
+	# prepend / if no path given, append $modext.gz if not given,
+	# quote /
+	origmodule="$2"
+	module=$(echo "$2" | \
+		awk '/\// {print;next} {print "/" $0}' | \
+		awk '/\./ {print;next} {print $0 "'$modext'.gz"}' |
+		awk '{gsub("/","\\/");print}')
+	mods=$(awk '
+BEGIN { here = 0 }
+/'"$module"':(.*)/ { gsub(/:/," "); gsub(/\\/," "); print; here = 1; next }
+/:/ { here = 0 }
+/(.*)/ { gsub(/\\/," "); if (here) print }
+' $depfile | xargs)
+
+	# fallback to $modext
+	if [ "$mods" = "" ]; then
+		module=$(echo "$module" | awk '{gsub("\'$modext'\.gz$","\'$modext'",$0);print}')
+		# ") - vim
+	fi
+
+	mods=$(awk '
+BEGIN { here = 0 }
+/'"$module"':(.*)/ { gsub(/:/," "); gsub(/\\/," "); print; here = 1; next }
+/:/ { here = 0 }
+/(.*)/ { gsub(/\\/," "); if (here) print }
+' $depfile | xargs)
+
+	if [ "$mods" = "" ]; then
+		if [ "$1" != silent ]; then
+			warn "$origmodule: module not found in $depfile"
+		fi
+		if ! is_no "$EXIT_IF_MISSING"; then
+			exit 1
+		else
+			warn "If $origmodule isn't compiled in kernel then this initrd may not start your system."
+		fi
+	fi
+
+	level=$3
+	if [ "$level" = "" ]; then
+		level=0
+	fi
+	level=$((level + 1))
+	if [ $level -gt 20 ]; then
+		die "$origmodule: cycle in $depfile"
+	fi
+
+	first=
+	for f in $mods; do
+		if [ "$first" = "" ]; then
+			first=$f
+		else
+			find_depmod $1 $f $level
+		fi
+	done
+
+	echo $first
+}


More information about the pld-cvs-commit mailing list