58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
#
 | 
						|
# Simple depmod, use to generate modprobe.conf
 | 
						|
#
 | 
						|
# Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
 | 
						|
#
 | 
						|
# Licensed under GPLv2
 | 
						|
#
 | 
						|
 | 
						|
local BASE="${1:-/usr/lib/modules}"
 | 
						|
 | 
						|
find "$BASE" -name '*.ko.gz' | while read I ; do
 | 
						|
	N=`basename "$I" '.ko.gz'`
 | 
						|
	echo -n "@$N"
 | 
						|
	zcat "$I" | strings | grep '^depends=' | sed -e 's/^depends=$//' -e 's/^depends=/,/' -e 's/,/ @/g'
 | 
						|
done | awk '
 | 
						|
{
 | 
						|
	# modules which has no dependencies are resolved
 | 
						|
	if ( NF == 1 ) { res[$1] = ""; next }
 | 
						|
	# others have to be resolved based on those which already resolved
 | 
						|
	i = $1; $1 = ""; deps[i] = $0; ++ndeps
 | 
						|
}
 | 
						|
END {
 | 
						|
	# resolve implicit dependencies
 | 
						|
	while ( ndeps ) for (mod in deps) {
 | 
						|
		if ( index(deps[mod], "@") > 0 ) {
 | 
						|
			$0 = deps[mod]
 | 
						|
			for ( i=1; i<=NF; ++i ) {
 | 
						|
				if ( substr($i,1,1) == "@" ) {
 | 
						|
					if ( $i in res ) {
 | 
						|
						$i = res[$i] " " substr($i,2)
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			deps[mod] = $0
 | 
						|
		} else {
 | 
						|
			res[mod] = deps[mod]
 | 
						|
			delete deps[mod]
 | 
						|
			--ndeps
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	# output dependencies in modules.dep format
 | 
						|
	for ( mod in res ) {
 | 
						|
		$0 = res[mod]
 | 
						|
		s = ""
 | 
						|
		delete a
 | 
						|
		for ( i=1; i<=NF; ++i ) {
 | 
						|
			if ( ! ($i in a) ) {
 | 
						|
				a[$i] = $i
 | 
						|
				s = " ," $i s
 | 
						|
			}
 | 
						|
		}
 | 
						|
		print "," substr(mod,2) ":" s
 | 
						|
	}
 | 
						|
}
 | 
						|
' | sort | sed -r -e "s!,([^,: ]*)!/usr/lib/modules/\\1.ko.gz!g"
 |