Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76251
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 31
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-14 23:13
文章分类

全部博文(66)

文章存档

2015年(38)

2014年(28)

分类: LINUX

2015-02-15 13:38:49

原文地址:struct pci_device_id 作者:intentness

struct pci_device_id {
 __u32 vendor, device;  /* Vendor and device ID or PCI_ANY_ID*/
 __u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */
 __u32 class, class_mask; /* (class,subclass,prog-if) triplet */
 kernel_ulong_t driver_data; /* Data private to the driver */
};
1、 vendor  (厂商号)这个寄存器标识一个硬件制造商,例如,每个Intel的设备都标有相贩供应商号, 0x8086, 这样的号有一个全球注册,由PCI特别利益体所维护, 并且供应商必须申请有一个唯一的分配给它们的编号
 
2、device  (设备号) 这个寄存器,由供应商选择。
 
3、subvendor  (子厂商号)  如果驱动可处理任何类型的子系统ID, 值PCI_ANY_ID应该用于设置此域
 
4、subdevice  (子设备号)  如果驱动可处理任何类型的子系统ID, 值PCI_ANY_ID应该用于设置此域 
 
5、class      (类别)      如果驱动可处理任何类型的子系统ID, 值PCI_ANY_ID应该用于设置此域
 
6、class_mask  (类别掩码)  如果驱动可处理任何类型的子系统ID, 值PCI_ANY_ID应该用于设置此域
 
7、driver_data  (私有数据)
 
再介绍两个宏定义用来初始化struct pci_device_id
 
PCI_DEVICE(vendor, device)   :   这个创建一个 struct pci_device_id, 它匹配特定的供应商和设备ID,这个宏设置这个结构的子供应商和子设备号为PCI_ANY_ID
 
PCI_DEVICE_CLASS(device_class, device_class_mask)   : 这个创建一个struct pci_device_id它匹配一个特定的PCI类。
 
另外,一个重要的宏
 
MODULE_DEVICE_TABLE   : 用于将pci_device_id结构输出到用户空间,来允许执插拔各模块加载系统知道什么模块使用什么硬件设备。示例:
MODULE_DEVICE_TABLE(pci, i810_ids);
这个语解码器创建一个局部变量称为__mod_pci_device_table,它指向struct pci_device_id的列表,稍后在内核建立过程中  depmod程序在所有的模块中录找__mod_pci_device_table.如果找个这个符号,它将数据拉出模块并添加到文件/lib/modules/KERNEL_VERSION/modules.pcimap.  在depmod完成后,所有的被内核对中的模块支持的PCI设备被列出,带有它们模块名子,在那个文件中,当内核告知热插拔系统有新的PCI设备已找到,热插拔系统使用modules.pcimap文件来找到正确的驱动来加载。
 
 
阅读(831) | 评论(0) | 转发(0) |
0

上一篇:mmap函数

下一篇:virtio设备中断分析

给主人留下些什么吧!~~