32.3. 热插拔设备配置

自 SUSE Linux 10.0 开始已不使用热插拔代理。应通过 udev 规则来执行所有设备配置。udev 会提供兼容性规则来调用现有的自定义代理。但是,应考虑将自定义代理转换为 udev 规则。

热插拔代理是一个对事件执行适当操作的可执行程序。设备事件的代理位于 /etc/hotplug.d/事件名称/etc/hotplug.d/default 中。这些目录中后缀为 .hotplug 的所有程序都按字母顺序执行。

为了便于设备配置,装载一个内核模块通常就足够了。在某些情况下,需要调用其它命令以正确配置设备。 在 SUSE Linux中,此操作通常由 udev 规则处理。但是,如果需要自定义设备配置,则设备配置由 /sbin/hwup/sbin/hwdown 执行。这些程序在目录 /etc/sysconfig/hardware 中搜索适合设备的配置并应用配置。例如,要阻止初始化特定设备,使用适当的名称来创建配置文件并将启动模式设置为手动关闭。如果 /sbin/hwup 没有找到任何配置,则它会查找环境变量 MODALIAS。如果环境变量存在,则 modprobe 会自动装载相应的模块。内核热插拔事件会为需要装载模块的设备自动生成 MODALIAS 变量。有关详细信息,请参见 第 32.4 节 “自动模块装载”。有关 /sbin/hwup 的详细信息,可以在文件 /usr/share/doc/packages/sysconfig/READMEman hwup 的手册页中获得。

在调用接口代理前,udev 通常生成系统可以访问的设备节点。udev 支持为接口指派持久性名称。有关详细信息,请参见 第 33 章 使用 udev 创建动态设备节点。然后会根据相关 udev 规则来设置接口本身。下面说明了某些接口的过程。

32.3.1. 激活网络接口

网络接口通过 /sbin/ifup 进行初始化,并通过 /sbin/ifdown 取消激活。文件 /usr/share/doc/packages/sysconfig/README 和 手册页 ifup 中提供了详细信息。

如果某台计算机有多台网络设备,而这些设备有不同的驱动程序,则在引导系统时,如果另一个驱动程序装载的速度较快,则可能会更改接口的指定。SUSE Linux 尝试使编号保持不变 - 设备会保留配置期间指定的接口名称。此指定操作是通过 udev 规则来执行的。 以后如果要更改指定操作,必须更改 udev 规则。

但是,最佳解决方案是使用持久性接口指定。您可以在配置文件中指定各个接口的名称。有关此方法的详细信息,可以在文件 /usr/share/doc/packages/sysconfig/README 中获得。自 SUSE 9.3 之后,udev 还处理网络接口,尽管这些接口不是设备节点。这样就能以更标准化的方式使用持久性接口名称。

32.3.2. 激活储存设备

必须装入储存设备的接口才能进行访问。此操作可以完全自动完成,也可以预先配置。此外,SUSE Linux 会区分系统和用户设备。只能通过在 /etc/fstab 中创建项来自动装入系统设备。默认情况下通过 hal 来处理用户设备。如果需要对用户设备进行其它配置,可以将这些设备输入到 /etc/fstab 中。此外,可在 hal 中修改对此设备的处理。有关 hal 的更多信息,请参见 /usr/share/doc/packages/hal/hal-spec.html

建议使用永久设备名,因为传统的设备名可能因初始化顺序的不同而发生变化。有关永久设备名的详细信息可以在 第 33 章 使用 udev 创建动态设备节点 获得。