基于MIPS的Linux内核PCI子系统分析

基于MIPS的Linux内核PCI子系统分析

ID:36644755

大小:469.65 KB

页数:30页

时间:2019-05-13

基于MIPS的Linux内核PCI子系统分析_第1页
基于MIPS的Linux内核PCI子系统分析_第2页
基于MIPS的Linux内核PCI子系统分析_第3页
基于MIPS的Linux内核PCI子系统分析_第4页
基于MIPS的Linux内核PCI子系统分析_第5页
资源描述:

《基于MIPS的Linux内核PCI子系统分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于MIPS的Linux内核PCI子系统分析—PCI总线枚举内核源代码版本:2.6.36代码流程的分支:基于MIPS下的loongson分支说明:本文档的是结合网上现有的PCI分析的文档加上自己的一些理解得到的,并非全部是本人自己的劳动成果。在此,感谢各位网络大虾的努力和share。Version:V0.1Author:leewg一、PCI基础PCI是PeripheralComponentInterconnect的缩写,它因为高性能、低成本以及良好的扩展

2、性而在计算机系统中被广泛使用。上至服务器,下至嵌入式设备都能找到它的身影。图1显示了一个标准PCI总线的组织结构图。图1标准PCI总线的组织结构图从图中我们可以看出PCI总线架构主要被分成三部分:1、PCI设备。符合PCI总线标准的设备就被称为PCI设备,PCI总线架构中可以包含多个PCI设备。图中的Audio、LAN都是一个PCI设备。PCI设备同时也分为主设备和目标设备两种,主设备是一次访问操作的发起者,而目标设备则是被访问者。2、PCI总线。PCI总线在系统中可以有多条,类似于树状结构进行扩展,每

3、条PCI总线都可以连接多个PCI设备/桥。上图中有两条PCI总线。3、PCI桥。当一条PCI总线的承载量不够时,可以用新的PCI总线进行扩展,而PCI桥则是连接PCI总线之间的纽带。图中的PCI桥有两个,一个桥用来连接处理器、内存以及PCI总线,而另外一条则用来连接另一条PCI总线。PCI总线操作PCI总线操作表示主设备向目标设备所发起的操作请求,最多有16种类型。主要类型有:IO方式读/写,Memory方式读/写,Configuration方式读/写等。PCI配制空间对于软件开发者来说,该如何对PCI

4、设备进行编程呢?PCI总线标准中定义了一套配置空间寄存器用于读取或者设置PCI设备的信息。每个PCI设备/桥都有自己的配置空间寄存器。配置空间共有256字节,设备类型不同,其配置空间的布局也不尽相同。设备类型的区分可以通过配置空间内的HeaderType寄存器(0Eh)进行,该寄存器值为00h表示当前设备是一个PCI设备,01h表示当前设备是一个PCI桥。配置空间的前64字节是配置空间起始段,它对于每种类型的设备都是相同的。显示了PCI设备的配置空间起始段。图2.PCI设备的配置空间起始段图3显示了PC

5、I桥的配置空间起始段。配置空间寄存器有些是只读的,有些是可写的,下面介绍几个在编程时会用到的寄存器。DeviceID和VendorID寄存器这两个寄存器分别存放了设备信息和厂商信息(值在0x0000和0xFFFF之间,但不能取0xFFFF),因此软件开发者可以通过读取这两个寄存器的值,并与0xFFFF比较,从而判断当前设备是否有效。Command和Status寄存器Command寄存器存放了设备的配置信息,比如是否允许Memory/IO方式的总线操作、是否为主设备等。Status寄存器存放了设备的状态信

6、息,比如中断状态、错误状态等。HeaderType寄存器这个寄存器前面曾经提过,它定义了设备类型,比如PCI设备、PCI桥等。BaseAddress寄存器这个寄存器有三个作用。1、该寄存器存放了Memory/IO访问空间的起始地址。2、该寄存器存放了Memory/IO访问空间的大小,这个数据可以通过下面的方式读出:a、往寄存器里写0xFFFFFFFF;b、读出寄存器的值,并取反;c、将上一步的值加上1后就是该空间的大小。3、该寄存器定义了这段地址空间的访问类型(Memory方式还是IO方式)。PCI设备

7、最多有6个BaseAddress寄存器,而PCI桥最多有2个BaseAddress寄存器。SubordinateBusNumber,SecondaryBusNumber和PrimaryBusNumber寄存器这三个寄存器只在PCI桥配置空间中存在,因为PCI桥会连接两条PCI总线,上行的总线被称为PrimaryBus,下行的总线被称为SecondaryBus,PrimaryBusNumber和SecondaryBusNumber寄存器分别存储了上行和下行总线的编号,而SubordinateBusNumb

8、er寄存器则是存储了当前桥所能直接或者间接访问到的总线的最大编号。二、Linux内核对PCI的支持Linux内核(2.6版本)在初始化之初就对所有PCI设备进行了扫描并且配制,具体操作分为下面几个步骤。PCI相关数据结构Linux提供了三类数据结构用以描述PCI控制器、PCI设备以及PCI总线。PCI控制器PCI控制器用pci_controller结构来描述,对于多总线支持系统,它可能有多个PCIcontroller或一个PCIcontro

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。