From: Denis Vlasenko Date: Sat, 24 May 2008 20:54:14 +0000 (-0000) Subject: docs/depmod: and example of depmod in shell/sed/awk... X-Git-Tag: 1_11_0~184 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=bd23fbbd0a0491e00bac89fc30f31972525d95bb;p=oweals%2Fbusybox.git docs/depmod: and example of depmod in shell/sed/awk... --- diff --git a/docs/depmod b/docs/depmod new file mode 100644 index 000000000..d8c4cc5aa --- /dev/null +++ b/docs/depmod @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Simple depmod, use to generate modprobe.conf +# +# Copyright (C) 2008 by Vladimir Dronnikov +# +# 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"