| #!/bin/bash |
| # |
| # Copyright 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu> |
| # |
| # You can use these to enable/disable modules without blacklisting them |
| |
| # Make sure our imporant paths are included |
| PATH=$PATH:/usr/sbin:/sbin |
| |
| # Appended to module file at the end when we want to ignore one |
| IGNORE_SUFFIX=".ignore" |
| VER=`uname -r` |
| |
| # If 'module' is found, its renamed to 'module.ignore' |
| function module_disable { |
| # Basic check to see if this is a module available for loading |
| MODULE_CHECK=`modprobe -l $1` |
| if [ -z $MODULE_CHECK ]; then |
| echo "Module $1 not detected -- this is fine" |
| return |
| fi |
| MODULE=$1 |
| MODULE_KO=${MODULE}.ko |
| # In case there are more than one of these modules. This can |
| # happen, for example if your distribution provides one and you have |
| # compiled one in yourself later. |
| MODULE_COUNT=`find /lib/modules/$VER/ -name $MODULE_KO | wc -l` |
| ALL_MODULES=`find /lib/modules/$VER/ -name $MODULE_KO` |
| COUNT=1 |
| CHECK=`modprobe -l $MODULE` |
| for i in $ALL_MODULES; do |
| if [[ $MODULE_COUNT -gt 1 ]]; then |
| if [[ $COUNT -eq 1 ]]; then |
| echo -en "$MODULE_COUNT $MODULE modules found " |
| echo -e "we'll disable all of them" |
| fi |
| echo -en "Disabling $MODULE ($COUNT) ..." |
| else |
| echo -en "Disabling $MODULE ..." |
| fi |
| mv -f $i ${i}${IGNORE_SUFFIX} |
| depmod -ae |
| CHECK_AGAIN=`modprobe -l $MODULE` |
| if [ "$CHECK" != "$CHECK_AGAIN" ]; then |
| echo -e "\t[OK]\tModule disabled:" |
| echo "$CHECK" |
| else |
| echo -e "[ERROR]\tModule is still being detected:" |
| echo "$CHECK" |
| fi |
| let COUNT=$COUNT+1 |
| done |
| } |
| |
| # If 'module.ignore' is found, rename it back to 'module' |
| function module_enable { |
| MODULE=$1 |
| MODULE_KO=${MODULE}.ko |
| IGNORED_MODULE=${MODULE_KO}${IGNORE_SUFFIX} |
| # In case there are more than one of these modules. This can |
| # happen, for example if your distribution provides one and you have |
| # compiled one in yourself later. |
| ALL_MODULES=`find /lib/modules/$VER/ -name $IGNORED_MODULE` |
| for i in $ALL_MODULES; do |
| echo -en "Enabling $MODULE ..." |
| DIR=`dirname $i` |
| mv $i $DIR/$MODULE_KO |
| depmod -ae |
| CHECK=`modprobe -l $MODULE` |
| if [ "$DIR/$MODULE_KO" != $CHECK ]; then |
| if [ -z $CHECK ]; then |
| echo -e "\t[ERROR]\tModule could not be enabled" |
| else |
| echo -en "\t[OK]\tModule renamed but another " |
| echo "module file is being preferred" |
| echo -e "Renamed module:\t\t$DIR/$MODULE_KO" |
| echo -e "Preferred module:\t$CHECK" |
| fi |
| else |
| echo -e "\t[OK]\tModule enabled: " |
| echo "$DIR/$MODULE_KO" |
| fi |
| # Lets only do this for the first module found |
| break |
| done |
| } |
| |