diff options
author | Bernhard Reutner-Fischer | 2008-05-28 11:21:20 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer | 2008-05-28 11:21:20 +0000 |
commit | 10be1a787f02b388676ef4ddf674d7244cbbe6e3 (patch) | |
tree | c135a452f07aaa205a2df89ceaa3c8af00b556d7 /examples/depmod | |
parent | c21d9c72907fd9a3f75204e22fa31d3bcee13f8e (diff) | |
download | busybox-10be1a787f02b388676ef4ddf674d7244cbbe6e3.zip busybox-10be1a787f02b388676ef4ddf674d7244cbbe6e3.tar.gz |
- move depmod shell script to examples/
Diffstat (limited to 'examples/depmod')
-rw-r--r-- | examples/depmod | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/depmod b/examples/depmod new file mode 100644 index 0000000..d8c4cc5 --- /dev/null +++ b/examples/depmod @@ -0,0 +1,57 @@ +#!/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" |