欢迎来到天天文库
浏览记录
ID:36652513
大小:486.56 KB
页数:34页
时间:2019-05-13
《基于MIPS的Linux内核PCI子系统分析系列》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于MIPS的Linux内核PCI子系统分析基于MIPS的Linux内核PCI子系统分析系列—PCI枚举CurrentVersion:V0.1Date:2011-10-31Author:leewg1基于MIPS的Linux内核PCI子系统分析版本作者参与者时间备注0.1LiWengang2011-10-31初始化版本备注:内核源代码版本:2.6.36代码流程的分支:基于MIPS下的loongson分支说明:文档参考了网上的诸多关于linuxPCI的文章,
2、整理而成。存在问题请大家即使指出,共同探讨进步。2基于MIPS的Linux内核PCI子系统分析一、PCI基础PCI是PeripheralComponentInterconnect的缩写,它因为高性能、低成本以及良好的扩展性而在计算机系统中被广泛使用。上至服务器,下至嵌入式设备都能找到它的身影。图1显示了一个标准PCI总线的组织结构图。图1标准PCI总线的组织结构图从图中我们可以看出PCI总线架构主要被分成三部分:1、PCI设备。符合PCI总线标准的设备就被称为PCI设备,PCI总线架构中可以包含多个PC
3、I设备。图中的Audio、LAN都是一个PCI设备。PCI设备同时也分为主设备和目标设备两种,主设备是一次访问操作的发起者,而目标设备则是被访问者。2、PCI总线。PCI总线在系统中可以有多条,类似于树状结构进行扩展,每条PCI总线都可以连接多个PCI设备/桥。上图中有两条PCI总线。3、PCI桥。当一条PCI总线的承载量不够时,可以用新的PCI总线进行扩展,而PCI桥则是连接PCI总线之间的纽带。图中的PCI桥有两个,一个桥用来连接处理器、内存以及PCI总线,而另外一条则用来连接另一条PCI总线。PC
4、I总线操作PCI总线操作表示主设备向目标设备所发起的操作请求,最多有16种类型。主要类型有:IO方式读/写,Memory方式读/写,Configuration方式读/写等。PCI配制空间对于软件开发者来说,该如何对PCI设备进行编程呢?PCI总线标准中定义了一套配置空间寄存器用于读取或者设置PCI设备的信息。每个PCI设备/桥都有自己的配置空间寄存器。配置空间共有256字节,设备类型不同,其配置空间的布局也不尽相同。设备类型的区分可以通过配置空间内的HeaderType寄存器(0Eh)进行,该寄存器值为
5、00h表示当前设3基于MIPS的Linux内核PCI子系统分析备是一个PCI设备,01h表示当前设备是一个PCI桥。配置空间的前64字节是配置空间起始段,它对于每种类型的设备都是相同的。显示了PCI设备的配置空间起始段。图2.PCI设备的配置空间起始段图3显示了PCI桥的配置空间起始段。配置空间寄存器有些是只读的,有些是可写的,下面介绍几个在编程时会用到的寄存器。DeviceID和VendorID寄存器这两个寄存器分别存放了设备信息和厂商信息(值在0x0000和0xFFFF之间,但不能取0xFFFF),
6、因此软件开发者可以通过读取这两个寄存器的值,并与0xFFFF比较,从而判断当前设备是否有效。Command和Status寄存器Command寄存器存放了设备的配置信息,比如是否允许Memory/IO方式的总线操作、4基于MIPS的Linux内核PCI子系统分析是否为主设备等。Status寄存器存放了设备的状态信息,比如中断状态、错误状态等。HeaderType寄存器这个寄存器前面曾经提过,它定义了设备类型,比如PCI设备、PCI桥等。BaseAddress寄存器这个寄存器有三个作用。1、该寄存器存放了M
7、emory/IO访问空间的起始地址。2、该寄存器存放了Memory/IO访问空间的大小,这个数据可以通过下面的方式读出:a、往寄存器里写0xFFFFFFFF;b、读出寄存器的值,并取反;c、将上一步的值加上1后就是该空间的大小。3、该寄存器定义了这段地址空间的访问类型(Memory方式还是IO方式)。PCI设备最多有6个BaseAddress寄存器,而PCI桥最多有2个BaseAddress寄存器。SubordinateBusNumber,SecondaryBusNumber和PrimaryBusNum
8、ber寄存器这三个寄存器只在PCI桥配置空间中存在,因为PCI桥会连接两条PCI总线,上行的总线被称为PrimaryBus,下行的总线被称为SecondaryBus,PrimaryBusNumber和SecondaryBusNumber寄存器分别存储了上行和下行总线的编号,而SubordinateBusNumber寄存器则是存储了当前桥所能直接或者间接访问到的总线的最大编号。5基于MIPS的Linux内核PCI子系统分析二、Linux内核对
此文档下载收益归作者所有