busybox/examples/depmod
<<
>>
Prefs
   1#!/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, see file LICENSE in this source tree.
   8#
   9
  10BASE="${1:-/usr/lib/modules}"
  11
  12find "$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'
  16done | 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}
  23END {
  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"
  58