# rocket_shm **Repository Path**: azureg/rocket_shm ## Basic Information - **Project Name**: rocket_shm - **Description**: 一个基于dma-buf实现的可靠共享内存机制,它可以在任意退出场景下保持快速的资源回收。 目前这个项目只是一个idea,仍在持续的开发过程中,预计2-3年将其开发完毕。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-18 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README RocketSHM # 项目计划 1. 通过dma-buf机制简单的构建出一个可靠的共享内存通信机制,使其能够支持进程任意的crash而不会产生额外的影响 2. 减少dma-buf在使用过程中不停map/unmap带来的开销,循环使用dma-buf 3. 具备接入ROS生态的能力 # 当前的项目状态 1. 目前处在POC阶段,仅验证了dma-buf跨进程通信的可能性 # 为什么需要这样的一个项目 android生态引入了dma-buf机制开始,这个机制主要用于设备和应用之间的通信(不全是),这有点浪费,这个项目的目的是将其用于应用间的通信。此外/dev/shm共享内存机制不会自动回收,在应用故障的时候总是存在一些corner-case没有漂亮的解决方案,因此引入dma-buf这样基于文件来管理的共享内存,预期获得最好的可靠性。 # 项目构成 1. 项目分为用户态和内核态,用户态提供简易的接口封装 2. 用户态代码通过c++进行编写,通过CMake进行组织 3. 内核态代码位于module目录下,使用C语言进行编写,使用Makefile进行代码组织 # 外部依赖 1. 目前的开发环境是WSL2下的Ubuntu 24.04版本 2. 对应的内核版本是6.6.87.2.microsoft-standard-WSL2,地址是https://github.com/microsoft/WSL2-Linux-Kernel,分支linux-msft-wsl-6.6.y 3. 需要手动下载源码并进行编译UDMA-BUF的内核开关(是的,从零开始去实现一个dma-buf还是太慢了,先复用) 4. 所依赖的内核开关如下 5. 编译指令为 make bzImage -j$(nproc); make modules -j$(nproc);make install;make modules_install; ```shell # # DMABUF options # CONFIG_SYNC_FILE=y # CONFIG_SW_SYNC is not set CONFIG_UDMABUF=y # CONFIG_DMABUF_MOVE_NOTIFY is not set # CONFIG_DMABUF_DEBUG is not set # CONFIG_DMABUF_SELFTESTS is not set CONFIG_DMABUF_HEAPS=y CONFIG_DMABUF_SYSFS_STATS=y CONFIG_DMABUF_HEAPS_SYSTEM=y # end of DMABUF options ``` 6. 特别的如果需要在WSL中更换内核,那么参考这个教程https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconfig。填写参考 ``` [wsl2] kernel=D:\\linux-kernel\\bzImage ```