下一页 上一页 目录

3. 常规设置和内核模块问题

3.1 内核模块支持

此处列出的所有内核驱动程序均作为内核模块发布;因此,您必须确保拥有一个支持模块的内核。此外,应启用“模块版本”支持,以帮助使用版本不匹配的内核和模块,如下所述。如果您使用的是来自较新 Linux 发行版的内核,则很可能已经启用了此类模块支持。如果您自己编译内核,那么您应该已经知道如何通过 Kernel HOWTO 启用模块。在任何情况下,您都可以检查以确保您的内核配置文件(通常位于 /usr/src/linux 下)中存在以下设置

CONFIG_MODULES=y
CONFIG_MODVERSIONS=y

3.2 ISA 即插即用

如果您有 ISA 即插即用调制解调器,则很可能需要使用 isapnptools 为调制解调器卡分配资源。为此,您需要安装 isapnptools,并在 /etc/isapnp.conf 文件中为调制解调器添加条目。您应该阅读手册页和 Plug-and-Play-HOWTO,但如果您没有其他需要关心的 ISA 设备,那么基本上您只需要执行以下操作

  1. 如果可能,将 BIOS 配置为“Non-PNP OS”。
  2. 以 root 权限运行 pnpdump 以基于探测到的卡和您系统当前的资源使用情况生成一个原型 isapnp.conf 文件。
  3. 在此输出中查找您的调制解调器,并取消注释与您希望用于调制解调器的(否则未使用的)IRQ 对应的行。例如,Sean 的用于配备 Lucent LT 调制解调器的 Thinkpad i1411 的 isapnp.conf 包括

    (CONFIGURE ACRd119/1 (LD 0                   
      (INT 0 (IRQ 11 (MODE +E)))                   
      (IO 1 (SIZE 8) (BASE 0x0100) (CHECK))       
      (NAME "ACRd119/1[0]{LT Win Modem        }") 
    # (ACT Y)                                    
    ))                                           
    
    奇怪的是,至少在这种情况下,有必要将 #(ACT Y) 注释掉。如果一种方式对您不起作用,请尝试另一种方式。
  4. 将文件复制到 /etc/isapnp.conf
  5. 重启。您应该在启动时看到类似于“Initializing ISA PNP devices...OK”的消息。如果失败,则可能是您选择了已在使用的 IRQ/DMA 设置;请尝试 pnpdump 输出中给出的其他选项。(请注意,如果您使用正确的标志运行 isapnp,则可能没有必要重启。但是,对于初学者来说,此时简单地重启是最容易的。)

3.3 PCI 调制解调器

如果您想了解关于您的 PCI 调制解调器的更多信息,而不仅仅是 cat /proc/pci 提供的,那么软件软件包 pciutils 中的实用程序非常有用,例如 scanpcilspci。 特别是,lspci -vv 提供了许多有用的信息。

3.4 模块工具

以下命令在处理模块时非常有用。许多命令需要 root 权限。有关这些命令的更详细信息,请参阅手册页(例如,man insmod)。

insmod、insmod -f 和 modprobe

版本匹配的内核模块通常应使用命令 modprobe 模块名称插入;modprobe 将尝试插入您的模块所依赖的任何其他模块(由 depmod 确定,如下所述)。

可以使用命令 insmod 模块名称插入单个模块(不包括其依赖的模块)。如果该模块是在与当前内核不同的内核下编译的,则 insmod 将报告版本不匹配并拒绝加载该模块。但是,可以传递一个标志来强制模块加载,尽管存在不匹配:insmod -f 模块名称。如果模块使用的内核接口实际上没有随内核版本而更改,则该模块将被插入并且可能在某种程度上起作用。

例如,ESS 调制解调器模块 esscom.o 就是这种情况,它虽然在 2.2.12 下编译,但可以强制插入到更高版本的内核中,并且在内核版本 2.2.14 之前(或更低)在某种程度上可以正常工作,而无需进一步更改;在 2.2.15 之后,需要下面描述的 tty.h 的补丁。然而,即使强制插入对于 2.4 系列的内核也失败。

rmmod

模块在使用后可以通过发出命令 rmmod 来卸载(从内核中移除)。

depmod

depmod 命令分析模块依赖性。预编译模块与运行内核的兼容性可以使用如下命令进行检查

   depmod -e ltmodem.o
对于在内核 2.2.12 下编译的 ltmodem.o 模块与运行内核 2.2.17 的具体示例,返回的信息包括使用具有未解析符号的模块可能是一件危险的事情,如下所述。


下一页 上一页 目录