add filter_kernel_modules_by_path() to speed up module search

master
Harald Hoyer 2011-08-12 10:29:00 +02:00
parent 02a0c05bf7
commit 4073c8159c
4 changed files with 34 additions and 3 deletions

View File

@ -810,6 +810,36 @@ for_each_kmod_dep() {
return $?
}

# filter kernel modules to install certain modules that meet specific
# requirements.
# $1 = search only in subdirectory of /kernel/$1
# $2 = function to call with module name to filter.
# This function will be passed the full path to the module to test.
# The behaviour of this function can vary depending on whether $hostonly is set.
# If it is, we will only look at modules that are already in memory.
# If it is not, we will look at all kernel modules
# This function returns the full filenames of modules that match $1
filter_kernel_modules_by_path () (
local _modname _filtercmd
if ! [[ $hostonly ]]; then
_filtercmd='find "$srcmods/kernel/$1" "$srcmods/extra"'
_filtercmd+=' "$srcmods/weak-updates" -name "*.ko" -o -name "*.ko.gz"'
_filtercmd+=' 2>/dev/null'
else
_filtercmd='cut -d " " -f 1 </proc/modules|xargs modinfo -F filename '
_filtercmd+='-k $kernel 2>/dev/null'
fi
for _modname in $(eval $_filtercmd); do
case $_modname in
*.ko) "$2" "$_modname" && echo "$_modname";;
*.ko.gz) gzip -dc "$_modname" > $initdir/$$.ko
$2 $initdir/$$.ko && echo "$_modname"
rm -f $initdir/$$.ko
;;
esac
done
)

# filter kernel modules to install certain modules that meet specific
# requirements.
# $1 = function to call with module name to filter.

View File

@ -32,7 +32,7 @@ installkernel() {
[[ ! $1 =~ $_unwanted_drivers ]]
}

instmods $(filter_kernel_modules net_module_test)
instmods $(filter_kernel_modules_by_path drivers/net net_module_test)

instmods ecb arc4
# bridge modules

View File

@ -38,7 +38,8 @@ installkernel() {
egrep -q "$mpfuncs" "$1"
}

instmods $(filter_kernel_modules mp_mod_test)
instmods $(filter_kernel_modules_by_path drivers/scsi mp_mod_test)
instmods $(filter_kernel_modules_by_path drivers/md mp_mod_test)
}

install() {

View File

@ -46,7 +46,7 @@ installkernel() {
local _iscsifuncs='iscsi_register_transport'
fgrep -q "$_iscsifuncs" "$1"
}
instmods $(filter_kernel_modules iscsi_module_test)
instmods $(filter_kernel_modules_by_path drivers/scsi iscsi_module_test)
}

install() {