博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设备标识及驱动程序所支持的设备(…
阅读量:4051 次
发布时间:2019-05-25

本文共 1109 字,大约阅读时间需要 3 分钟。

2. 驱动程序所支持的设备

    在驱动程序的编写过程中,如果此程序被用来作为硬件设备的驱动,那么应该首先确定设备标识。

2.1 PCI设备

    可以使用两个辅助宏来进行struct pci_device_id结构体的初始化:

                        PCI_DEVICE(vendor, device)

               创ㄒ桓鼋龊吞囟ǔ 碳吧璞?/span>ID相匹配的struct pci_device_id

               PCI_DEVICE_CLASS(device_class, device_class_mask)

               创建一个和特定PCI类相匹配的struct pci_device_id

                 struct pci_device_id结构体需要被导出到用户空间,使热插拔和模块装载系统知道什么模块针对什

         么硬件设备。宏MODULE_DEVICE_TABLE完成这个工作。

        MODULE_DEVICE_TABLE(pci, var_name)

          该宏创建一个名为__mod_pci_device_table的局部变量,指向struct pci_device_id数组。在稍后的内核

         构建过程中,depmod程序在所有的模块中搜索符号__mod_pci_device_table。如果找到了该符号,它

         把数据从该模块中抽出,添加到文件/lib/modules/KERNEL_VERSION/modules.pcimap中。当depmod

         结束之后,内核模块支持的所有PCI设备连同它们的模块名都在该文件中被列出。当内核告知热插拔系

         统一个新的PCI设备已经被发现时,热插拔系统使用modules.pcimap文件来寻找要装载的恰当的驱动程

         序。

2.2 USB设备

      对于USB设备,可以使用下面宏进行struct usb_device_id结构体的初始化:

     USB_DEVICE(vendor, product)

       创建一个struct usb_device_id结构体,仅和指定的制造商和产品ID值相匹配。

         USB_DEVICE_INFO(class, subclass, protocol)

         创建一个struct usb_device_id结构体,仅和USB设备的指定类型相匹配

    例如:

static struct usb_device_id usb_example[] = {

        {USB_DEVICE(USB_VENDOR_ID, USB_PRODUCT_ID)},

        {0,}

};

MODULE_DEVICE_TABLE(usb, usb_example);

        通过MODULE_DEVICE_TABLE宏,用户空间的热插拔和模块装载系统知道什么驱动模块针对什

么硬件设备。

转载地址:http://ylsci.baihongyu.com/

你可能感兴趣的文章
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>