Configurar la frambuesa como un registrador de datos


13

Como dice el título, estoy trabajando en una aplicación integrada simple que lee parte de la información del puerto serie y la registra en el archivo, además de mostrar un poco de estado en la pantalla.

Ahora estoy en la etapa en que el registro parece estar ejecutándose y estoy tratando de configurar el sistema y tengo un par de preguntas.

  1. El sistema está destinado a registrar datos en una memoria USB FAT32, que puede desenchufarse, enchufarse o reemplazarse en cualquier momento. ¿Cuál es el método preferido para montar automáticamente cualquier almacenamiento masivo USB insertado en un directorio fijo? El paquete usbmount parece hacer esto, pero la falta de mantenimiento hace que sea un poco cauteloso.

  2. No puedo garantizar la fuente de alimentación y realizar apagados limpios. Afortunadamente, los únicos archivos que se escribirán, aparte de la información interna del sistema operativo, deberían ser los registros. ¿Un sistema de archivos de diario para el sistema operativo me salvará de mí mismo o debería montar el sistema de solo lectura o jugar con discos RAM?

  3. ¿Sobrevivirá y se recuperará el sistema de archivos FAT en la memoria USB de cortes de energía y expulsiones repentinas? ¿Debo crear un nuevo archivo de registro cada vez que se monta?

  4. He configurado el servidor X para que se inicie automáticamente y manipulé los scripts de inicio automático de LXDE para iniciar la visualización del estado y deshabilitar el administrador de ventanas / protector de pantalla. ¿Hay alguna otra trampa para mantener una pantalla continua?

  5. El registrador no tendrá acceso a Ethernet y más bien necesita un reloj preciso. ¿Es el módulo RasClock una opción adecuada?

Perdón por la larga publicación y las múltiples preguntas semi-relacionadas.

Estoy acostumbrado a tratar con dispositivos integrados simples para los cuales tengo control total sobre el software, y la tarea de configurar correctamente un sistema operativo real me está poniendo un poco ansioso. Por otro lado, sospecho que no soy el único (ab-) que usa el Pi para este tipo de aplicación, así que espero que las preguntas no sean demasiado específicas para mi situación particular.


¿Está describiendo su solución de trabajo USB-> serial en algún lugar para que otros posibles dataloggers puedan probarla? Estoy interesado en obtener un valor adicional de mi rascador / registrador / cámara web Pi. ¡Gracias!
Tai Viinikka

Respuestas:


7

El sistema está destinado a registrar datos en una memoria USB FAT32, que puede desenchufarse, enchufarse o reemplazarse en cualquier momento.

La parte desconectada de eso es problemática. AFAIK, ningún sistema informático en ningún lugar le promete el derecho de extraer una memoria USB sin previo aviso en cualquier momento sin problemas potenciales. Entonces tendrá que pensar en cómo evitarlo.

No puedo garantizar la fuente de alimentación y realizar apagados limpios.

Nuevamente, cortar de repente la alimentación (casi) de cualquier sistema informático es arriesgado. Por lo general, termina bien (¿quién no ha hecho esto muchas veces, por accidente, debido a una falla de energía, etc.?), Pero parece que hay una cantidad inusual de personas que informan corrupción de la tarjeta SD con el pi. Entonces, si quiere decir "Principalmente el sistema no se cerrará limpiamente", debe repensarlo, porque esa será una estrategia sin salida. Tenga en cuenta que es posible activar un apagado sin un teclado o conexión de red. También podría utilizar un método similar para desencadenar un desmontaje limpio de la memoria USB.

Puede agregar la syncopción /etc/fstabpara restringir el almacenamiento en caché, pero las man mountnotas:

En el caso de medios con un número limitado de ciclos de escritura (por ejemplo, algunas unidades flash), la "sincronización" puede provocar un acortamiento del ciclo de vida.

Esto incluye las tarjetas SD, aunque siempre que recuerde probar de forma intermitente (y reemplazar, cuando sea apropiado) sus medios, puede valer la pena. Esto afectará ligeramente el rendimiento general, creo.

