Linux中的持久存储值处理

Linux中的持久存储值处理,linux,embedded,persistent,flash-memory,Linux,Embedded,Persistent,Flash Memory,我的嵌入式板上有一个QSPI闪存。 我有一个驱动程序+进程“Q”来处理读写操作。 我想存储软件版本、IP、运行时间等变量 我想征求一些建议,如何处理不同的访问权限,从用户空间和其他进程写入和读取值 我在想每个变量都有一个文件。然后,我可以为这些文件分配访问权限,如果值已更改,则process Q可以更改文件中的值。因此,进程Q只能写入,而其他进程或用户只能读取 但我不懂写作。我曾考虑使用消息队列或zeroMQ并围绕它构建软件,但我不确定这是否过火。但我不知道如何管理访问权限 最好的方法是什么?如

我的嵌入式板上有一个QSPI闪存。 我有一个驱动程序+进程“Q”来处理读写操作。 我想存储软件版本、IP、运行时间等变量

我想征求一些建议,如何处理不同的访问权限,从用户空间和其他进程写入和读取值

我在想每个变量都有一个文件。然后,我可以为这些文件分配访问权限,如果值已更改,则process Q可以更改文件中的值。因此,进程Q只能写入,而其他进程或用户只能读取

但我不懂写作。我曾考虑使用消息队列或zeroMQ并围绕它构建软件,但我不确定这是否过火。但我不知道如何管理访问权限

最好的方法是什么?如果你能提出完全不同的方法,我将不胜感激。
谢谢

由于“请建议X”的性质,此问题可能会被否决/标记

也就是说,如果每个变量都有一个文件,那么您可能需要考虑实现一个FUSE文件系统,将SPI驱动程序/实用程序包装为“Q”(或者,如果要将源代码编译/控制为“Q”,则将其构建为“Q”)。我这样做是为了将设置存储在当前工作项目的EEPROM中,结果很好。例如,我有一个文件,在读取时,从EEPROM(或缓存副本)中检索6个字节,并以std十六进制/冒号分隔符号提供MAC地址

这里最大的优点是,从shell脚本(例如
init
进程)或其他脚本语言访问所有配置/设置数据变得非常简单

这样做的另一个好处是,您可以使用
inotify
(它是“免费”的,fusefs中没有额外的代码)创建应用程序,以便在更改设置时有效地检测


这种方法的一个缺点是,在多个设置上执行原子事务并仍然保持正常的文件语义是非常重要的。

这正是我所想的!但我不知道保险丝的事。谢谢但是“仍然保持正常的文件语义”是什么意思呢?你能举个例子吗?我计划每个变量都有一个单独的文件,所以如果你读一个文件,你就可以确切地知道它的值。如果事务是原子的,那它就是一个大加号。关于编写,我计划缓存副本,并根据特定事件批量编写。例如,假设您有用于静态IP的addr、netmask和gateway。理想情况下,您可以在一个事务中将它们全部更新为“set”,然后让网络管理器获取一个单一的inotifix,以确认所有3个都已更改,并调用相应的
ioctl
。您可以做的是添加一个单独的文件,例如必须写入的名为“update_ifconfig”的文件,然后inotify只查看该文件。但是,如果两个进程同时尝试写入,那么写入变得稍微不那么清晰/直接,并且仍然不能消除竞争条件。对于不经常更改的配置,这不是什么大问题。我目前的解决方案有一点不足,那就是当我有一个只有几十个设置的进程时,我希望将它们都分割成一个文件系统,以便在测试/脚本编写中快速访问,但同时,我不希望有几十个文件更改通知和几十个使用这些设置的应用程序的重启。现在我明白了,但是如果我只通过一个进程进行写入,并且只通过多个进程进行“读取”,我可能至少可以消除争用条件。你是如何找到以非root用户身份运行fuse的方法的@布莱恩·麦克法兰