Gibt es eine Linux-Distribution, die auf einem Raspberry Pi problemlos "Embedded Style" ausführt? [geschlossen]

9

Ich benötige eine Linux-Distribution, die mir Folgendes bietet:

  • Laufen Sie auf einem Raspberry Pi
  • Kann Stromausfall zuverlässig überstehen (wie über ein schreibgeschütztes Dateisystem)

Ich konnte einige Dokumentationen zum Umstellen einer regulären Linux-Distribution auf den schreibgeschützten Modus finden. Ich hatte gehofft, dass es bereits eine Distribution geben würde, die für den Betrieb in einer eingebetteten Umgebung ausgelegt ist.

Ich brauche nicht viele Pakete oder Treiber, gerade genug, damit der Pi mit USB / Ethernet funktioniert. Ich benötige keine GUI-Oberfläche oder ähnliches. Hier wird nur ein in C integrierter benutzerdefinierter Dienst ausgeführt.

Kennt jemand eine Distribution, die passen würde?

Dan Harper
quelle
Da dies für eine eingebettete Anwendung gilt, sollten Sie zwei kurze Dinge beachten. Wenn Sie sich für Linux entscheiden, sollten Sie zunächst einen Echtzeit-Kernel verwenden, um sicherzustellen, dass Ihr System schnell genug reagieren kann. Zweitens möchten Sie möglicherweise auch den Watchdog-Timer so einstellen, dass er im Falle von Software-Schleifen / -Fehlern Maßnahmen ergreift.
Durchbruch
Schauen Sie sich raspberrypi.stackexchange.com an, aber ich denke, diese Frage ist auch dort nicht zum Thema, da es sich um eine Frage vom Typ Einkauf handelt
Kevin Panko

Antworten:

3

Die meisten eingebetteten Systeme verwenden einen benutzerdefinierten Kernel. Ein Tool, das dies erleichtert, ist Buildroot , eine Reihe von Skripten zum Erstellen der GNU gcc-Toolchain, der uClibc-Bibliothek anstelle der (riesigen) GNU libc, des Linux-Kernels, der BusyBox und anderer Dienstprogramme / Pakete für das Root-Dateisystem eines eingebetteten Boards. Das RaspberryPi ist ein relativ neues Board, daher befindet sich die Unterstützung in Buildroot noch in der Entwicklung, aber es gibt anscheinend ein Projekt , ein anderes Projekt und die Arbeit eines Einzelnen . Es wird wahrscheinlich mehr geben, wenn die RP-Fertigung ansteigt und sich die Verteilung verbessert.

Mit Buildroot können Sie einen Linux-Kernel und ein Root-Dateisystem genau so erstellen, wie Sie es in Ihrer Frage beschrieben haben. Abhängig von der Geschwindigkeit Ihrer Internetverbindung und den Funktionen Ihres Entwicklungs-PCs können die Binärdateien in mehr als 1 bis 4 Stunden verfügbar sein. Der Nachteil ist, dass die resultierenden Binärdateien weder getestet noch garantiert erfolgreich gestartet und ausgeführt werden. Zum Debuggen der Startsequenz ist eine Systemkonsole erforderlich. Siehe meine Antwort für Wie kann ich über Ethernet / WLAN ohne Monitor auf meinen Mini-PC (RaspberryPi / MK802 / Mele A1000 / VIA APC) zugreifen? Da das RaspberryPi jedoch so konzipiert wurde, dass es nicht gemauert werden kann , sollte dieser Nachteil die Erstellung Ihres benutzerdefinierten Kernels und RFS nicht abschrecken.

In Bezug auf "Überlebensstromverlust": Die richtige Auswahl des Dateisystems kann dieses Problem normalerweise lindern. Die MTD-Geräteschicht und ein Journaling-Dateisystem (z. B. jffs2) haben sich aus Erfahrung als recht robust erwiesen. Für einen nahezu absoluten Schutz gibt es die initramfs, die ramfs(keine Ramdisk mit fester Größe) ohne Umschaltung auf ein R / W-Dateisystem verwenden.

Nachtrag

Ein 30-Folien-Intro zu den Funktionen von Buildroot finden Sie hier.
Am Ende (Nr. 27) werden einige ähnliche und alternative Tools zum Erstellen eingebetteter Systeme erwähnt.

Sägespäne
quelle
2

TinyCoreLinux ist standardmäßig schreibgeschützt (die Persistenz ist optional): http://www.tinycorelinux.net/ports.html

avra
quelle
Haben Sie den Titel "Arm V6 Raspberry Pi" nicht auf dem von mir angegebenen Link gesehen?
Avra
Das scheint mir entgangen zu sein. Upvoted;)
Geselle Geek
1

