PCIE应用程序编程,首先就要理清PCIE BAR空间到底说的是什么。在PCIE配置空间里,0x10开始后面有6个32位的BAR寄存器,BAR寄存器中存储的数据是表示PCIE设备在PCIE地址空间中的基地址,注意这里不是表示PCIE设备内存在CPU内存中的映射地址,关于这两者的关系以及两者如何转换后面会有介绍。

1,BAR寄存器的数据格式,BAR寄存器表示的设备存储类型有memory space BAR和IO space BAR两种,

对于memory space BAR,数组格式如下面所示

31-----------------------------------4 |        3           |     2-1     |       0

16-Byte aligned Base Adress   prefetchable    Type   always 0

对于IO space BAR,数组格式如下所示

31-----------------------------------2 |      1      |     0

4-Byte Aligned Base Address    reserve   always 0

对于memory space BAR的16-Byte aligned Base Address 这里的Base Address代表的是16个byte数据的地址

对于IO space BAR的4-Byte aligned Base Address这里的BaseAddress代表的是4个byte数据的地址

2,BAR寄存器数据的初始化

BAR寄存器的数据是怎么初始化,由谁进行初始化的?因为初始化的数据是PCIE设备所在的总线域的地址空间,所以肯定不会是EP自己进行初始化,因为如果这样EP是不知道其他PCIE设备对应的总线地址空间的,所以可能会引起总线地址空间的冲突,所以BAR寄存器的初始化是由内核进行初始化的,在系统开机时,内核会遍历查找哥哥PCIE设备,然后为PCIE设备分配对应的总线地址空间。

3,BAR寄存器存储的总线地址和应用程序内存地址的关系

BAR寄存器存储的总线地址,应用程序是不能直接利用的,应用程序首先要做的就是读出BAR寄存器的值,然后用mmap函数建立应用程序内存空间和总线地址空间的映射关系。这样应用程序往PCIE设备内存读写数据的时候,直接利用PCIE设备映射到应用程序中的内存地址即可。但是应用程序的内存地址该由谁解析到PCIE设备对应的总线空间给EP呢,这个工作是由北桥或者是RC(root complex)来完成的,解析到总线地址空间之后,EP会把总线的地址空间解析成PCIE设备对应的设备内存地址。

PCIE BAR空间相关推荐

  1. PCIe实践之路:BAR空间和TLP

    上一篇文章中写到每个PCIe的function都有自己的configuration space,其实就是配置寄存器了(这个当然是要有的了,不然软件要怎么玩?只不过PCIe的配置寄存器要通过tlp才能去 ...

  2. PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换

    PCIe to AXI Translation--PCIe 内存空间到AXI内存空间的转换 UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功 ...

  3. vxworks issue: PCIE Bar Base Address Unalignment

    文章目录 1. 问题现象 2. 分析过程 Step 1. 排查网卡驱动(vxbGei825xxEnd.c) Step 2. 综合分析(相关知识) Step 3. 排查PCIE物理地址和CPU物理地址转 ...

  4. Linux(debian7)操作基础(三)之PCI/PCI-E设备配置空间

    ⑴ 概念 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间.PCI/PCI-E设备的正常运行, ...

  5. 7.PCIE配置空间读写软件

    软件-7.PCIE配置空间读写 软件-7.PCIE配置空间读写 软件-7.PCIE配置空间读写 软件读写配置空间 驱动层接口 原理分析 驱动层代码接口 驱动层接口与原理 相关参考 基础知识 raw_p ...

  6. PCI设备BAR空间的初始化

    在PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的Base.Limit寄存器.系统软件使用DFS算法对PCI总线进行遍历时,完成这些寄存 ...

  7. PCIe配置空间和PCI设备中的寄存器

    1.访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在<linux/pci.h> int pci_read_config_byte(struct pci_dev *pd ...

  8. pcie读写ddr_一文详解PCIe内存空间到AXI内存空间的转换

    UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功能的IP核都会有一页设置为PCIe:BARs,设置IP核的Base address regi ...

  9. 1x pcie 速度_利用起闲置的PCIe 1x空间:PCIe 1x的SATA扩展卡,内置2.5寸盘位

    拼 命 加 载 中 ... 随着M.2接口逐渐占据主流,很多主流级主板都不会像以前那样给上8个SATA接口了,而且在M.2接口被占用时还可能会关闭掉几个SATA接口,这让有较多SATA存储设备的用户比 ...

最新文章

  1. jquery中如何以逗号分割字符串_百度知道
  2. mysql 最小时间 最大时间_leetcode539_go_最小时间差
  3. Acwing第 30 场周赛【完结】
  4. MYSQL多表查询与事务
  5. 数据库系统原理(第三章数据库设计 )
  6. mipi协议_MIPI物理层一致性测试:D-PHY一致性测试
  7. GROOVY简单语法实习
  8. ArcGIS AddIN异常:无法注册程序集 未能加载文件或程序集ESRI.ArcGIS.Desktop.Addins
  9. 关于3Q大战和反垄断
  10. html表白代码大全_100条代码,拿去“表白”
  11. Elsevier 模板 Latex参考文献按引用顺序排列
  12. open source Lrc歌词解析器发布
  13. Git Commit failed with error The Git process exited with the code -1,073,741,819
  14. 基于RiskPariyBlackLitterman的因子择时
  15. 阿里云服务器受攻击总结
  16. Go中的MPG模式解析
  17. OPPO出货量超越苹果跻身全球第四,直逼小米
  18. 面试mysql之SQL优化总结一:索引的使用
  19. 【开发必备】快来收藏!涵盖日常开发中所需要的60多个正则验证!!
  20. Markdown做笔记或写博客

热门文章

  1. 如果CRC等于炒鸡蛋,那么...
  2. 感觉没有学会什么真正的本领
  3. 测试RDA5807收音机模块
  4. kubernetes相关概念
  5. dwa的区别 teb_teb_local_planner安装及使用
  6. python自学第8天字典_python自学日记7——字典
  7. 火星浏览器_「超详细Filecoin矿工手册」IPFS的应用以及意义 | 火星号精选
  8. 用计算机打印相片怎么调色,2018年底照片如何使用LOG模式进行调色
  9. 关于automake 和 makefile 使用感受
  10. 在html游戏里添加计时,如何在计时器上运行后台任务 (HTML)