将Raspberry设置为数据记录器


13

如标题所示,我正在开发一个简单的嵌入式应用程序,该应用程序可以从串行端口读取一些信息并将其记录到文件中,此外还可以在显示屏上显示一些状态。

我现在处于日志记录似乎正在运行的阶段,并且我正在尝试配置系统,但我有几个问题。

  1. 该系统旨在将数据记录到FAT32 USB记忆棒中,可以随时将其拔出,重新插入或更换。将插入的USB大容量存储器自动挂载到固定目录的首选方法是什么?usbmount软件包似乎几乎可以做到这一点,但是缺乏维护使人警惕。

  2. 我不能保证电源供应并执行正常关机。值得庆幸的是,除了内部操作系统信息之外,唯一要写入的文件应该是日志。操作系统的日志文件系统是否可以使我免于自救,还是应该以只读方式安装系统或对RAM磁盘进行修补?

  3. USB记忆棒上的FAT文件系统是否可以生存并从断电和突然弹出中恢复?我应该在每次挂载时创建一个新的日志文件吗?

  4. 我已经将X服务器设置为自动启动,并在LXDE自动启动脚本中进行了设置,以启动状态显示并禁用窗口管理器/屏幕保护程序。还有其他需要持续显示的陷阱吗?

  5. 记录器将无法访问以太网,而是需要一个准确的时钟。RasClock模块合适吗?

抱歉,发表过长的帖子和多个半相关的问题。

我习惯于处理对软件完全控制的简单嵌入式设备,而正确配置实际操作系统的任务让我有些着急。另一方面,我宁愿怀疑我不是唯一(滥用)Pi来进行此类应用程序的人,因此希望这些问题不是针对我的特定情况。


您是否在某个地方描述您的USB->串行解决方案,以便其他可能的数据记录仪可以尝试?我渴望从我的scraper / logger / webcam Pi中获得更多的价值。谢谢!
2013年

Answers:


7

该系统旨在将数据记录到FAT32 USB记忆棒中,可以随时将其拔出,重新插入或更换。

不插电的那部分是有问题的。AFAIK,任何地方的计算机系统都不能保证您有权随时随意拉出USB插棒而不会造成潜在问题。因此,您将不得不考虑如何解决该问题。

我不能保证电源供应并执行正常关机。

同样,突然(几乎)切断任何计算机系统的电源都是有风险的。它通常结束了好吗(谁没有这样做一堆的时候,意外,因停电等?),似乎是报告的人SD卡腐败与PI不寻常的数量。因此,如果您的意思是“大多数情况下不会彻底关闭系统”,则需要重新考虑,因为这将是一个死胡同。请注意,无需键盘或网络连接就可以触发关机。您也可以使用类似的方法来触发USB棒的干净卸载。

您可以在其中添加sync选项/etc/fstab以限制缓存,但请man mount注意:

如果介质的写周期数量有限(例如某些闪存驱动器),则“同步”可能会缩短生命周期。

这包括SD卡,尽管只要您记得间歇性地测试(并在适当时更换)媒体,这可能是值得的。我认为,这将对整体性能产生轻微影响。

因此,请尽量避免突然拉动插头或USB棒,当然也不要设计依赖于此的设置。例如,不要对自己或其他用户说:“可以随时随地拔下USB记忆棒”,因为事实并非如此,您也不能这样做。

sync在应用程序中进行适当的调用(例如,在空闲时或大量写入之后)是个好主意。

一旦你有你想要安装和配置的一切,你有可能挂载根文件系统只读,如果您创建单独的分区进行/var/run以及/tmp与安装这些RW; 您也可以创建一个这样的挂载分区,并将rw目录符号链接到其中。

在树莓派上,您不必担心/run,因为它已经是tmpfs(RAM)了。/sys并且/proc它们也位于RAM中(但不要将它们用于预期用途)。如果系统是出于单一目的,并且所有数据都存储在USB记忆棒中,那么这/var是唯一有问题的问题,但我认为并非如此。


我们的主要问题是紧急停止期间随时可能断电,我怀疑在测试过程中会经常发生这种情况(因此需要记录仪开始工作)。我将检查我们是否可以为Pi装上备用电池,也许还要连接某种传感器以检测电量损失。但是,如果将根文件系统安装为只读模式,并通过定期刷新等保护USB存储器,我的生活将会轻松很多。
doynax 2013年

@doynax:可以用根文件系统RO运行。我对此没有任何经验,但是我在最后添加了几段有关我认为基本问题的内容。
goldilocks

2

在以前的生活中,我从事读取/写入存储卡的设备驱动程序的工作。在任何操作过程中都可能将其拉出,因此即使电池或电容器备份的电源也无济于事。根据芯片的格式规格,我推断出通过“热”移除和插入来实现最小损坏所需的行为。

基本上,您需要做的是确保如果您在数据块的中间写入时被切断(或者接触是蠕动的),则您可以识别出事实。基本上在数据前添加一个块号(如果不是固定大小,则添加长度),并在末尾添加一个crc和(相同)块号。

您所做的第一个写操作在末尾,其值不是下一个块号。这样,如果您的写入未完成,则将出现块编号不匹配,并且该数据块被称为垃圾。然后,使用实际块号,其长度,随后由您喜欢的算法生成的CRC以及实际块号再次写入数据块。(CRC是为了防止破坏数据的直接联系)。

恢复供电或重新插入存储卡时,仅接受顺序的块,直到该块的开始和结束序列号不匹配或CRC错误。删除该块并继续记录。

这虽然是低级的东西。通过文件系统进行操作是另一回事。

您真正需要的是FAT的冗余副本,并在FAT表周围做类似的事情。序列号将告诉您最新的序列号,并且前后匹配和CRC将确保完整性。

我已经睡不着了,所以我希望这很清楚。


1

至于准确的时钟,有很多便宜的GPS模块可用。很难找到比这更准确的时钟。


这是一个很好的建议。省去了设置时钟和处理电池的麻烦。我们只需要跟踪时区(我想是DST规则),对于纯数据记录器而言,通用时间就可以了。
doynax 2013年

当看不到天空的任何部分时,GPS模块是否可以在室内工作,并且仍然比简单的RTC更具优势?
斯特凡纳·古里科
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.