Esiste una distro Linux che eseguirà facilmente lo "stile incorporato" su un Raspberry Pi? [chiuso]


9

Ho bisogno di una distro Linux che mi dia quanto segue:

  • Esegui su un Raspberry Pi
  • Può sopravvivere in modo affidabile alla perdita di potenza (come tramite un filesystem di sola lettura)

Sono stato in grado di cercare alcuni documenti su come cambiare una normale distribuzione Linux in modalità di sola lettura. Speravo che ci fosse già una distro costruita per funzionare in un ambiente embedded.

Non ho bisogno di molti pacchetti o driver, quanto basta per far funzionare il Pi con USB / Ethernet. Non ho bisogno di alcuna interfaccia grafica o altro, questo eseguirà solo un servizio personalizzato incorporato in C.

Qualcuno sa di una distro che si adatterebbe?


Dato che questo è per un'applicazione incorporata, due cose veloci che potresti voler notare. Innanzitutto, se decidi di seguire la strada per Linux, cerca di utilizzare un kernel in tempo reale per assicurarti che il tuo sistema possa rispondere abbastanza rapidamente. In secondo luogo, potresti anche voler impostare il timer del watchdog per agire in caso di loop / errori del software.
Sfondamento

Dai un'occhiata a raspberrypi.stackexchange.com ma penso che questa domanda sia fuori tema anche lì in quanto è una domanda sul tipo di shopping,
Kevin Panko

Risposte:


3

La maggior parte dei sistemi embedded utilizza un kernel personalizzato. Uno strumento per facilitare ciò è Buildroot , un insieme di script per creare la toolchain GNU gcc, la libreria uClibc al posto della (enorme) libc GNU, il kernel Linux, BusyBox e altre utilità / pacchetti per il filesystem di root di una scheda integrata. Il RaspberryPi è una scheda relativamente nuova, quindi il suo supporto in Buildroot è ancora in fase di sviluppo, ma a quanto pare ci sono un progetto , un altro progetto e il lavoro di un individuo . Probabilmente ce ne saranno altri man mano che la produzione RP aumenterà e la distribuzione migliorerà.

Usando Buildroot, è possibile creare un kernel Linux e un filesystem di root esattamente come descritto nella domanda. A seconda della velocità della tua connessione Internet e delle capacità del tuo PC di sviluppo, potresti avere i binari in 1-4+ ore. Il rovescio della medaglia è che i binari risultanti non sono testati né garantiti per l'avvio e l'esecuzione corretti. Una console di sistema è obbligatoria per il debug della sequenza di avvio. Vedi la mia risposta per Come posso accedere al mio mini-pc (RaspberryPi / MK802 / Mele A1000 / VIA APC) tramite Ethernet / Wi-Fi senza Monitor? Ma dato che RaspberryPi è stato progettato per essere non brickable , questo aspetto negativo non dovrebbe essere un fattore dissuasivo per la creazione del kernel personalizzato e RFS.

Per quanto riguarda "la perdita di energia sopravvissuta": la corretta selezione del filesystem di solito può alleviare questa preoccupazione. Il livello del dispositivo MTD e un filesystem journaling (ad esempio jffs2) si sono dimostrati piuttosto affidabili per esperienza. Per una protezione quasi assoluta, c'è l'initramfs che usa ramfs(non un ramdisk di dimensioni fisse) senza passaggio a un filesystem R / W.

appendice

