zoukankan      html  css  js  c++  java
  • 第二篇--PCI设备解析

    介绍:参考

    一个系统上最多有256个PCI总线,每个总线最多有32个设备,每个设备最多有8个功能,每个功能最多有256字节的配置地址空间,所以总的配置地址空间是16M。

    PCI设备有物理设备和逻辑设备之分,一般通过IO访问PCI设备都说的是逻辑设备。只有逻辑设备可以通过IO获取数据。

    一个PCI物理设备是bus号加device号组成。而有的物理设备可以有多个功能,因此又以function号进行区分。

    一个PCI逻辑设备可以由bus号,device号,function号唯一确定。这三个参数构成PCI设备标识符。

    实际存在的设备是物理设备,可以访问IO数据的是逻辑设备。比如显卡是一个物理设备,但是它有几个功能,显卡里面就有自带的audio,就是其中的一个逻辑设备。

               Reserved     Bus Num        Device     Func     offset

      || 1 || 000 0000 || 0000 0000 || 0000 0 || 000 || 0000 00 || 00 || 

    所以setVallue的时候

    dwAddr = dwAddr_base + (bus << 16) + (dev << 11) + (func << 8) + (offset << 2);

    设备标识符:

    PCI总线规范定义的配置空间总长度为256个字节,配置信息按一定的顺序和大小依次存放。前64个字节的配置空间称为配置头(如下图所示),对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息)。其余的192个字节称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。

    配置头:

    X86 CPU可以访问存储器或IO地址空间,但不能直接访问配置地址空间。CPU通过主桥(北桥或MCH)中的一个IO映射的地址端口和数据端口间接访问PCI配置空间。该地址端口位于IO空间CF8h~CFBh,而数据端口映射到CFCh~CFFh。

    CF8h: CONFIG_ADDRESS   PCI配置空间地址端口。
    CFCh: CONFIG_DATA        PCI配置空间数据端口。
     
    由于在Windows下有保护模式,不能直接访问底层,运行程序时以管理员的身份运行。
    直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator确定,再次运行程序会弹出一个对话框
    选择什么凭证重启VS即可。
  • 相关阅读:
    Java学习之路(三)--Thinking in Java
    Java学习之路(二)--Thinking in Java
    Java学习之路(一)--Thinking in Java
    ES6中y修饰符合u修饰符
    map数据结构
    Set数据结构
    不确定参数的处理
    函数参数的默认值
    class基础语法
    生成新数组的方法和在数组中查找
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/10671280.html
Copyright © 2011-2022 走看看