如上所述为 Linux-2.4.x 内核设置系统仍然完全适用,但对于 Linux-2.6.x 内核(在撰写本文时 x = 0, 1, 2, 3),则可以实现更多功能
USB 设备的即插即用功能已得到极大改进。这意味着现在可以从 USB 端口连接和移除设备,系统能够完全识别。如果连接了设备,它将显示在 /proc 文件系统中。一旦移除,它将不再显示。
引入了 sysfs 系统。通过使用此功能,可以非常严格地控制连接的设备、它们的属性和连接节点。
用于处理热插拔的实用程序已得到改进或变得可用。借助这些实用程序,可以轻松区分已连接的设备,而无需考虑它们的连接顺序。
内核配置选项与 第 5.2 节 中描述的非常相似。配置菜单(# make menuconfig)的组织方式有所不同,并且更加系统化。以下是相关的选项
您可能有兴趣查阅 迁移到 Linux Kernel 2.6,但不必遵循无法执行的步骤。
在 第 6.2 节 中讨论了同时插入两个 USB 设备的情况。困难在于用户很难区分这两个设备。 Linux Hotplug Project(搜索 hotplug)最近取得的进展,并在 2.6 系列内核中实现,使得有效解决此问题成为可能。为了实现,需要一些实用程序
sysfs 文件系统。
sysfs 文件系统是 Linux-2.6 内核系列固有的。udev 和 sysfstools 使用它来获取有关内核对象(设备等)、其属性和相互链接的信息。激活按照以下步骤进行
# cd / # mkdir sys # mount -t sysfs none /sys |
如果您执行 ls -F /sys,将显示一个完整的目录结构,其中包含诸如 block/、bus/ 等条目。您已成功。现在应该通过将以下行添加到/etc/fstab:
none /sys sysfs defaults 0 0 |
Sysfsutils。
这以常用方式之一安装,无需进行特殊的配置选项。README 文件中的说明非常清楚。但是,您应该首先确保条目/usr/local/lib已输入到/etc/ld.so.conf以便libsysfs.so库可以被系统识别。安装后,检查实用程序/usr/local/bin/lsbus和/usr/local/bin/systool已安装。还要检查上面提到的库是否已正确链接(ldconfig -p | grep libsysfs).
Hotplug。
接下来安装hotplug脚本。首先要做的是检查热插拔是否在您的系统上工作。执行 less /proc/sys/kernel/hotplug。结果应该是/sbin/hotplug。如果不是这样,您应该添加行echo "/sbin/hotplug" > /proc/sys/kernel/hotplug到适当的初始化脚本,例如/etc/rc.d/rc.local。也可以在检查一切正常之前(以 root 用户身份)给出此命令。安装非常简单。执行# make install。之后检查脚本/sbin/hotplug存在。
Udev。
这是最后一次安装。研究 README 文件并按照必要的说明进行操作,以便能够运行make USE_KLIBC=true。如果您已编译 Linux-2.6.x 内核,这应该不会太困难。快速检查是找出/sbin/udev和/sbin/udevinfo存在。还有其他情况,其中一个非常重要的是/etc/udev/udev.rules。如果您为记忆棒设置了工作环境(如上所述)并且插入了记忆棒,您可以尝试ls /udev,您应该看到设备(sda、sda1 等)。如果它在那里,请拔下设备并再次列出。它应该消失了!
在安装了 udev 实用程序的情况下,可以根据一些内置属性识别记忆棒。其中一个有效的方法是供应商标识。要查找已连接设备的此信息,请执行systool -vb scsi | grep vendor。这应该给出已连接 SCSI 设备的列表(请记住,您的记忆棒充当 SCSI 设备 第 6.2 节)。假设您同时插入了两个记忆棒,并且(像我一样)找到了两个供应商 ID,即 “UFD” 和 “STORAGE”。然后添加到文件/etc/udev/udev.rules以下行(如果需要,可以放在顶部)
## Flash Memory 1 BUS="scsi", SYSFS_vendor="UFD*", NAME="namib%n" ## Flash Memory 2 BUS="scsi", SYSFS_vendor="STORAGE*", NAME="kalahari%n" |
供应商标识可能带有尾随空格,因此通配符星号是有目的的。不要忽略它们。移除并更换记忆棒,然后执行ls /udev。代替非个性化的sda, sda1等,现在应该有kalahari, kalahari1, namib和namib1。设备已根据其中的 “vendor” 信息命名。因此,无论设备映射到哪里,我们都可以识别它。剩下的就是创建适当的挂载点,例如/mnt/namib和kalahari并创建类似
/udev/namib1 /mnt/namib vfat,ext2 user,noauto,rw 0 0 /udev/kalahari1 /mnt/kalahari vfat,ext2 user,noauto,rw 0 0 |
在/etc/fstab中,以允许从其他位置挂载。
这非常有趣……并且请记住,地球上还有其他沙漠。