Un'introduzione di 30 diapositive sulle funzionalità di Buildroot è qui
Alla fine (# 27) si fa menzione di alcuni strumenti simili e alternativi per costruire sistemi embedded.



1

Avendo avuto un Seagate Dockstar con accesso alla console, ho installato Debian squeeze su di esso. Come punto di partenza per farlo funzionare su root di sola lettura, ho usato questo eccellente articolo 1 di Jeff Doozan. La strategia di base prevede la creazione di uno script che, ad ogni avvio, monta le directory scrivibili necessarie come tmpfs. Cito la sceneggiatura di Jeff 2 qui (complimenti a Jeff!)

#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
  echo "Mounting $DIR as tmpfs"
  mount -n -t tmpfs tmpfs $DIR
  if [ -d "$DIR-saved" ]; then
    echo "Restoring $DIR-saved to $DIR"
    tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
  fi
done

echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases

exec /sbin/init

Salvare le righe sopra come uno script chiamato / sbin / init-ro sui rootfs di destinazione e renderlo eseguibile.

chmod 755 /sbin/init-ro

Per utilizzare questo script durante l'avvio, è necessario preparare un po 'i rootfs di sistema (tutti citati dallo script 2 di Jeff (adattarsi $ROOTalla posizione effettiva dei rootfs montati).

# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf


# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run


# Fixes from http://wiki.debian.org/ReadonlyRoot

rm $ROOT/etc/blkid.tab  > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab

rm $ROOT/etc/mtab  > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab

rm $ROOT/etc/rcS.d/S12udev-mtab

rm -rf $ROOT/var/log/*

Dopo aver preparato i rootfs come sopra, puoi montare i rootfs in sola lettura in / etc / fstab (sostituisci ext2 con il filesystem che stai usando o usa invece rootfs ).

/dev/root  /                 ext2  noatime,ro   0 1

Infine, devi aggiungere quanto segue ai parametri del tuo kernel (cioè in /boot/cmdline.txt su Raspi) per eseguire lo script prima dell'effettivo / sbin / init . (il seguente è solo un esempio di parametri root e rootdelay . la parte importante che deve essere aggiunta alla riga in cmdline.txt è init=/sbin/init-ro.)

root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro

Tuttavia, tenere presente che per qualsiasi software che richiede l'accesso in scrittura sui rootfs è necessario montare le posizioni tmpfs appropriate o scrivere su un archivio esterno.


1

I miei 2 centesimi, è molto più semplice (e più bello alla fine) fare un backup affidabile della batteria per un Pi piuttosto che vivere con un sistema operativo di sola lettura. Ovviamente, ciò significherebbe che avrai bisogno di una conoscenza di base dell'elettronica (e intendo BASIC; stiamo parlando di 3-4 componenti). Questo ragazzo ne ha creato uno di fantasia con solo alcuni altri: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system

Se lo fai, NON usare LiPo; NiCad è quello che vuoi. LiPo non può assumere una carica eccessiva; sei stato avvisato.

Inoltre, sembra che tu sia molto preoccupato per qualcosa che, nella mia esperienza, è un problema molto minore. Colpisco continuamente i miei box Linux e un arresto improvviso non programmato è una cosa ovvia quando non posso essere disturbato. Se disabiliti i registri, raramente riceverai anche lamentele riguardo a ciò.

Per disabilitare tutti i log è possibile aggiungere la seguente riga come prima regola in /etc/rsyslog.conf:

*.* ~

Anche quando si verifica un problema, il 99,9999% delle volte (con questo intendo quasi ogni volta nella mia esperienza personale) quel problema viene risolto quando il disco verrà successivamente sottoposto a scansione. Quando ciò accade principalmente dipende dalle condizioni meteorologiche, il sistema operativo ha notato ciò che hai fatto (stranamente, di solito non lo fa). Dal momento che un Pi utilizza schede SD immagino che ciò accada anche meno su un Pi rispetto al mio PC.


1

Se ricordo correttamente un filesystem di sola lettura non "proteggerà" la scheda SD. Ho 10 Pi in esecuzione presso un cliente (tempo di attività attuale superiore a 80 giorni per metà di essi) in cui la potenza non è stabile come ci si aspetterebbe / desiderare. Mi ci è voluto un po 'per trovare alimentatori (caricabatterie economici classificati a 3 A e caricabatterie iPad "costosi" classificati a 2,3 A) che potessero effettivamente far funzionare il Pi per più di un paio di giorni, prima che avessi tutti i tipi di problemi di corruzione SD , incluso con uno che è stato usato solo in sola lettura IIRC.

Il mio problema è stato risolto principalmente ora (a causa dei nuovi materiali di consumo), ma per i progetti futuri sto cercando di creare un filesystem di root NFS. Esistono già molti tutorial su questo, che si risolvono principalmente attorno alle normali immagini Pi fs, ma è abbastanza facile fare un debootstrap minimo e cambiarlo in un filesystem root di sola lettura su NFS. Abbinalo a Uboot per il Pi e uno script Uboot intelligente, e la tua scheda SD conterrà solo pochi megapixel di firmware RPi, immagine Uboot e script Uboot.


0

Ho sentito cose positive su Puppy Linux per questo. Anche se devo ammettere di non averlo provato.

Può essere impostato per non riscrivere sulla scheda SD.


-1

Sono disponibili quattro immagini dalla pagina di download di raspberrypi.org :

  • Debian "wheezy"
  • Soft-float Debian "wheezy"
  • Arch Linux ARM
  • QtonPi

E qui è l'unico che viene letto solo per impostazione predefinita (ma che può essere modificato se necessario):

Speriamo che uno di questi soddisfi le tue esigenze.


Nessuno di questi è di sola lettura per impostazione predefinita.
Alex Chamberlain,

@alex, buon punto.
Yedric,

TinyCoreLinux è stato aggiunto all'elenco. Viene letto solo per impostazione predefinita.
avra
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.