Magellan Linux

Annotation of /tags/mkinitrd-6_3_1/busybox/examples/depmod

Parent Directory Parent Directory | Revision Log Revision Log


Revision 816 - (hide annotations) (download)
Fri Apr 24 18:33:46 2009 UTC (15 years, 5 months ago) by niro
Original Path: trunk/mkinitrd-magellan/busybox/examples/depmod
File size: 1261 byte(s)
-updated to busybox-1.13.4
1 niro 816 #!/bin/sh
2     #
3     # Simple depmod, use to generate modprobe.conf
4     #
5     # Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
6     #
7     # Licensed under GPLv2
8     #
9    
10     local BASE="${1:-/usr/lib/modules}"
11    
12     find "$BASE" -name '*.ko.gz' | while read I ; do
13     N=`basename "$I" '.ko.gz'`
14     echo -n "@$N"
15     zcat "$I" | strings | grep '^depends=' | sed -e 's/^depends=$//' -e 's/^depends=/,/' -e 's/,/ @/g'
16     done | awk '
17     {
18     # modules which has no dependencies are resolved
19     if ( NF == 1 ) { res[$1] = ""; next }
20     # others have to be resolved based on those which already resolved
21     i = $1; $1 = ""; deps[i] = $0; ++ndeps
22     }
23     END {
24     # resolve implicit dependencies
25     while ( ndeps ) for (mod in deps) {
26     if ( index(deps[mod], "@") > 0 ) {
27     $0 = deps[mod]
28     for ( i=1; i<=NF; ++i ) {
29     if ( substr($i,1,1) == "@" ) {
30     if ( $i in res ) {
31     $i = res[$i] " " substr($i,2)
32     }
33     }
34     }
35     deps[mod] = $0
36     } else {
37     res[mod] = deps[mod]
38     delete deps[mod]
39     --ndeps
40     }
41     }
42    
43     # output dependencies in modules.dep format
44     for ( mod in res ) {
45     $0 = res[mod]
46     s = ""
47     delete a
48     for ( i=1; i<=NF; ++i ) {
49     if ( ! ($i in a) ) {
50     a[$i] = $i
51     s = " ," $i s
52     }
53     }
54     print "," substr(mod,2) ":" s
55     }
56     }
57     ' | sort | sed -r -e "s!,([^,: ]*)!/usr/lib/modules/\\1.ko.gz!g"