需要特殊配置的设备

一些设备除了将设备别名指定给模块的常规操作之外,还需要一些额外的配置。

char-major-10:鼠标、看门狗和随机数

硬件设备通常通过它们的主设备号来识别,例如 ftape 是char-major-27。但是,如果您查看/dev中主设备号为 10 的条目,您会看到这是一堆非常不同的设备,包括

这些设备由几个不同的模块控制,而不是单个模块,因此这些杂项设备的 kerneld 配置使用主设备号次设备号。

        alias char-major-10-1 psaux     # For PS/2 mouse
        alias char-major-10-130 wdt     # For WDT watchdog

您需要内核版本 1.3.82 或更高版本才能使用此功能;早期版本不会将次设备号传递给 kerneld,这使得 kerneld 无法确定要加载哪个杂项设备模块。

加载 SCSI 驱动程序:scsi_hostadapter条目

SCSI 设备的驱动程序包括 SCSI 主机适配器(例如 Adaptec 1542)的驱动程序,以及您使用的 SCSI 设备类型(例如硬盘、CD-ROM 或磁带驱动器)的驱动程序。所有这些都可以作为模块加载。但是,当您想要访问连接到 Adaptec 卡的 CD-ROM 驱动器时,内核和 kerneld 只知道它需要加载sr_mod模块以支持 SCSI CD-ROM;它不知道 CD-ROM 连接到哪个 SCSI 控制器,因此不知道要加载哪个模块来支持 SCSI 控制器。

为了解决这个问题,您可以将 SCSI 驱动程序模块的条目添加到您的/etc/conf.modules中,告诉 kerneld 它应该加载哪个可能的 SCSI 控制器模块。

        alias scd0 sr_mod               # sr_mod for SCSI CD-ROM's ...
        alias scsi_hostadapter aha1542  # ... need the Adaptec driver

这仅适用于内核版本 1.3.82 或更高版本。

如果您只有一个 SCSI 控制器,这将有效。如果您有多个,情况会变得稍微复杂一些。

一般来说,如果已经安装了另一个主机适配器的驱动程序,您就无法让 kerneld 加载 SCSI 主机适配器的驱动程序。您必须将两个驱动程序都构建到您的内核中(而不是作为模块),或者手动加载模块。

提示:一种方法可以让 kerneld 加载多个 SCSI 驱动程序。James Tsiao 提出了这个想法。

您可以通过手动在 modules.dep 中设置依赖关系,轻松地让 kerneld 加载第二个 scsi 驱动程序。您只需要一个像这样的条目:

      /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o

让 kerneld 加载aha1542.o在加载st.o之前。我在家里的机器设置几乎与上面的设置完全一样,并且对于我的所有辅助 scsi 设备(包括磁带、cd-rom 和通用 scsi 设备)都工作良好。缺点是 depmod -a 无法自动检测这些依赖关系,因此用户需要手动添加它们,并且不要在启动时运行 depmod -a。但是一旦设置好,kerneld 将自动加载aha1542.o就没问题了。

您应该意识到,此技术仅在两个控制器上有不同类型的 SCSI 设备时才有效,例如,一个控制器上有硬盘,另一个控制器上有 cd-rom 驱动器、磁带或通用 SCSI 设备。

当加载模块不够时:post-install条目

有时,仅仅加载模块不足以使事情正常工作。例如,如果您的声卡编译为模块,则设置特定的音量级别通常很方便。唯一的问题是,设置在下次加载模块时会消失。这是 Ben Galliart ():

提出的一个巧妙技巧。最终的解决方案需要安装 setmix 软件包,然后将以下行添加到我的/etc/conf.modules:

post-install sound /usr/local/bin/setmix -f /etc/volume.conf

这样做的是,在加载声音模块后,kerneld 运行由post-install sound条目指示的命令。因此,声音模块使用命令 /usr/local/bin/setmix -f /etc/volume.conf 进行配置。

这可能对其他模块也很有用,例如,lp模块可以使用tunelp程序通过添加

        post-install lp tunelp options

来实现配置。为了让 kerneld 识别这些选项,您需要内核版本 1.3.69f 或更高版本。

注意:本 mini-HOWTO 的早期版本提到了 pre-remove 选项,该选项可能用于在 kerneld 删除模块之前运行命令。但是,这从未奏效,因此不鼓励使用它 - 此选项很可能会在未来的 kerneld 版本中消失。模块设置的整个问题目前正在发生一些变化,并且当您阅读本文时,您的系统上的情况可能会有所不同。