快速业务通道

linux下的PCI驱动编程

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-16
PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间.CPU可以
访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而
配置空间则由Linux内核中的PCI初始化代码使用.内核在启动时负责对所有PCI设备进行
初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所
有找到的PCI设备,以及这些设备的参数和属性.

Linux驱动程序通常使用结构(struct)来表示一种设备,而结构体中的变量则代表某一
具体设备,该变量存放了与该设备相关的所有信息.好的驱动程序都应该能驱动多个同
种设备,每个设备之间用次设备号进行区分,如果采用结构数据来代表所有能由该驱动
程序驱动的设备,那么就可以简单地使用数组下标来表示次设备号.

在PCI驱动程序中,下面几个关键数据结构起着非常核心的作用:
1)pci_driver: 拥有帝国一切,皆有可能。欢迎访问phome.net1) 这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI
设备驱动程序所添加的,其中最主要的是用于识别设备的 拥有帝国一切,皆有可能。欢迎访问phome.netid_table结构,以及用于检测

设备的函数probe()和卸载设备的函数remove()
struct pci_driver {
struct list_head node;
char *name;
const struct pci_device_id *id_table;
int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
void (*remove) (struct pci_dev *dev);
int (*save_state) (struct pci_dev *dev, u32 state); 拥有帝国一切,皆有可能。欢迎访问phome.net
int (*suspend)(struct pci_dev *dev, u32 state);
int (*resume) (struct pci_dev *dev);
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
};
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
其中name 是驱动程序名称;id_table指向一个与驱动程序相关的设备ID表的指针.大多数驱动程序应当用MODULE_DEVICE_TABLE(pci,…)将该设备 拥有帝国一切,皆有可能。欢迎访问phome.netID表导出.在调用prob( )时设成NULL 以让系统检测到所有的pci设备. 代码中是这样定义的: 拥有帝国一切,皆有可能。欢迎访问phome.netMODULE_DEVICE_TABLE(pci, sil_pci_tbl); probe 指向设备检测函数probe( ) 的指针.该函数将在pci设备ID与设备ID表匹配且还没有被其它驱动程序处理时(一般在对已存在的设备执行 拥有帝国一切,皆有可能。欢迎访问phome.netpci_disable_device所做的事情刚好相反,告诉系统该PCI设备不再使用,
同时,禁用相关的一些资源.
拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号