ZBLOG

linux pcie设备驱动怎么匹配设备

在Linux中,PCIe设备驱动程序和设备可以通过设备的厂商ID、设备ID和子系统ID来匹配。这些ID信息通常包含在设备的PCI配置空间中。

  1. 确认设备ID和厂商ID

使用以下命令可以列出系统上所有PCI设备的详细信息:

  1. lspci -vvv

在输出中找到你要匹配的设备,并记录下它的设备ID和厂商ID,例如:

  1. 04:00.0 Network controller: Intel Corporation Dual Band Wireless-AC 8265 (rev 78)
  2. Subsystem: Intel Corporation Dual Band Wireless-AC 8265
  3. Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
  4. Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
  5. Latency: 0, Cache Line Size: 64 bytes
  6. Interrupt: pin A routed to IRQ 16
  7. Region 0: Memory at dc200000 (64-bit, non-prefetchable) [size=8K]
  8. Capabilities: <access denied>
  9. Kernel driver in use: iwlwifi
  10. Kernel modules: iwlwifi

从中可以看到设备的厂商ID为Intel Corporation,设备ID为8086:24fd

  1. 编写设备驱动程序

编写一个设备驱动程序,并在驱动程序中使用pci_device_id结构体来描述要匹配的设备。该结构体包含设备的厂商ID、设备ID和子系统ID等信息。

  1. static const struct pci_device_id my_device_ids[] = {
  2. { PCI_DEVICE(0x8086, 0x24fd) }, // Intel Dual Band Wireless-AC 8265
  3. { 0 }
  4. };
  5. MODULE_DEVICE_TABLE(pci, my_device_ids);
  1. 注册设备驱动程序

在驱动程序中,使用pci_register_driver()函数注册设备驱动程序。在注册时,将上一步中定义的my_device_ids作为参数传递给函数。

  1. static struct pci_driver my_pci_driver = {
  2. .name = "my_pci_driver",
  3. .id_table = my_device_ids,
  4. .probe = my_probe,
  5. .remove = my_remove,
  6. };
  7. module_pci_driver(my_pci_driver);

这样,当系统启动时,内核会自动加载并匹配驱动程序与可用设备。如果有符合条件的设备,就会调用驱动程序的probe()函数来初始化设备。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=30

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?