通过许多流程保护硬件资源
Protecting HW resources with many processes
我创建了一个存在于用户空间中的Linux驱动程序。 我创建了一个内存映射共享文件,该文件向下映射到一些自定义硬件寄存器。
驱动程序将执行通常的读取-修改-写入,因此我需要某种锁来确保同步。
我正在制作的驱动程序可以被许多进程使用,当然还有线程,所以我想知道哪种是处理这个问题的最佳方法。
是不是这样 std::mutex 就足以处理这种情况? 我已经读过 std::mutex 不适用于多进程应用程序,这是真的吗?
我无法使用提升库。
您可以创建一个守护程序(一个普通程序),它实际上是 mmap() 并访问硬件寄存器,并启用某种接口来与其他程序(例如 dbus 或您选择的任何 IPC 消息队列机制)进行通信。
这样,您就不必担心多个线程或进程是否将同时访问同一寄存器,从而避免竞争条件。
当然,在有人尝试访问您的硬件之前,此守护程序必须运行。类似于蓝牙的守护进程(人蓝牙)。
假设您正在将定制软件与硬件结合使用,最简单的解决方案就是flock
。fcntl(F_SET_LK)
更细粒度的方法,但这是设计中断的(当您关闭不相关的文件描述符时,Linux 可能会释放锁!
相关文章:
- 具有瞬态资源的RAII类
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么在保护模式下继承升级不起作用
- 访问被拒绝后,c++中的故障保护代码
- C++:无法访问声明的受保护成员
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 允许从 std::map 的密钥窃取资源?
- 参考资源文件VC++中的$(SolutionDir)
- 为什么您需要C++头文件的包含保护
- 如何维护资源管理器项目视图中当前可见的项目列表
- lock_guard是否保护返回值
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 将 std::allocate_shared 与多态资源分配器一起使用
- 使用硬件内存保护对64位硬件进行数组边界检查
- 通过继承共享的静态受保护资源
- 保护资源免受逆向工程影响的最佳实践
- 通过许多流程保护硬件资源
- 添加C++前缀是否"const"硬件级别执行任何不同操作,或者只是对编码人员的保护?
- 用Singleton保护资源