在系统上执行 depmod -a 命令后,会在 /lib/modules/`uname -r`/ 目录下创建 modules.*map 文件,如何能确认硬件所需要的驱动模块是什么,就需要通过硬件的ID,来查看 /lib/modules/`uname -r`/modules.pcimap 中定义的模块名称,下面讲解下 modules.pcimap 文件构造。

/lib/modules/`uname -r`/modules.pcimap 文件说明:
1、在文件的第一行有个注释,分别介绍每列的含义:
[php]
# pci module vendor device subvendor subdevice class class_mask driver_data
[/php]
# 模块名称、生产商ID、设备ID、次生产商ID、次设备ID、类型编号、类型掩码、驱动数据。

2、其中 ID 是使用8个十六进制的数字表示,即前面的 0x 符号就表示 十六进制,而 lspci 只能得到 4位 十六进制数,所以,只要 lspci 的4位数能够和 modules.pcimap 中 ID 的后 4位 相同即可。例如:在执行 lspci -n 时得到的信息是 10ec:8139 ,那么在 modules.pcimap 中,相同的信息就是 0x000010ec 0x00008139 ,就可以确定该硬件所需驱动是 8139cp 模块;

3、如果 次生产商ID 和 次设备ID 都是 0xffffffff 的话,就表示该模块能够支持所有 生产商ID 和 设备ID 相同的设备,例如:
[php]
8139cp 0x000010ec 0x00008139 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
[/php]
说明:8139cp 模块能够支持 生产商ID 为0x000010ec 设备ID 为 0x00008139 的所有设备;

但是,如果 生产商ID 是 0xffffffff 时,那么支持的设备就有特定情况,例如:
[php]
8139too 0xffffffff 0x00008139 0x000013d1 0x0000ab06 0x00000000 0x00000000 0x0
[/php]
说明:8139too 模块能够支持 设备ID 是 0x00008139、次生产商ID 是 0x000013d1 、次设备ID 是 0x0000ab06 的所有设备;

4、同一个模块能够支持多个设备。

注意事项:
在 modules.pcimap 文件中,会存在一些 生产商ID:设备ID 相同,但它们所对应的驱动模块却不相同的情况,例如:
[php]
8139cp 0x000010ec 0x00008139 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
8139too 0x000010ec 0x00008139 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
[/php]
此时,优先顺序应该遵循下面的原则:
1、查找 生产商ID:设备ID 和 次生产商ID:次设备ID 相同的 专用模块;
2、查找 设备ID 和 次生产商ID:次设备ID 相同的 通用模块;
3、查找 设备ID 建议的 驱动模块;
4、查找 生产商ID:设备ID 标准的 驱动模块。

因为工作需要,公司超哥写了个排序的命令:
[php]
tail -n +2 /lib/modules/`uname -r`/modules.pcimap | sort | awk ‘{ print " "$1" | "substr($2,7)" | "substr($3,7)" | "substr($2,7)":"substr($3,7)"" }’
[/php]