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.
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.
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?
¿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?
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?
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.
fuente
Respuestas:
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.
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
sync
opción/etc/fstab
para restringir el almacenamiento en caché, pero lasman mount
notas: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.
sync
Es 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
,/run
y/tmp
y 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);/sys
y/proc
tambié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,/var
es el único problema, pero creo que no de manera crítica.fuente
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.
fuente
En cuanto al reloj preciso, hay muchos módulos GPS baratos disponibles. Es difícil encontrar un reloj más preciso que ese.
fuente