Necesito una distribución de Linux que me dé lo siguiente:
- Ejecutar en una Raspberry Pi
- Puede sobrevivir de manera confiable a la pérdida de energía (como a través de un sistema de archivos de solo lectura)
He podido buscar documentación sobre cómo cambiar una distribución de Linux normal al modo de solo lectura. Tenía la esperanza de que ya hubiera una distribución construida y diseñada para ejecutarse en un entorno integrado.
No necesito muchos paquetes o controladores, solo lo suficiente para que el Pi funcione con USB / Ethernet. No necesito ninguna interfaz GUI ni nada, solo se ejecutará un servicio personalizado integrado en C.
¿Alguien sabe de una distribución que encajaría?
linux
linux-distributions
embedded
raspberry-pi
Dan Harper
fuente
fuente
Respuestas:
La mayoría de los sistemas integrados utilizan un kernel personalizado. Una herramienta para facilitar eso es Buildroot , un conjunto de scripts para construir la cadena de herramientas GNU gcc, la biblioteca uClibc en lugar de la libc (enorme) GNU, el kernel de Linux, BusyBox y otras utilidades / paquetes para el sistema de archivos raíz de una placa incrustada. El RaspberryPi es un tablero relativamente nuevo, por lo que su soporte en Buildroot todavía está en desarrollo, pero aparentemente hay un proyecto , otro proyecto y el trabajo de un individuo . Probablemente habrá más a medida que aumente la fabricación de RP y mejore la distribución.
Usando Buildroot, podría construir un núcleo Linux y un sistema de archivos raíz exactamente como lo describió en su pregunta. Dependiendo de la velocidad de su conexión a Internet y las capacidades de su PC de desarrollo, puede tener los binarios en 1 a 4 horas o más. La desventaja es que los binarios resultantes no se prueban ni se garantiza que se inicien y ejecuten correctamente. Una consola del sistema es obligatoria para depurar la secuencia de arranque. Vea mi respuesta para ¿Cómo puedo acceder a mi mini-pc (RaspberryPi / MK802 / Mele A1000 / VIA APC) a través de ethernet / wifi sin tener Monitor? Pero dado que el RaspberryPi fue diseñado para ser indestructible , este inconveniente no debería ser un impedimento para construir su kernel personalizado y RFS.
Con respecto a "sobrevivir a la pérdida de energía": la selección adecuada del sistema de archivos generalmente puede aliviar esta preocupación. La capa de dispositivo MTD más un sistema de archivos de registro en diario (por ejemplo, jffs2) ha demostrado ser bastante robusto por experiencia. Para una protección casi absoluta, hay initramfs que usa
ramfs
(no un disco RAM de tamaño fijo) sin cambio a un sistema de archivos R / W.Apéndice
Una introducción de 30 diapositivas sobre las características de Buildroot está aquí.
Al final (# 27) se mencionan algunas herramientas similares y alternativas para construir sistemas embebidos.
fuente
TinyCoreLinux es de solo lectura de forma predeterminada (la persistencia es opcional): http://www.tinycorelinux.net/ports.html
fuente
Habiendo tenido un Seagate Dockstar con acceso a la consola, instalé Debian squeeze en él. Como punto de partida para que se ejecute en la raíz de solo lectura, utilicé este excelente artículo 1 de Jeff Doozan. La estrategia básica consiste en crear un script que, en cada arranque, monte los directorios de escritura necesarios como tmpfs. Cito el guión de Jeff 2 aquí (¡felicitaciones a Jeff!)
Guarde las líneas anteriores como un script llamado / sbin / init-ro en su rootfs objetivo y hágalo ejecutable.
Para usar este script durante el arranque, debe preparar un poco los rootfs del sistema (todo citado del script 2 de Jeff (adaptarse
$ROOT
a la ubicación real de sus rootfs montados).Después de tener los rootfs preparados como anteriormente, puede montar los rootfs de solo lectura en / etc / fstab (reemplace ext2 con el sistema de archivos que está usando o simplemente use rootfs en su lugar).
Finalmente, debe agregar lo siguiente a los parámetros de su núcleo (es decir, en /boot/cmdline.txt en Raspi) para ejecutar el script antes del actual / sbin / init . (el siguiente es solo un ejemplo de los parámetros root y rootdelay . la parte importante que debe agregarse a la línea en cmdline.txt es
init=/sbin/init-ro
).Pero tenga en cuenta que para cualquier software que requiera acceso de escritura en los rootfs, debe montar las ubicaciones tmpfs apropiadas o escribir en el almacenamiento externo.
fuente
Con mis 2 centavos, es mucho más fácil (y mejor al final) hacer una batería de respaldo confiable para un Pi que vivir con un sistema operativo de solo lectura. Por supuesto, eso significaría que necesitará algunos conocimientos básicos de electrónica (y quiero decir BÁSICO; estamos hablando de 3-4 componentes). Este tipo hizo uno elegante con solo unos pocos más: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system
Si haces esto, NO uses LiPo; NiCad es lo que quieres. LiPo no puede tomar constantes sobre la carga; has sido advertido.
Además, parece estar muy preocupado por algo que, en mi experiencia, es un problema muy menor. Golpeo mis cajas de Linux todo el tiempo y un apagado repentino no programado es algo normal cuando no puedo ser molestado. Si deshabilita los registros, rara vez recibirá quejas sobre hacerlo.
Para deshabilitar todos los registros, puede agregar la siguiente línea como la primera regla en /etc/rsyslog.conf:
Incluso cuando hay un problema, el 99.9999% de las veces (con esto me refiero a casi todas las veces en mi experiencia personal) ese problema se soluciona la próxima vez que se escanea el disco. Cuando eso sucede depende principalmente del clima, el sistema operativo se dio cuenta de lo que hizo (por extraño que parezca). Como un Pi usa tarjetas SD, me imagino que esto sucede aún menos en un Pi que en mi PC.
fuente
Si recuerdo correctamente, un sistema de archivos de solo lectura no 'asegurará' la tarjeta SD. Tengo 10 Pi funcionando para un cliente (tiempo de actividad actual de más de 80 días para la mitad de ellos) donde la potencia no es tan estable como cabría esperar / desear. Me tomó un tiempo encontrar fuentes de alimentación (cargadores baratos con una calificación de 3A y cargadores de iPad 'costosos' con una calificación de 2.3A) que en realidad podrían mantener el Pi funcionando durante más de un par de días, antes de eso tuve todo tipo de problemas de corrupción SD , incluso con uno que solo se usó como IIRC de solo lectura.
Mi problema está resuelto en su mayoría ahora (debido a los nuevos suministros), pero para futuros proyectos estoy buscando hacer un sistema de archivos raíz NFS. Ya hay muchos tutoriales sobre esto, en su mayoría resolviendo alrededor de las imágenes normales de Pi fs, pero es bastante fácil hacer un mínimo de debootstrap y cambiarlo a un sistema de archivos raíz de solo lectura a través de NFS. Combine esto con uboot para Pi y un script uboot inteligente, y su tarjeta SD contendrá solo unos pocos megas de firmware RPi, imagen uboot y script uboot.
fuente
He escuchado cosas buenas sobre Puppy Linux para esto. Aunque debo admitir que no lo he probado.
Se puede configurar para que no vuelva a escribir en la tarjeta SD.
fuente
Hay cuatro imágenes disponibles en la página de descarga de raspberrypi.org :
Y aquí está el único que se lee solo de forma predeterminada (pero que se puede cambiar si es necesario):
Con suerte, uno de estos satisfará sus necesidades.
fuente