首页 文章

黑盒类型数据记录

提问于
浏览
3

在我正在开发的Linux嵌入式应用程序中,需要记录一些不时发生的事件 . 这些记录保存在MTD闪存设备上,一旦写入就不需要更改它们或进行有效搜索,但需要读取访问权限才能将数据显示给用户 . 一个很大的问题是,没有正确的关机顺序,电源可能随时消失 . 这些事件发生的频率可能非常慢(几天/几周),但其中一些会立即发生 . 要为每个事件保存的数据是强类型的:日期,时间,几个短文本字符串和几个整数 .

目前我继承了一个基于jffs2和SQLite的解决方案,这个解决方案远非最佳,因为DB文件有时会被破坏 . 当发生这种情况时,整个文件变得不可读,并且无法理解它是由jffs2中的错误引起的,还是在SQLite中,或者闪存扇区是坏的,还是在错误的时间切断了电源 .

是否有一个库或文件系统/库的组合可以更好地帮助我解决这类问题?或者我应该只使用类似CSV格式的文本文件?

5 回答

  • 1

    有许多嵌入式文件系统(非胖兼容)专门为此目的而设计 . 我不能建议,因为从来没有使用过,但here谷歌的东西 . 我相信你可以挖掘更多,希望这里有人可以提供更多信息,可能有基于GPL的东西 . 不同文件系统的比较是here

  • 0

    两个csv /文本文件 . 每次系统重新启动时都会启动一对新对 . 将每个事件写入第一个文件,刷新要存储的文件,将记录写入第二个文件,然后再次刷新 .

    这样,如果在第一次写入期间崩溃,第二个副本中的所有数据(直到写入)仍将存在 .

    确保flush是一个完整的文件系统刷新而不仅仅是clib缓冲区刷新 .

    也许还将文件放在不同的文件系统上 . 在您需要之前预留空间也可以帮助加快流程 .

  • 1

    我们使用普通的旧syslogd到NAND闪存上的YAFFS2分区,它似乎运行良好:当消息被发送到 Logger 并且在(<100ms)之后立即移除电源时,消息就在那里并且日志似乎永远不会损坏 .

    这是基于观察,而不是我明确地知道一切都将始终与设计,思想保持一致 .

  • 0

    我不是嵌入式系统的专家,但我认为CSV可能是最好的 . 它基本上不会被破坏,或者如果它,那么你可以很容易地看到错误并手动修复它(换行或只删除一行) . 我一直致力于从嵌入式系统接收数据,这些数据存在很多腐败问题(部分在系统上,部分在电话线传输过程中) . 如果它是CSV类型格式将非常有用,因此我们可以找到错误并删除或修复它们而不是破坏整个数据集 .

    如果您不需要在系统内进行搜索,那么CSV可以完美地运行 .

  • 3

    你有什么设施?最好的选择通常是 log to an external resource, ,例如通过syslog,SNMP,原始套接字或串行端口 . 这可以保护您的日志免受设备本身的不愉快 .

    如果您需要在内部存储日志,我发现明文,人类可读的文件是嵌入式设备的最佳选择 . “写入/刷新”周期很快,不需要任何工具来维护它们,您可以实时监控它们 . 如果文件大小有问题,您可以使用整数而不是格式化文本加时间戳,并且可以使用数字“事件ID”来缩写每个日志(仅将特定于实例的数据保留为文本) .

相关问题