This commit is contained in:
parent
aa4b35f47a
commit
4ab13a9304
@ -1,165 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
LC_ALL=POSIX
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
cat <<EOF
|
|
||||||
Usage: ${0##*/} [-i module] [-x module] [-Nv] {module|rpm} ...
|
|
||||||
|
|
||||||
-i Include the specified modules (glob expression).
|
|
||||||
|
|
||||||
-x Exclude the specified modules (glob expression).
|
|
||||||
|
|
||||||
-N Don't try to combine modalias tags that only differ in one character.
|
|
||||||
|
|
||||||
-v Verbose: report which modules define which aliases.
|
|
||||||
EOF
|
|
||||||
exit $1
|
|
||||||
}
|
|
||||||
|
|
||||||
ARGS=("$@")
|
|
||||||
|
|
||||||
options=`getopt -o i:x:vNh -- "$@"`
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
usage 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
eval set -- "$options"
|
|
||||||
|
|
||||||
opt_combine=1
|
|
||||||
while :; do
|
|
||||||
case "$1" in
|
|
||||||
-i)
|
|
||||||
include="$include ${2%.ko}"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-x)
|
|
||||||
exclude="$exclude ${2%.ko}"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-v)
|
|
||||||
opt_verbose=1
|
|
||||||
shift ;;
|
|
||||||
-N)
|
|
||||||
opt_combine=
|
|
||||||
shift ;;
|
|
||||||
-h)
|
|
||||||
usage 0
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
process_module() {
|
|
||||||
declare module=$1 base=${1##*/} aliases
|
|
||||||
|
|
||||||
if [ -n "$include" ]; then
|
|
||||||
included=
|
|
||||||
for x in $include; do
|
|
||||||
eval "case \"\${base%.ko}\" in (${x%.ko}) included=1;; esac"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
included=1
|
|
||||||
fi
|
|
||||||
for x in $exclude; do
|
|
||||||
eval "case \"\${base%.ko}\" in (${x%.ko}) included=;; esac"
|
|
||||||
done
|
|
||||||
[ -n "$included" ] || return
|
|
||||||
|
|
||||||
aliases="$(/sbin/modinfo -F alias "$module" \
|
|
||||||
| sed -nre 's@^.+:.+$@Supplements: modalias(&)@p')"
|
|
||||||
if [ -n "$aliases" ]; then
|
|
||||||
eval "processed_module_${base//[^a-zA-Z0-9_]/_}=$base"
|
|
||||||
echo "$aliases" \
|
|
||||||
| if [ -n "$opt_verbose" ]; then
|
|
||||||
sed -e "s@\$@ # $base@"
|
|
||||||
else
|
|
||||||
cat
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
print_modaliases() {
|
|
||||||
declare class=$1 variants=$2 pos=$3
|
|
||||||
if [ -n "$variants" ]; then
|
|
||||||
echo "${class:0:pos}[$variants]${class:pos+1}"
|
|
||||||
else
|
|
||||||
[ -z "$class" ] || echo "$class"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
combine_modaliases() {
|
|
||||||
declare tag class variants pos n
|
|
||||||
read class
|
|
||||||
while read tag; do
|
|
||||||
for ((n=0; n<${#class}; n++)); do
|
|
||||||
if [ "*" != "${class:n:1}" -a \
|
|
||||||
"${class:0:n}" = "${tag:0:n}" -a \
|
|
||||||
"${class:n+1}" = "${tag:n+1}" ] &&
|
|
||||||
( [ -z "$pos" ] || [ $n = $pos ] ); then
|
|
||||||
variants="${variants:-${class:n:1}}${tag:n:1}"
|
|
||||||
pos=$n
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $n -eq ${#class} ]; then
|
|
||||||
print_modaliases "$class" "$variants" "$pos"
|
|
||||||
variants=
|
|
||||||
pos=
|
|
||||||
class=$tag
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
print_modaliases "$class" "$variants" "$pos"
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp=$(mktemp -t ${0##*/}.XXXXXX)
|
|
||||||
trap "rm -f $tmp" EXIT
|
|
||||||
|
|
||||||
for file in "$@"; do
|
|
||||||
case "$(file -b "$file")" in
|
|
||||||
RPM*)
|
|
||||||
tmpdir=$(mktemp -td ${0##*/}.XXXXXX)
|
|
||||||
rpm2cpio "$file" | ( cd $tmpdir && cpio -dim --quiet )
|
|
||||||
for module in $(find $tmpdir -type f -name '*.ko'); do
|
|
||||||
process_module "$module" >> $tmp
|
|
||||||
done
|
|
||||||
rm -rf $tmpdir
|
|
||||||
;;
|
|
||||||
ELF*)
|
|
||||||
process_module "$file" >> $tmp
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [ -e "$file" ]; then
|
|
||||||
echo "File type of $file not supported" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
file2=$(/sbin/modinfo -F filename "${file%.ko}")
|
|
||||||
if ! [ -e "$file2" ]; then
|
|
||||||
echo "No module $file found" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
process_module "$file2" >> $tmp
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "${!processed_module_*}" ]; then
|
|
||||||
echo "# Modules:" $(for m in ${!processed_module_*}; do echo ${!m}; done \
|
|
||||||
| sort -u)
|
|
||||||
|
|
||||||
sort -u $tmp \
|
|
||||||
| if [ -n "$opt_combine" ]; then
|
|
||||||
combine_modaliases
|
|
||||||
else
|
|
||||||
cat
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "# Generated with: ${0##*/} ${ARGS[*]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# vim:softtabstop=4 shiftwidth=4
|
|
Loading…
Reference in New Issue
Block a user