关于X86内存PCI总线地址

Happy_Enger 2020-10-23 10:16:49
想请教一下大神们,X86内存控制器是PCI设备,作为另一个PCI设备如果想DMA读写内存,应该如何获取内存控制器的PCI总线地址?还是说有其他方法实现。
...全文
44728 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kyph 2020-11-19
  • 打赏
  • 举报
回复
如果你要自己指定用于dma内存,就要翻看该CPU的pcie host关于upstream地址翻译过程,在某些CPU上pci地址经过upstream地址翻译后就是CPU物理地址,但也有不是的。 你可以尝试着用dma分配函数自己去计算CPU物理地址和pci mem地址的映射关系。
Happy_Enger 2020-11-19
  • 打赏
  • 举报
回复
我已经实验好了。直接从0 映射了20G. X86 物理内存的物理地址包含在这里面。
Happy_Enger 2020-11-14
  • 打赏
  • 举报
回复
引用 3 楼 KY 的回复:
物理内存的pci地址,就是该函数返回的总线地址。CPU平台软件已经做好了
哥是飞腾的吗……我们的pcie 板卡有合作呀。
Kyph 2020-10-28
  • 打赏
  • 举报
回复
物理内存的pci地址,就是该函数返回的总线地址。CPU平台软件已经做好了
Happy_Enger 2020-10-26
  • 打赏
  • 举报
回复
引用 1 楼 KY 的回复:
内核的dma缓冲区分配函数,会有两个返回 1)函数返回,返回该缓冲的CPU地址 2)指针参数,总线地址,返回该缓冲的PCI总线地址
我的意思是,一个pcie设备与内存直接通信了,已经不需要cpu去参与了。pcie ep端驱动需要建立outbound映射,映射地址就是物理内存的pci域的地址,这个地址我不知道怎么获取。你说的这个接口只能随机分配一段,不能访问全部物理内存。
Kyph 2020-10-26
  • 打赏
  • 举报
回复
内核的dma缓冲区分配函数,会有两个返回 1)函数返回,返回该缓冲的CPU地址 2)指针参数,总线地址,返回该缓冲的PCI总线地址

1,319

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