在异构 Linux 系统中从共享内存创建虚拟文件系统

问题描述

我正在开发一个带有 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”并获取最新的测量结果。

  1. 将数据从共享物理地址映射到用户空间文件的最快(轻量级)方法是什么?
  2. 确定我必须为 VFS 实现打开/读取功能,是否有一个快速示例/项目可以遵循?

解决方法

您可能希望查看 FUSE(用户空间中的文件系统)。它是一个文件系统驱动程序(默认随许多 Linux 发行版一起提供),允许您mount 由普通的非特权应用程序/进程提供的虚拟文件系统。
(想想 NFS,但它是本地的 - 它不限于 NFS 协议。有安装远程 SFTP 服务器的现有 FUSE 解决方案,如果我记得的话,甚至还有一个将维基百科作为文件/目录结构呈现......)

有适用于多种语言的绑定和库 - 有一个 example in Python 显示使用它实现虚拟文件系统是多么容易。

听起来您可能正在使用 C/C++,在这种情况下,您可能需要 libfuse(链接的官方示例代码)。有一个看起来很简单的 C tutorial over on Medium

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...