Marc Reichelt: Embedded Linux: Root-Dateisystem unter 5 MB

Hallo an alle!

Ich experimentiere derzeit mit einem interessanten Entwicklungsboard herum, dem C260 der Firma KWS Computersysteme.
Das Teil ist ziemlich interessant. Neben einem 200 MHz Prozessor hat es einige serielle Schnittstellen, einen Ethernet-Anschluss und auch 2 USB-Ports. Außerdem hat es einen Anschluss für eine SD-Karte, einen 8 MB Flashspeicher und einen kleinen Ringpuffer, der durch die Batterie auch einen Systemabsturz überleben kann.
Nun möchte ich diesem genialen Teil ein sinnvolles Leben einhauchen.

Auf der SD-Karte wurde bereits ein (nicht ganz so schönes) Linux mitgeliefert, weshalb ich mich dazu entschieden habe hier ein wenig Forschung zu betreiben und ein eigenes Linux aufzusetzen. Ich entschied mich für Debian, da das Paketmanagement hier sehr praktisch ist und man mit dem Tool debootstrap sein eigenes root-Dateisystem erstellen kann.
Nach einigen Bemühungen und viel freundlicher Hilfe habe ich jetzt sowohl einen selbst kompilierten, funktionierenden Kernel zur Hand sowie ein minimales Debian-Dateisystem. Hiermit kann ich erst mal arbeiten.

Nun möchte ich bald eigene Linux-Programme auf dem Board laufen lassen.
Dieses Mal möchte ich sowohl den Kernel als auch das root-Dateisystem in den 8 MB großen Flash-Speicher laden und die SD-Karte so komplett für Nutzdaten zur Verfügung haben. Das bis jetzt installierte Debian hat aber gute 200MB, so dass dies natürlich unmittelbar nicht zu machen ist.

Daher meine Frage: Was ist die beste Methode, um ein vernünftiges Linux-Dateisystem auf unter 5 MB zu bekommen? Wäre es mit einfachen Mitteln möglich, das vorhandene Debian um alle ungenutzten Teile zu reduzieren, oder sollte man komplett auf ein neues Dateisystem aufsetzen?
Und: Wäre busybox in diesem Fall eine Lösung für mich?

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
DPRINTK("Last time you were disconnected, how about now?");
        linux-2.6.6/drivers/net/tokenring/ibmtr.c
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  1. Hi, Marc!

    Es gibt mehrere gute Hilfsmittel für embedded Linux. Busybox ist nur eins davon, wenn auch ein sehr wesentliches. Weiterhin solltest Du darüber nachdenken, die libc durch uclibc zu ersetzen - das sollte auch einige MBs sparen.

    Als nächstes wäre es möglicherweise eine gute Idee, unbenötigte Programme zu deinstallieren (Du wirst bspw. kaum einen gcc auf Deinem embedded device brauchen und wenn doch, nehme besser den tcc). Multiple Scriptsprachen wie perl oder python sind auch nicht allesamt notwendig - im Zweifelsfall reicht eine oder sogar gar keine.

    Auch beispielsweise die Kernel-Module, die auf Deinem embedded-System nicht notwendig sind, können getrost entfernt werden. Wenn Du damit fertig bist, solltest Du ggf. noch die vorhandenen Log-Dateien entfernen. Damit solltest Du relativ leicht auf < 5MB kommen können.

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Hallo LX,

      Es gibt mehrere gute Hilfsmittel für embedded Linux. Busybox ist nur eins davon, wenn auch ein sehr wesentliches. Weiterhin solltest Du darüber nachdenken, die libc durch uclibc zu ersetzen - das sollte auch einige MBs sparen.

      Das ist schon mal ein Ansatz. Nach kurzer Recherche scheint es aber so zu sein, dass die uclibc nicht als Debian-Paket verfügbar ist, busybox aber schon. Und busybox scheint von der libc abzuhängen...
      Ich suche hier vor allem nach einer einfachen Lösung. Wenn ich mit der normalen libc auch auf ein System unter 5MB kommen könnte wäre dies für mich die beste Variante. Immerhin würde ich JFFS2 verwenden, womit ich Kompression nutzen kann.

      Als nächstes wäre es möglicherweise eine gute Idee, unbenötigte Programme zu deinstallieren (Du wirst bspw. kaum einen gcc auf Deinem embedded device brauchen und wenn doch, nehme besser den tcc). Multiple Scriptsprachen wie perl oder python sind auch nicht allesamt notwendig - im Zweifelsfall reicht eine oder sogar gar keine.

      Klingt sinnvoll. Wie mache ich das am Besten? Ist es sinnvoll, hierfür einfach "apt-get purge <Paketname>" zu verwenden?

      Um nochmal mein Vorhaben zu verdeutlichen: Ich würde hier gerne eine möglichst einfache und stabile Lösung wählen. Genial wäre es, wenn ich debootstrap die nicht nötigen Pakete mit --exclude=... und die zusätzlichen Pakete über --include=... angeben könnte - dies wird mit der uclibc aber wohl nicht möglich sein, da nicht verfügbar. Perfekt wäre es, wenn es ein Tool gibt mit dem ich direkt ein absolut minimales Debian (oder auch ein anderes Linux für Armel-Architektur) anlegen könnte.

      Ich werde heute Abend mal austesten, inwieweit ich die Größe des Debians mit "apt-get purge <Paketname>" und "rm -Rf <Ordnername>" reduzieren kann - vielleicht komme ich mit diesen Mitteln und JFFS2 ja bereits unter 5 MB.

      Vielen Dank schon mal an dieser Stelle!

      Freundliche Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      DPRINTK("Last time you were disconnected, how about now?");
              linux-2.6.6/drivers/net/tokenring/ibmtr.c
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  2. Hallo Marc,

    schau Dir doch mal das Embedded Debian-Projekt an, die spezialisieren sich auf genau das, was Du haben willst.

    Viele Grüße,
    Christian

    --
    Mein "Weblog" [RSS]
    Using XSLT to create JSON output (Saxon-B 9.0 for Java)
    »I don't believe you can call yourself a web developer until you've built an app that uses hyperlinks for deletion and have all your data deleted by a search bot.«
                -- Kommentar bei TDWTF
    1. Hallo Christian,

      schau Dir doch mal das Embedded Debian-Projekt an, die spezialisieren sich auf genau das, was Du haben willst.

      Der Tipp war prinzipiell gut, jedoch hat ein so erstelltes Debian standardmäßig doch etwas mehr als 66 MB. Auf Anfrage in deren Chat wurde mir gesagt dass Embedded Debian für Größen wie meine 5 MB nicht gemacht ist. Da frage ich mich doch, wieso das dann den Zusatz "embedded" verdient haben soll.

      Auf jeden Fall wurde mir ein anderes Tool empfohlen: Buildroot. Das ist sehr schick: Einmal kurz heruntergeladen, entpackt, dann noch "make menuconfig" eingeben, Optionen über eine ncurses-Oberfläche an eigene Bedürfnisse anpassen und mit "make" bauen. Alles weitere (Tools herunterladen & verwenden, Quelltexte herunterladen und kompilieren, Kernel bauen) geschieht von selbst - man muss nur noch ganz viel Kaffee bereithalten. :-)

      Das Ding braucht keine root-Rechte und läuft direkt auf meinem x86-System - es scheint, als ob ich die derzeit optimale Lösung gefunden habe.

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      DPRINTK("Last time you were disconnected, how about now?");
              linux-2.6.6/drivers/net/tokenring/ibmtr.c
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)