done
}
+# filter kernel modules to install certian modules that meet specific
+# requirements.
+# $1 = 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
+filter_kernel_modules () (
+ if [[ $hostonly = '' ]]; then
+ for modname in $(find "$srcmods/kernel/drivers" -name '*.ko'); do
+ "$1" "$modname" && echo "$modname"
+ done
+ else
+ while read modname rest; do
+ modname=$(modinfo -F filename -k $kernel $modname)
+ "$1" "$modname" && echo "$modname"
+ done </proc/modules
+ fi
+)
+
# install kernel modules along with all their dependencies.
instmods() {
[[ $no_kernel = yes ]] && return
#!/bin/bash
# Include wired net drivers, excluding wireless
-for modname in $(find "$srcmods/kernel/drivers" -name '*.ko'); do
- if nm -uPA $modname | egrep -q 'eth_type_trans|register_virtio_device' \
- && ! nm -uPA $modname | egrep -q 'iw_handler_get_spy'; then
- if echo "$modname" | egrep -q '/wireless/|/isdn/|/uwb/'; then
- continue
- else
- instmods $modname
- fi
- fi
-done
+
+net_module_test() {
+ local net_drivers='eth_type_transfer|register_virtio_device'
+ local unwanted_drivers='/(wireless|isdn|uwb)/'
+ nm -uPA "$1" | egrep -q $net_drivers && \
+ nm -uPA "$1" | egrep -qv 'iw_handler_get_spy' && \
+ [[ ! $1 =~ $unwanted_drivers ]]
+}
+
+instmods $(filter_kernel_modules net_module_test)
+
instmods ecb arc4
# bridge modules
instmods bridge stp llc
#!/bin/bash
if [[ -z $drivers ]]; then
- drivers="sd_mod"
- # Include block controller drivers
- blockfuncs='ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device'
- if [[ $hostonly = "" ]]; then
- for modname in $(find "$srcmods/kernel/drivers" -name '*.ko'); do
- if nm -uPA $modname | egrep -q "$blockfuncs"; then
- drivers="${drivers} $modname"
- fi
- done
- drivers="${drivers} =fs"
- else
- while read modname rest; do
- modname=$(modinfo -F filename -k $kernel $modname)
- if nm -uPA $modname |egrep -q "$blockfuncs"; then
- drivers="${drivers} $modname"
- fi
- done </proc/modules
- instmods $(get_fs_type "/dev/block/$(find_root_block_device)")
- fi
- instmods $drivers
- # hardcoded list of exceptions
- rm -fr ${initdir}/lib/modules/*/kernel/fs/ocfs2
+ block_module_test() {
+ local blockfuncs='ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device'
+
+ nm -uPA "$1" | egrep -q "$blockfuncs"
+ }
+ instmods sd_mod $(filter_kernel_modules block_module_test)
+ # if not on hostonly mode, install all known filesystems.
+ if [[ $hostonly = '' ]]; then
+ instmods '=fs'
+ else
+ instmods $(get_fs_type "/dev/block/$(find_root_block_device)")
+ fi
+ # hardcoded list of exceptions
+ rm -fr ${initdir}/lib/modules/*/kernel/fs/ocfs2
else
instmods $drivers
fi