PCI内存访问的奇怪问题

发布于 2022-09-22 12:30:22 字数 204 浏览 8 评论 0

PCI内存空间事先通过mmap()系统调用映射到了用户空间的BufPci,在应用程序中,我在将一个Buf中的数据拷贝到PCI设备内存空间BufPci后,紧接着从BufPci读出来跟原数据Buf中对比发现部分数据变了,很可能是cache一致性问题引起的,我将这两个指针都定义为volatile类型也不能解决问题,mmap()系统调用好像没有mmap_nocache()这种版本吧?不知怎么解决,希望得到高手指点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

把昨日还给我 2022-09-29 12:30:22

你说的“PCI内存空间”指什么,是指从设备上映射到内存中的地址吗?这个是否cache和mmap没什么关系吧,而是映射时BAR寄存器里的值确定的。

长亭外,古道边 2022-09-29 12:30:22

就是PCI设备上的内存,我发现逐字节拷贝会出现数据不一致现象,逐字(4字节)拷贝就没问题了,还没弄清楚什么原因。
发现一个问题,就是逐字拷贝之前把字节序颠倒(PPC CPU是大端,PCI小端)再写入,写完后读出发现跟原始数据竟然也是一致的,为什么字节swap不起作用呢?

现在在驱动中用get_free_pages()为一个PCI设备分配了一段内存,作为与该PCI设备通信的共享内存,现在的问题是该PCI设备访问这段内存时候就会死机,应该是这段共享内存的访问属性设置有问题,不知道怎么设置这样分配出来的内存的属性,函数get_free_pages()参数用__DMA_GFP也不行,不知是否应该用其他内存分配函数。请高人指点一下

蓝眼睛不忧郁 2022-09-29 12:30:22

用pci_alloc_consistent()分配不到64K的空间也不行,老是不成功,oops

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文