免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 冬瓜头

[硬件及驱动] 关于PCIE、主桥、BAR、驱动、MMU、IOMMU、地址翻译 [复制链接]

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2013-12-25 10:50 |显示全部楼层
回复 30# 冬瓜头

我想前面已经解释的很清楚了吧。。。。

关于cpu怎么访问pci设备和pci设备怎么访问主存,你看看

http://blog.sina.com.cn/s/blog_6472c4cc0100qf9f.html

1.3.3和1.3.4

至于cpu怎么将cpu域物理地址转换为pci域地址,这些是coherent dma mapping和streaming dma mapping函数的工作。

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:49:45IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2013-12-25 10:58 |显示全部楼层
asuka2001 发表于 2013-12-25 10:50
回复 30# 冬瓜头

我想前面已经解释的很清楚了吧。。。。


ok,那回头我自己总结好了。多谢

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2013-12-25 12:50 |显示全部楼层
回复 32# 冬瓜头



相信这张图也应该对你理解有帮助。

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:49:45IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2013-12-25 13:26 |显示全部楼层
本帖最后由 冬瓜头 于 2013-12-25 13:26 编辑
asuka2001 发表于 2013-12-25 12:50
回复 32# 冬瓜头


看过,每个点似乎都理解,但是串起来就发现需要包揽很多分支进来,是个动态链接过程,得搞清楚。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2013-12-25 18:26 |显示全部楼层
回复 21# humjb_1983


    虽然电子版是有的,但是怎么也得买本再下吧。对于佩服的技术人至少对起劳动成果表示下尊重。况且这本书的价格相对与那些XXX驱动的书厚道太多了。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2013-12-25 19:48 |显示全部楼层
asuka2001 发表于 2013-12-25 09:26
回复 18# tempname2

看到过有说ppc上的pci设备可以不允许访问所有的物理内存的,由inbound,outbound寄存器决定。请教下是不是真的?

如果是这样的话,写驱动时岂不是还不能随意分配dma buffer,还是说ppc上的dma_map_page会对这种情况作处理,使用bounce buffer?


王齐说的是freescale的嵌入式PowerPC,我并不清楚。但驱动本来就应该调用平台提供的标准接口来分配DMA内存。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2013-12-25 20:01 |显示全部楼层
冬瓜头 发表于 2013-12-25 09:53
搜了一些材料,有了IOMMU之后,DMA主存就很学院派了,之前确实乱七八糟,任何外设可以无限制访问任何物理内存,有人就发明了dma attack。个人理解,有了iommu,外设看到的也是各自的虚拟空间,也有权限管理了,驱动申请用于dma的内存要调用iommu接口了。


那个倒未必,据我所知x86上除了做PCI passthrough外基本没有用IOMMU。内核里的iommu接口目前只见过用在这上面,即用在KVM与VFIO中。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
发表于 2013-12-26 08:47 |显示全部楼层
smalloc 发表于 2013-12-25 18:26
回复 21# humjb_1983

呵呵,帅哥说的很对,主要是个人习惯先看电子版,一来得先了解下主要内容,二来方便随时查阅。读者认可的话,花钱买本书应该还是舍得的,从作者的博客看,本书的所有内容也都是开放的,也表现出了相当的自信。个人愚见和习惯,勿见怪~~

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:49:45IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2013-12-27 12:25 |显示全部楼层
tempname2 发表于 2013-12-25 20:01
那个倒未必,据我所知x86上除了做PCI passthrough外基本没有用IOMMU。内核里的iommu接口目前只见过用在 ...


受教了。。如果x86当前常规不用iommu,那么是不是可以理解驱动只要自行申请了内存,就可以让外设访问了,驱动是不是必须使用dma内存特定的接口来申请内存? OS内核是否有显式的保存有PCIE空间到主存空间的映射关系,还是默认1:1映射?

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2013-12-27 12:46 |显示全部楼层
本帖最后由 asuka2001 于 2013-12-27 12:55 编辑

回复 39# 冬瓜头

pci设备访问内存,主体是设备,不需要你驱动先去分配,也不受os控制。你告诉它访问pci域地址 + size,如果映射的是cpu域的主存,那么访问的就是主存;如果映射的是其他pci设备的mmio,那就是访问其他pci设备。

正是为了让pci设备访问cpu域的主存,所以你才需要调用dma mapping系列函数,以获取到cpu域特定主存区域的pci域地址。因果关系请注意。

更准确的说:是为了让 pci设备按照我们的需求去访问主存,所以我们才需要驱动去分配,map。。。。pci设备不是不能,而是我们不允许它随意访问主存。

x86上或者说大部分体系结构上是做的1:1映射。

从cpu --> pci,这个需要设置北桥芯片,让北桥知道哪些访问是应该递交给pci host bridge或者 pcie root complex,不然到底访问主存还是访问pci,北桥怎么知道。

而从pci --> 内存,那就直接由pci host bridge或者 pcie root complex把访问请求递交给memory controller。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP