【发布时间】:2021-04-11 09:47:44
【问题描述】:
我正在开发一个带有 2 个 CPU 和一个共享内存的测量设备:
=>[ CPU:0 RTOS/Measurements ] [ CPU: 1 Linux/User]
\ / |
\[ Shared Memory ]/ |
struct HotData /measure
{ int x; -> /x
char[20] y; -> /y
long z; }; -> /z
目前,我有一个共享内存,CPU-0 在其中测量一些数据并循环更新结构“HotData”。我不想接触 CPU-0 上的代码以获得实时限制。另一方面,Linux 内核可以访问这个共享空间并读取最新的数据。
接下来,我想在 Linux 上创建一个“超轻量级”的虚拟文件系统来将这些数据字段映射到一个文件。因此,任何用户应用程序/脚本都可以轻松访问“/measure/x”并获得最新的测量结果。
- 将数据从共享物理地址映射到用户空间文件的最快(轻量级)方法是什么?
- 确定我必须实现 VFS 的打开/读取功能,是否有一个快速示例/项目可供参考?
【问题讨论】:
-
最快的方法实际上是不做文件系统,而是做一个
mmap("/dev/mem , physical address of shared region);假设这是在 I/O 映射内存中。 -
感谢@HaltState,但我怎样才能从 /dev/mem 中公开不同的文件。就像在我的示例中一样 /dev/mem[0:3] -- 映射到 --> /dev/mem/x
-
您不会有隔离 - 例如,您无法保护 x 与 y 与 z。相反,当您映射 /dev/mem 时,您将 4KB 的物理空间页面映射到用户空间。然后用户代码通过偏移量访问 x、y 和 z。
-
正确。更好的是,对于只读页面,不需要隔离。但是对于我的用户来说,通过偏移量访问还不够直观。如何将虚拟文件映射到这些偏移量?没有性能开销..
标签: c embedded-linux mmap