{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

如何在Linux系统上验证驱动模块?

fasssfasss 回答0 收藏1
收藏问题

1条回答

zzzmh

zzzmh

回答于2022-06-28 11:18

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

/lib/modules/`uname -r`/modules.pcimap 文件说明:1、在文件的第一行有个注释,分别介绍每列的含义:

[html] view plain copy
  1. # pci module vendor device subvendor subdevice class class_mask driver_data

[html] view plain copy
  1. # 模块名称、 生产商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 相同的设备,例如:

说明:8139cp 模块能够支持 生产商ID 为0x000010ec 设备ID 为 0x00008139 的所有设备;

但是,如果 生产商ID 是 0xffffffff 时,那么支持的设备就有特定情况,例如:

说明:8139too 模块能够支持 设备ID 是 0x00008139、次生产商ID 是 0x000013d1 、次设备ID 是 0x0000ab06 的所有设备;

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

注意事项:在 modules.pcimap 文件中,会存在一些 生产商ID:设备ID 相同,但它们所对应的驱动模块却不相同的情况,例如:

此时,优先顺序应该遵循下面的原则:1、查找 生产商ID:设备ID 和 次生产商ID:次设备ID 相同的 专用模块;2、查找 设备ID 和 次生产商ID:次设备ID 相同的 通用模块;3、查找 设备ID 建议的 驱动模块;4、查找 生产商ID:设备ID 标准的 驱动模块。

因为工作需要,公司超哥写了个排序的命令:

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<