pci总线结构介绍

上传人:go****ng 文档编号:228272880 上传时间:2023-08-21 格式:PPT 页数:17 大小:890KB
收藏 版权申诉 举报 下载
pci总线结构介绍_第1页
第1页 / 共17页
pci总线结构介绍_第2页
第2页 / 共17页
pci总线结构介绍_第3页
第3页 / 共17页
资源描述:

《pci总线结构介绍》由会员分享,可在线阅读,更多相关《pci总线结构介绍(17页珍藏版)》请在装配图网上搜索。

1、pci总线结构介绍pci配置寄存器及读写IO端口和内存pci设备初始化pci驱动注册以及匹配PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其 目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性和行为规约,并且详细定义了计 算机系统中的各个不同部件之间应该如何正确地进行交互。pci总线在x86体系中比较常见,在arm体系的cpu里基本没有pci总线 PCI总线简介 PCI总

2、线简介pcipci域:(域:(1616位)位)总线号:(8位)设备号:(5位)功能号:(3位)总线号、设备号和功能号共同组成pci外设的16位硬件地址。但是由于256个总线对许多大系统是不够的,Linux 现在支持 PCI 域。每个 PCI 域可以占用多达 256 个总线.每个总线占用 32 个设备,每个设备可以是一个多功能卡(例如一个声音设备,带有一个附加的 CD-ROM 驱动)有最多 8 个功能这样,linux系统可以支持更多的pci设备 PCI寻址(物理)(一)pci配置寄存器每个pci设备都有一个私有的至少256字节的地址空间,前64字节是标准的(每个pci设备都有),后面的空间依赖设

3、备来配置。配置寄存器里包含了如下信息:1.此pci设备的设备信息,如厂商id,设备id等2.此设备工作时需要的io地址和mem地址起始地址以及长度3.设备的irq号等(二)配置寄存器的作用1.linux内核启动时会从pci设备的配置寄存器里读取内存/IO起始地址以及irq,并把这些信息赋值给struct pci_dev的相应成员;2.pci驱动也会读写配置寄存器获得/保存设备相关的信息。(三)配置寄存器的初始化系统启动时,BIOS会为每个pci设备分配内存、IO空间以及irq号,并写入相应pci设备的配置寄存器里去。PCI配置寄存器又叫”配置空间“标准标准pcipci配置寄存器配置寄存器此pc

4、i设备用到了几个BAR?应该从哪个bar里读取所需的io地址或内存地址?这些信息是硬件相关的,需要查阅pci设备的datasheet才能得到以上信息读取内存或io地址的函数:unsigned long pci_resource_start(struct pci_dev*dev,int bar);unsigned long pci_resource_end(struct pci_dev*dev,int bar);unsigned long pci_resource_len(struct pci_dev*dev,int bar);bar的取值为05unsigned long pci_resourc

5、e_flags(struct pci_dev*dev,int bar);这个函数返回和这个资源相关联的标识.IORESOURCE_IO:io端口IORESOURCE_MEM:内存 取得设备的io或mem我们知道,外设都是通过读写设备上的寄存器来进行的,外设寄存器也称为“I/O端口”。而IO端口有两种编址方式:独立编址和统一编制。而具体采用哪一种则取决于CPU的体系结构。如,PowerPC、m68k等采用统一编址;而X86等则采用独立编址。对于某一既定的系统,它要么是独立编址,也即“I/O端口”方式,外设寄存器位于“I/O空间”;要么是统一编制,也即“I/O内存”方式,外设寄存器位于“内存空间”

6、。io内存和io端口对于Linux内核而言,它可能用于不同的CPU,所以它必须都要考虑这两种访问方式:1.linux访问IO内存的流程是:request_mem_region()-ioremap()-ioread8()/iowrite8()-iounmap()-release_mem_region()。2.访问IO端口的方式:(1)Linux内核提供了如下一些访问I/O端口的内联函数(这种方法比较常用)unsigned inb(unsigned port);void outb(unsigned char byte,unsigned port);unsigned inw(unsigned por

7、t);void outw(unsigned short word,unsigned port);unsigned inl(unsigned port);void outl(unsigned longword,unsigned port);(2)linux访问io端口的新机制ioport_map()-ioread8()/iowrite8()-ioport_unmap()linxu对io内存和io端口的访问struct pci_dev struct list_head global_list;struct list_head bus_list;struct pci_bus *bus;struct

8、pci_bus *subordinate;void *sysdata;struct proc_dir_entry*procent;unsigned int devfn;/功能号 unsigned short vendor;/厂商号 unsigned short device;/设备号 unsigned short subsystem_vendor;/子厂商号 unsigned short subsystem_device;/子设备号 struct resource resourceDEVICE_COUNT_RESOURCE;struct resource dma_resourceDEVICE_

9、COUNT_DMA;struct resource irq_resourceDEVICE_COUNT_IRQ;struct pci_device_id用来表示驱动支持的设备类型1.bios启动时,会为每个pci设备分配地址和irq等信息,并写入各个pci设备的配置寄存器中。2.linux系统启动时,会探测系统中的所有pci设备,并为探测到的每个pci设备做如下操作:(1)分配一个struct pci_dev结构体,这个结构体表示一个pci设备(2)为这个结构体填充设备vendor id、device id、subvendor id、subdevice id以及地址和irq信息(通过读取pci配置寄存器得到)(3)然后把这个struct pci_dev结构体添加到pci_bus上 linux中pci设备的初始化当调用pci_register_driver(struct pci_driver*drv)时,系统会遍历pci总线上的所有的pci设备,并拿每个pci设备来和驱动进行匹配:pci_bus_match-pci_match_device-pci_match_one_device 驱动和设备的匹配platform驱动和pci驱动异同

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!