当前位置: 首页 > news >正文

PCIE BAR空间

 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设备对应的设备内存地址。

转载:http://blog.csdn.net/buyi_shizi/article/details/51068609

相关文章:

  • HDU5115:Dire Wolf——题解+翻译
  • JS常用代码
  • [iOS]中字体样式设置 API
  • 20个Jquery表单插件
  • MAC上Git安装与GitHub基本使用
  • ORACLE -- RAC Debug 之路 CRS-0184错误与CRS初始化
  • chrome插件控制台
  • 英特尔研发神经元AI处理器,模仿大脑功能,无需训练数据集
  • android 里使用Socket进行发送消息案例
  • 进程间通信基础知识
  • 解决Please check that your locale settings
  • 15.4. 内容监控
  • 汇编语言笔记04-第一个程序
  • 阿里云聆听平台使用有感
  • 今晚测试了下微信的摇一摇传图
  • Idea+maven+scala构建包并在spark on yarn 运行
  • leetcode-27. Remove Element
  • Linux Process Manage
  • magento2项目上线注意事项
  • Mysql数据库的条件查询语句
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • spring boot下thymeleaf全局静态变量配置
  • Tornado学习笔记(1)
  • vue自定义指令实现v-tap插件
  • 编写高质量JavaScript代码之并发
  • 初识 webpack
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 目录与文件属性:编写ls
  • 入口文件开始,分析Vue源码实现
  • 最近的计划
  • Spring第一个helloWorld
  • 进程与线程(三)——进程/线程间通信
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​插件化DPI在商用WIFI中的价值
  • ​马来语翻译中文去哪比较好?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #13 yum、编译安装与sed命令的使用
  • #Ubuntu(修改root信息)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (23)Linux的软硬连接
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (九)信息融合方式简介
  • (四) 虚拟摄像头vivi体验
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net framework 4.0中如何 输出 form 的name属性。