如果需要在Linux启动时自动加载模块,往往使用mkinitrd命令将模块打包进ramdisk p_w_picpath。仔细研究了rc.sysinit后发现有这样一段代码,可以提供另外一种方式。

# Load other user-defined modulesfor file in /etc/sysconfig/modules/*.modules ; do  [ -x $file ] && $filedone# Load modules (for backward compatibility with VARs)if [ -f /etc/rc.modules ]; then        /etc/rc.modulesfi

可见,只需要在两个地方任意进行配置就可以完成相同的操作(以fuse内核模块为例)

(1) 在/etc/sysconfig/modules/下面创建*.modules文件,参考已经有的*.modules文件,并添加执行权限;

#!/bin/sh/sbin/modinfo -F filename 8021q > /dev/null 2>&1if [ $? -eq 0 ]; then    /sbin/modprobe 8021qfi

或者像这样

#!/bin/shif [ ! -c /dev/input /uinput ] ;  thenexec /sbin/modprobe uinput  > /dev/null 2>&1fi

(2) 也可以在/etc/rc.modules里面加上相应内容,没有的话创建该文件。

操作完毕之后reboot,lsmod | grep fuse进行验证。

为什么不使用rc.local?

网上有些文章建议在/etc/rc.local文件中增加modprobe命令,某些情况下这样配置不会正常工作。因为系统启动在执行完rc.d目录中的程序后才执行/etc/rc.local,因此,启动时rc.d中的程序如果用到了所需加载的模块,就会出错。

另外有些文章提到修改/etc/modprobe.conf文件,其实也是错误的。这个文件仅仅是定义一些内核模块的别名、以及一些特殊的加载、卸载命令。修改此文件并不能使模块在启动时被自动加载。

参见

在RedHat 6.x之后,modprobe.conf已经取消了,如何对modprobe.d下.conf文件进行配置,.conf的如何被调用,还需要找人讨论一下。