Por lo tanto, trate de evitar arrancar el enchufe o la memoria USB de la mejor manera posible, y ciertamente no diseñe una configuración que dependa de esto. Por ejemplo, no se diga a usted ni a otros usuarios: "Está bien desconectar la memoria USB cuando lo desee", porque no lo es y no puede hacerlo.

syncEs una buena idea hacer llamadas apropiadas en su aplicación (por ejemplo, cuando está inactivo o después de una escritura importante).

Una vez que tenga todo lo que desee instalado y configurado , que potencialmente puede montar el sistema de ficheros raíz de sólo lectura, si crea particiones separadas para /var, /runy /tmpy montar los rw; también puede crear una partición montada y vincular los directorios rw en ella.

En un raspbian pi, no tiene que preocuparse /run, ya que es tmpfs (RAM); /sysy /proctambién están en RAM (pero no los use para nada excepto para lo que están destinados). Si el sistema tiene un solo propósito y todos sus datos van a la memoria USB, /vares el único problema, pero creo que no de manera crítica.


Nuestro principal problema es que la energía puede cortarse en cualquier momento durante una parada de emergencia, algo que sospecho que ocurrirá con frecuencia durante las pruebas (de ahí la necesidad de un registrador para comenzar). Comprobaré que podríamos agregar una batería de respaldo para el Pi y quizás conecte algún tipo de sensor para detectar la pérdida de energía. Sin embargo, mi vida sería mucho más fácil si el sistema de archivos raíz pudiera montarse en modo de solo lectura y la memoria USB protegida mediante descargas periódicas y similares.
doynax

@doynax: es posible ejecutar con el sistema de archivos raíz RO. No tengo ninguna experiencia con eso, pero agregué un par de párrafos al final sobre lo que creo que son las preocupaciones básicas.
Ricitos de oro

2

En una vida anterior trabajé en controladores de dispositivos que leían / ​​escribían tarjetas de memoria. Se podrían tirar en medio de cualquier operación, por lo que incluso la batería o la energía de respaldo del condensador no ayudarían. Basado en las especificaciones de formato de los chips, deduje el comportamiento requerido para tener un daño mínimo causado por la extracción e inserción "en caliente".

Básicamente, lo que debe hacer es asegurarse de que si se corta la escritura media de un bloque de datos (o los contactos están ardiendo) puede reconocer el hecho. básicamente anteponga los datos con un número de bloque (y longitud si no es un tamaño fijo), y agregue un crc y (el mismo) número de bloque al final.

La primera escritura que haces es al final, con un valor que NO es el siguiente número de bloque. De esta manera, si su escritura no se completa, habrá una falta de coincidencia del número de bloque y se sabe que ese bloque de datos es basura. Luego escriba su bloque de datos con el número de bloque real, seguido de la longitud, seguido de su CRC generado por su algoritmo favorito, y el número de bloque real nuevamente. (El CRC es para proteger contra contactos que corrompen sus datos).

Cuando se restablece la alimentación o se vuelve a insertar la tarjeta de memoria, solo acepte bloques secuenciales hasta el punto en que los números de inicio y finalización del bloque no coincidan o el CRC sea incorrecto. Elimine ese bloque y reanude el registro.

Sin embargo, esto es algo de bajo nivel. Hacerlo a través de un sistema de archivos es otra historia.

Lo que realmente necesita son copias redundantes de su FAT y hacer algo similar en la tabla FAT. El número secuencial le indicará cuál es el más reciente, y la coincidencia frontal / posterior y el CRC garantizarán la integridad.

Ya pasó mi hora de dormir, así que espero que esto sea lo suficientemente claro.


1

En cuanto al reloj preciso, hay muchos módulos GPS baratos disponibles. Es difícil encontrar un reloj más preciso que ese.


Esa es una excelente sugerencia. Ahórranos la molestia de configurar el reloj y lidiar con la batería. Solo necesitaremos hacer un seguimiento de la zona horaria (y las reglas de DST, supongo), y para un registrador de datos puro, el tiempo universal debería estar bien.
doynax

¿Un módulo GPS funciona en interiores cuando no hay ninguna parte del cielo visible y aún proporciona un beneficio sobre un RTC simple?
Stéphane Gourichon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.