通过许多流程保护硬件资源

Protecting HW resources with many processes

本文关键字:保护 硬件资源 许多流 程保护      更新时间:2023-10-16

我创建了一个存在于用户空间中的Linux驱动程序。 我创建了一个内存映射共享文件,该文件向下映射到一些自定义硬件寄存器。

驱动程序将执行通常的读取-修改-写入,因此我需要某种锁来确保同步。

我正在制作的驱动程序可以被许多进程使用,当然还有线程,所以我想知道哪种是处理这个问题的最佳方法。

是不是这样 std::mutex 就足以处理这种情况? 我已经读过 std::mutex 不适用于多进程应用程序,这是真的吗?

我无法使用提升库。

您可以创建一个守护程序(一个普通程序),它实际上是 mmap() 并访问硬件寄存器,并启用某种接口来与其他程序(例如 dbus 或您选择的任何 IPC 消息队列机制)进行通信。

这样,您就不必担心多个线程或进程是否将同时访问同一寄存器,从而避免竞争条件。

当然,在有人尝试访问您的硬件之前,此守护程序必须运行。类似于蓝牙的守护进程(人蓝牙)。

假设您正在将定制软件与硬件结合使用,最简单的解决方案就是flockfcntl(F_SET_LK)更细粒度的方法,但这是设计中断的(当您关闭不相关的文件描述符时,Linux 可能会释放锁!