前言:学习了PCIe设备端驱动之后并做了一个项目之后,有了很多疑惑。疑惑主要来自于,由于没有深入学习PCIe体系结构,所以总线从上电开始做的一系列工作对于我来说都是黑盒。设备端只是用几个简单的API就搞定,所以稍微复杂一点的映射关系就看不懂。所以学习了下PCIe体系结构,解答了以下几个疑惑。
问题1:为什么需要dma buffer地址映射。AMTU寄存器的作用。
问题2:可不可以用bar空间实现dma buffer
回答问题1先要搞明白“域”的概念,在PCIe通信链路上,其实存在着:存储器域、pcie总线域。
PCIe HOST主桥是一个很特别的桥片,其主要功能是隔离存储器系统的存储器域和处理器系统的PCI总线域,管理PCI总线域,并完成处理器与PCI设备间的数据交换。
那么有人就要问了,这跟为什么需要dma buffer地址映射有什么关系。其实这个dma地址映射就是存储器域到pcie总线域的映射的一种表现形式呀,下面我们来聊一聊。
dma buffer是在哪里开辟的?
答:一般是pcie驱动里开辟的,使用dma_alloc_coherent,返回虚拟地址。需要注意的是,这段地址在内存里属于CPU能直接访问到的存储器域,下面处理器需要将存储器域中的dma buffer 地址空间映射到pci总线的地址空间也就是pcie总线域。
有必要做这一步吗?
&

&spm=1001.2101.3001.5002&articleId=145835268&d=1&t=3&u=7a8573c7386c48ad8c7d52af79b387a8)
1555

被折叠的 条评论
为什么被折叠?



