4.6.7 安装modules.alias.bin文件
在安装内核模块时,安装脚本最后会自动调用depmod创建modules.alias.bin/modules.alias文件。我们直接将其复制到initramfs即可:
如果你在某些特殊情况下,需要用手动执行depmod创建modules.alias.bin、modules.dep.bin等文件,相应命令如下:
下面我们验证一下modules.alias.bin是否可以正确工作。我们需要安装两个工具:一个是lspci,这个工具用来运行在目标系统上,查看硬盘设备在PCI总线上的位置,包括设备所在的总线、设备号等,这个工具在软件包pciutils中;另外一个是coreutils中的工具cat,其已经编译并且安装在/vita/sysroot下了,我们将其直接复制到initramfs即可。
我们首先编译安装lspci:
将lspci及其依赖的库安装到initramfs,命令如下:
lspci将依次尝试通过sysfs文件系统、proc文件系统以及直接访问端口的方式列出PCI总线上的设备。为了便于人们理解,社区中维护了一个pci数据库pci.ids,该数据库中记录了ID到设备信息的映射。当lspci查找到设备ID时,其使用设备ID到pci.ids中去匹配设备信息。因此除了安装lspci及依赖的库外,我们还需要安装pci数据库pci.ids,pci.ids已经被包含在软件包pciutils中,并且在安装lspci时已经安装到目标系统的根文件系统下,我们将其复制到initramfs中。
coreutils中的cat已经编译并且安装在/vita/sysroot下了,我们直接复制到initramfs即可。
使用支持NETLINK和inotity的内核以及新的initramfs更新vita系统,重启后运行lspci,运行结果如图4-25所示。根据lspci的输出可见,SATA控制器挂在总线号为0x00的PCI总线上,设备号为0x0d。
图 4-25 硬盘控制器的uevent中的环境变量
根据总线号和设备号就可以确定SATA控制器在sysfs文件系统中的路径。我们使用命令cat将uevent中的相关变量读出,根据输出结果可见,变量MODALIAS的值为"pci:v000080 86d00002829sv00000000sd00000000bc01sc06i01"。我们使用这个MODALIAS的值加载模块,如图4-26所示。
图 4-26 通过环境变量MODALIAS加载驱动
根据输出的信息,我们清楚地看到,使用模块的别名,模块也被正确加载了,说明modules.alias.bin文件工作正常。事实上,通过文件modules.alias.bin中的别名和MODALIAS的对应关系,modprobe将如下命令:
转换为了: