PCie驱动综述分析.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《PCie驱动综述分析.pdf》由会员分享,可在线阅读,更多相关《PCie驱动综述分析.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PCie 驱动Pcie 设备上有三种地址空间:PCI 的 I/O 空间、PCI 的存储空间和 PCI 的配置空间。Pce 的配置空间:PCI 有三个相互独立的物理地址空间:设备存储器地址空间、I/O 地址空间和配置空间。配置空间是 PCI 所特有的一个物理空间。由于PCI 支持设备即插即用,所以PCI 设备不占用固定的内存地址空间或 I/O 地址空间,而是由操作系统决定其映射的基址。系统加电时,BIOS 检测 PCI 总线,确定所有连接在 PCI 总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI 设备必须实现配置空间,从而能够实现参数的自动配置,实现真正的即插即用。PCI总线
2、规范定义的配置空间总长度为256个字节, 配置信息按一定的顺序和大小依次存放。前 64 个字节的配置空间称为配置头,对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI 卡的方式(I/O 访问或者存储器访问,还有中断信息)。其余的192 个字节称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。一般来说,基于 pcie 总线的驱动,需要涉及到pci_driverpci_devpci_device_id .pci_device_id : 用于标识pcie设备, 通过上图的厂商Id 设备Id 功能号等 唯一确定一个pcie设备,内核通过这个结构体确认驱动与设备
3、是否匹配。pci_dev : 一般 pcie 设备都具有热拔插功能, 当内核检测到有 pcie 设备插入时, 会与相应的Pci_driver : 当有相应的设备匹配会调用驱动的相关方法,驱动中通常要做的是读出BaseAdrress Register1-6 的值,这是 pcies 设备 6 个内存空间的基地址,然后通过ioremap 方法映射成虚拟地址,至于 6 个内存空间的具体含义需要依赖于设备。在用模块方式实现 PCI 设备驱动程序时,通常至少要实现以下几个部分:初始化设备模块、设备打开模块、数据读写和控制模块、中断处理模块、设备释放模块、设备卸载模块。例如/* 指明该驱动程序适用于哪一些P
4、CI 设备 */static struct pci_device_id demo_ids = PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810E_IG) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_
5、CGC) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845G_IG) , 0, ,;这个 pci_device_id 结构需要被输出到用户空间, 来允许热插拔和模块加载系统知道什么模块使用什么硬件设备. 宏 MODULE_DEVICE_TABLE 完成这个. 例如:MODULE_DEVICE_TABLE(pci, demo_ids);struct demo_card unsigned int magic;/* 使用链表保存所有同类的PCI 设备 */struct demo_card *next;/* . */* 中断处理模块
6、 */static void demo_interrupt(int irq, void *dev_id, struct pt_regs *regs)/* . */* 设备文件操作接口 */static struct file_operations demo_fops = owner:THIS_MODULE,/* demo_fops所属的设备模块 */read:demo_read,/* 读设备操作*/write:demo_write,/* 写设备操作*/ioctl:demo_ioctl,/* 控制设备操作*/mmap:demo_mmap,/* 内存重映射操作*/open:demo_open,/*
7、 打开设备操作*/release:demo_release/* 释放设备操作*/* . */;/* 设备模块信息 */static struct pci_driver demo_pci_driver = name:demo_MODULE_NAME,/* 设备模块名称 */id_table:demo_idsl,/* 能够驱动的设备列表 */probe:demo_probe,/* 设备与驱动匹配时调用remove:demo_remove/* 卸载设备模块 */* . */;3. 初始化设备模块在 Linux 系统下,想要完成对一个PCI 设备的初始化,需要完成以下工作:检查 PCI 总线是否被 L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PCie 驱动 综述 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内