gpt4 book ai didi

c - 如何从 linux 用户空间进行数据缓存刷新/失效

转载 作者:行者123 更新时间:2023-12-03 21:37:05 24 4
gpt4 key购买 nike

尝试在 linux 用户空间中使用可缓存的映射缓冲区。这些缓冲区将被加速器访问。
在 ARMv7-A 架构中,是否有可能从 linux 用户空间显式刷新/无效数据缓存?

试过__clear_cache(),没用。根据网址 https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html ,我的理解是它只刷新指令缓存。

用户空间应用程序运行在用户模式下,我们是否需要为缓存操作设置任何特权模式权限。

更多信息会有所帮助。

最佳答案

如果不编写内核驱动程序(例如允许您执行 ioctl 的简单 misc 类驱动程序),则无法从用户空间(内核 <= 5.13.x)刷新 ARMv7-A/ARMv8-A 处理器缓存。或 sysfs导致驱动程序调用内核 API arch_sync_dma_for_device 的操作对于您要刷新的 RAM 区域。

#include <linux/dma-noncoherent.h>
arch_sync_dma_for_device 的函数原型(prototype).
因此,除非您的项目后勤工作允许您向系统添加内核模块或重建和替换内核,否则您无法从用户空间应用程序中刷新处理器缓存。对于具有现场产品的遗留项目,或者内核版本被数字签名锁定的项目,物流通常不支持这种类型的侵入性解决方案。
我已经成功演示了这样一个 misc 驱动程序,它可以刷新 IPQ ARMv8a 实现上的处理器缓存,以用于新产品设计。司机花了我大约两个小时来编写和测试。

关于c - 如何从 linux 用户空间进行数据缓存刷新/失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com