Nachdem ich einen Seagate Dockstar mit Konsolenzugriff hatte, installierte ich Debian Squeeze darauf. Als Ausgangspunkt für die Ausführung auf schreibgeschütztem Root habe ich diesen hervorragenden Artikel 1 von Jeff Doozan verwendet. Die grundlegende Strategie besteht darin, ein Skript zu erstellen, das bei jedem Start die erforderlichen beschreibbaren Verzeichnisse als tmpfs bereitstellt. Ich zitiere hier das Drehbuch von Jeff 2 (ein großes Lob an 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

Speichern Sie die obigen Zeilen als Skript mit dem Namen / sbin / init-ro auf Ihrem Ziel-Rootfs und machen Sie es ausführbar.

chmod 755 /sbin/init-ro

Um dieses Skript während des Startvorgangs verwenden zu können, müssen Sie die System-Rootfs ein wenig vorbereiten (alle aus Jeffs Skript 2 zitiert ( $ROOTan den tatsächlichen Speicherort Ihrer gemounteten Rootfs anpassen).

# 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/*

Nachdem Sie die Rootfs wie oben vorbereitet haben, können Sie die Rootfs schreibgeschützt in / etc / fstab einbinden (ersetzen Sie ext2 durch das von Ihnen verwendete Dateisystem oder verwenden Sie stattdessen einfach rootfs ).

/dev/root  /                 ext2  noatime,ro   0 1

Schließlich müssen Sie Folgendes an Ihre Kernel-Parameter anhängen (dh in /boot/cmdline.txt auf Raspi), um das Skript vor dem eigentlichen / sbin / init auszuführen . (Das Folgende ist nur ein Beispiel für Root- und Rootdelay- Parameter. Der wichtige Teil, der an die Zeile in cmdline.txt angehängt werden muss, ist init=/sbin/init-ro.)

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

Beachten Sie jedoch, dass Sie für jede Software, die Schreibzugriff auf die Rootfs erfordert, die entsprechenden tmpfs-Speicherorte bereitstellen oder in einen externen Speicher schreiben müssen.

Andreas
quelle
1

Meine 2 Cent, es ist viel einfacher (und am Ende schöner), ein zuverlässiges Batterie-Backup für einen Pi zu erstellen, als mit einem schreibgeschützten Betriebssystem zu leben. Das würde natürlich bedeuten, dass Sie einige Grundkenntnisse in Elektronik benötigen (und ich meine BASIC; wir sprechen von 3-4 Komponenten). Dieser Typ hat mit nur ein paar mehr Lust gemacht: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system

Wenn Sie dies tun, verwenden Sie LiPo NICHT. NiCad sind was Sie wollen. LiPo kann das Laden nicht konstant übernehmen. du wurdest gewarnt.

Außerdem scheinen Sie sehr besorgt über etwas zu sein, das meiner Erfahrung nach ein sehr untergeordnetes Problem ist. Ich verprügele ständig meine Linux-Boxen und ein plötzliches außerplanmäßiges Herunterfahren ist eine Selbstverständlichkeit, wenn ich nicht gestört werden kann. Wenn Sie die Protokolle deaktivieren, erhalten Sie selten Beschwerden darüber.

Um alle Protokolle zu deaktivieren, können Sie als erste Regel in /etc/rsyslog.conf die folgende Zeile hinzufügen:

*.* ~

Selbst wenn es ein Problem gibt, wird dieses Problem in 99,9999% der Fälle (damit meine ich nach meiner persönlichen Erfahrung fast jedes Mal) behoben, wenn die Festplatte das nächste Mal gescannt wird. Wenn dies hauptsächlich vom Wetter abhängt, hat das Betriebssystem bemerkt, was Sie getan haben (seltsamerweise normalerweise nicht). Da ein Pi SD-Karten verwendet, würde ich mir vorstellen, dass dies auf einem Pi noch weniger passiert als auf meinem PC.

Krowe
quelle
1

Wenn ich mich richtig erinnere, wird die SD-Karte durch ein schreibgeschütztes Dateisystem nicht "gesichert". Ich habe 10 Pi bei einem Kunden (derzeitige Betriebszeit über 80 Tage für die Hälfte von ihnen), bei dem die Leistung nicht so stabil ist, wie Sie es erwarten / wollen. Ich habe eine Weile gebraucht, um Netzteile zu finden (billige Ladegeräte mit einer Nennleistung von 3A und 'teure' iPad-Ladegeräte mit einer Nennleistung von 2,3A), die den Pi tatsächlich länger als ein paar Tage am Laufen halten könnten, bevor ich alle Arten von SD-Korruptionsproblemen hatte , einschließlich mit einem, der nur schreibgeschütztes IIRC verwendet wurde.

Mein Problem ist jetzt größtenteils gelöst (aufgrund der neuen Lieferungen), aber für zukünftige Projekte möchte ich ein NFS-Root-Dateisystem erstellen. Es gibt bereits viele Tutorials dazu, die sich hauptsächlich mit den normalen Pi fs-Bildern befassen, aber es ist ziemlich einfach, einen minimalen Debootstrap durchzuführen und ihn über NFS in ein schreibgeschütztes Root-Dateisystem umzuwandeln. Kombinieren Sie dies mit Uboot für den Pi und einem intelligenten Uboot-Skript, und Ihre SD-Karte enthält nur wenige Megabyte RPi-Firmware, Uboot-Image und Uboot-Skript.

Mykroes
quelle
0

Ich habe dafür gute Dinge über Puppy Linux gehört . Obwohl ich zugeben muss, dass ich es nicht versucht habe.

Es kann so eingestellt werden, dass nicht auf die SD-Karte zurückgeschrieben wird.

Chenmunka
quelle
-1

Auf der Download-Seite von raspberrypi.org sind vier Bilder verfügbar :

  • Debian "keuchend"
  • Soft-Float Debian "keuchend"
  • Arch Linux ARM
  • QtonPi

Und hier ist die einzige, die standardmäßig schreibgeschützt ist (dies kann jedoch bei Bedarf geändert werden):

Hoffentlich wird eine davon Ihren Anforderungen entsprechen.

Yedric
quelle
Keines davon ist standardmäßig schreibgeschützt.
Alex Chamberlain
@alex, guter Punkt.
Yedric
TinyCoreLinux wurde zur Liste hinzugefügt. Es ist standardmäßig schreibgeschützt.
Avra