linux – 如何通过mmap映射内存指针立即刷新?
在双ARM处理器系统上使用/ dev / mem与mmap(确切地说是Xilinx Zynq)时,我遇到了一个似乎是缓存问题的问题.我的配置是asymmettric,一个处理器运行
Linux,另一个处理器运行裸机应用程序.它们通过不在Linux虚拟内存空间中的RAM块进行通信(它被devicetree文件排除).当我的用户空间Linux应用程序使用从mmap()返回的指针写入内存时,第二个处理器可能需要100毫秒到超过一秒的时间来检测更改的内存内容.
在对/ dev / mem的open()调用中,我尝试指定O_RDRW,O_SYNC和O_DIRECT,但是O_DIRECT导致open失败,所以我删除了O_DIRECT.我认为O_SYNC应该保证在write()调用返回之前将数据写入内存,但是我使用的是内存指针,而不是通过write()写入.我没有在mmap()调用上看到任何似乎解决缓存问题的参数. 我在写入内存后尝试调用fsync(fd)和fdatasync(),但这并未改变行为. DID似乎工作的是在内存写入后立即生成此命令: 通过映射内存指针立即刷新的最简单方法是什么? 解决方法
fsync等都将存储器映射区域与后备块设备(例如,文件)同步.
它们不会影响CPU数据缓存.您将需要使用显式缓存清理调用将CPU缓存刷新到DRAM,否则您将不得不使用ACP端口. ACP端口应该是缓存一致的,但我从来没有让它工作. 以下是flush the cache的答案.我相信代码需要放入您的设备驱动程序中.我们将该代码打包在通用“portalmem” driver中.它使您的应用程序能够分配您可以与硬件共享的内存,并且它提供了一个ioctl,用于在应用程序写入缓存后刷新缓存. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 为一个帐户创建多个SFTP用户
- linux – 如何获取连接到本地网络中NFS服务器的客户端列表?
- linux – 如何从ubuntu上的archive / zip手动安装eclipse-C
- linux – 实时git diff
- linux – 如何避免“没有这样的文件或目录”`make clean` M
- Kubernetes:NFS与StatefulSets
- linux – 使用ACL权限将文件迁移到另一台服务器
- ssh – tmux流量控制
- stdio文件描述符(stdin,stdout,stderr)是否只能从#include中
- 解决SecureCRTPortable和SecureFXPortable的中文乱码问题
- linux – 是否有一个可以与Exchange 2007一起使用
- paste命令_Linux paste命令:合并(拼接)文件
- memory-management – 从内核模块更改用户空间内
- linux – Git检索分支中修改的所有文件的列表
- 在Linux - Centos上安装Python3(下)
- linux – 如何在Ubuntu上执行中央主目录和用户帐
- .net – 我可以在Mono / Linux上使用Visual Stud
- linux – 硬件和软件负载平衡器有什么区别?
- linux – com.sun.tools.attach.AttachNotSuppor
- Ifconfig- Linux必学的60个命令