问题描述
我正在开发一个带有 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 实现打开/读取功能,是否有一个快速示例/项目可以遵循?
解决方法
您可能希望查看 FUSE(用户空间中的文件系统)。它是一个文件系统驱动程序(默认随许多 Linux 发行版一起提供),允许您mount
由普通的非特权应用程序/进程提供的虚拟文件系统。
(想想 NFS,但它是本地的 - 它不限于 NFS 协议。有安装远程 SFTP 服务器的现有 FUSE 解决方案,如果我记得的话,甚至还有一个将维基百科作为文件/目录结构呈现......)
有适用于多种语言的绑定和库 - 有一个 example in Python 显示使用它实现虚拟文件系统是多么容易。
听起来您可能正在使用 C/C++,在这种情况下,您可能需要 libfuse
(链接的官方示例代码)。有一个看起来很简单的 C tutorial over on Medium。