Ideen - Werkstatt - Projekte - Basteln - Hausbau

Bau eines MP3-Players mit Grafik-LCD

Betriebssystem: Linux

Inhalt

  1. Allgemeines
  2. Geeignete Linux Distributionen
  3. Schneller Booten - Quick & dirty
  4. Weitere Ansatzpunkte zum schnelleren Booten
  5. Tips für SuSE 9.3 und das Via EPIA ME6000

Allgemeines

Was spricht für Linux?
  • Linux lässt sich an jedes denkbare Einsatzgebiet perfekt anpassen. Die Konfigurationsmöglichkeiten füt den Profi sind unerschöpflich. Andererseits lässt sich auch ein Standard-System wie z.B. SuSE von einem Laien installieren und verwenden. Jeder wie er kann.
  • Jedes Linux-System lässt sich per Netzwerkverbindung und SSH von einem entfernten Rechner verwalten. Außer für die Erstinstallation braucht der MP3-Player daher weder Tastatur noch Monitor! Trotzdem muss man sich weniger Sorgen um die Sicherheit machen wie bei einem System aus Redmond.
  • Linux ist kostenlos und legal im Internet erhältlich

Geeignete Linux Distributionen

Grundsätzlich lässt sich inzwischen fast jede Linux Distribution auf den Via Mini-ITX Mainboards installieren. Aus der unüberschaubaren Anzahl von Linux Distributionen möchte ich examplarisch die folgenden genauer Beschreiben:

SuSE
SuSE Linux lässt sich ab Version 8 problemlos installieren und ist in Deutschland weit verbreitet, so dass Treiber etc. normalerweise kein Problem darstellen. SuSE bietet eine sehr gute Hardware-Erkennung und das intuitive Setup-Programm Yast, mit dem fast alle administrativen Aufgaben erledigt werden können.
Vorteil: Lässt sicht nach Herzenslust konfigurieren und Erweitern, Nachteil: Per Default wird ein sehr umfangreiches und mit KDE (auf dem Epia ME6000) auch recht langsames System installiert. Andere Desktop-Umgebungen können jedoch bereits bei der Installation ausgewählt werden.

Puppy Linux
Puppy Linux zählt zu den Mini-Linux Distributionen, die sich mit ca. 65 MB(!) Größe von jedem USB-Stick booten lassen. Vorteil: Das System enthält keinen unnötigen Schnickschnack, bringt aber trotzdem alles mit. Dadurch, und durch die RAM-Disk, welche das Root-Dateisystem enthält, läuft das System richtig flott und macht jede Menge Spaß. Nachteil: Persönliche Änderungen, wie z.B. die Installation eines speziellen Treibers oder Programms, welches nicht in der Distribution enhalten ist, sind nicht ohne weiteres möglich.

EpiOS
Auf http://www.epios.net wird eine Linux Distribution zum Download angeboten, die speziell auf die Via Epia Mainboards abgestimmt ist. Sie enthält alle speziellen Treiber und bringt auch gleich den Via Enhanced Xine Player mit, ein DVD-Player der die vorhandene Hardware-Unterstützung nutzt und daher DVDs ruckelfrei abspielen können soll - soll, denn mein System hängt sich vollständig auf, wenn ich diesen Player starte.
Diese Distribution basiert auf Gentoo-Linux und bringt die KDE-Desktop-Umgebung mit. Als Download gibt es das .iso für eine Installations-CD und für eine Live-Evaluation-CD, die auch auf die Festplatte installiert werden kann. Achtung: Der x586 Prozesser des Epia ME6000 wird nur von der Live-Eval-CD unterstützt.

Meine persönliche Wertung: Für mein ME6000 ist KDE "zu groß", die Bedienung der graphischen Oberfläche ist sehr zäh, und wenn dann nicht einmal der DVD-Player (der große Pluspunkt dieser Distribution) funktioniert...
An der nachträglichen Installation eines Treibers bin ich übrigens auch gescheitert, weil ich mich mit dem Gentoo-System nicht auskenne und der Compiler nur meinte: "Cannot produce executables".


Schneller Booten - Quick & dirty

Um die Zeit vom Einschalten bis zum ersten Ton möglichst einfach zu verkürzen, empfehle ich folgendes Vorgehen (getestet mit SuSE 9.3):
  • Auf X-Windows verzichten
  • Den Player und Zubehör mittels /etc/init.d/boot.local starten. Dieses Script wird aufgerufen, nachdem die Boot-Scripte (jedoch nicht die init-Scripte!) ausgeführt wurden. Zu diesem Zeitpunkt sind also alle lebensnotwendige Systeme am Laufen, mehr aber auch nicht. Netzwerk, Syslog und eventuell Sound gehören nicht dazu! Dies sollte man bei der Fehlersuche beachten.
  • Das boot.local-Script muss also (eventuell) die Sound-Treiber laden und die Programme für den Player starten. Der Boot-Prozess wird dadurch nicht beendet, sondern nur solange unterbrochen, bis der Player beendet wird, entweder mittels Shutdown oder Quit. In letzterem Fall wird der Boot-Prozess ganz normal fortgesetzt, also z.B. X-Windows gestartet.
Mein Epia ME6000 benötigt auf diese Weise 36 Sekunden vom Einschalten bis zum ersten Ton, von denen 10-12 Sekunden auf das Bios entfallen. Zum Vergleich: Mein 5-fach CD-Wechsler benötigt 15 Sekunden, bis er anfängt zu spielen.

Weitere Ansatzpunkte zum schnelleren Booten

Wenn das System nur den Mp3-Player starten soll, der evtl. nicht einmal ein grafisches System benötigt, ist es nicht notwendig die vollständige und meist langsame Boot-Prozedur beizubehalten. Um das Booten zu Beschleunigen gibt es mehrere Ansatzpunkte (das Folgende bezieht sich auf eine SuSE 9.3 Installation, ist aber sicherlich auf die meisten anderen Distributionen übertragbar):
  1. Das Bios des Mainboards führt einen Selbsttest durch und sucht nach Festplatten. Hier lohnt sich ein Blick in die Bios-Einstellungen, z.B. "Enable quick power on self test" oder ähnliches. Nicht benutze IDE Kanäle werden deaktiviert ("none"). Je nach BIOS finden sich evtl. noch andere interessante Einstellungen.
  2. Als nächstes wird der Bootloader Grub geladen, der eine Weile auf eine Benutzerinteraktion wartet. Die Wartezeit kann entweder mit YaST (bei SuSE) oder in der Datei grub.conf bzw. menu.lst in /boot/grub reduziert werden. Eine Sekunde Wartezeit ist in der Regel völlig ausreichend.
  3. Dann wird die Init-Ramdisk geladen, eine Datei, in der sich die Treiber für den Zugriff auf die Root-Partition des Linux-Systems befinden. Die Init-Ramdisk kann umgangen werden, wenn die benötigen Treiber direkt in den Kernel integriert werden. Dazu ist es meist notwendig, den Kernel selbst zu kompilieren.
  4. Der Kernel initialisiert nun (u.a.) die Festplatten und übergibt die Kontrolle an den Init-Prozess. Für nicht vorhandene oder nicht benutzte Festplatten kann dem Kernel die Option "hdx=none" oder "hdx=noprobe" übergeben werden (x ist in der Regel durch a,b,c oder d zu ersetzen). Der Kernel spart sich so den Versuch, diese Festplatten anzusprechen. Die Kernel Optionen können in der Datei grub.conf bzw. menu.lst in /boot/grub eingetragen werden.
  5. Bei einem Mainboard mit einem guten BIOS sollten bis jetzt nur wenige Sekunden vergangen sein. Nun werden jedoch die Boot/Init Scripte ausgeführt, zunächst die boot.* Scripte (/etc/init.d/boot.d) danach die Scripte des zu startenden Runlevels (/etc/init.d/rcx.d). Dies beansprucht in der Regel die meiste Zeit des gesamten Boot-Prozesses. Hier zu optimieren ist möglich und effizient, allerdings nicht ganz einfach. Aus diesem Grund möchte ich an dieser Stelle auf extern Webseiten verweisen und nur kurz die Ansatzpunkte umreisen:
    • es müssen nicht alle Scripte ausgeführt werden (siehe oben unter "Quick & dirty")
    • Von den notwendigen Scripten können vielleicht einige nach dem Start des Players ausgeführt werden (Z.B. network, dem Player reicht boot.localnet).
    • viele Scripte können gleichzeitig ablaufen
    • als Profi kann man evtl. die vollständige Init-Phase umgehen und die Kontrolle vom Kernel direkt an ein eigenes Script übergeben welches die benötigten Treiber lädt und den Mp3-Player startet. Ein Gefühl dafür bekommt man, wenn man in der Grub-Kommandozeile den Parameter init=/bin/bash eingibt. Kürzeste Zeit später erhält man eine Eingabeaufforderung und hat Zugriff auf die Read-Only eingehängte Root-Partition. Das war's dann aber auch...
Externe Links:

Die Init-Ramdisk
Kernel kompilieren
Linux Boot Scripts (1)
Linux Boot Scripts (2)
Bootchart, ein Tool zur Analyse des Boot-Prozesses
Boot Scripte parallel ausführen


Tips für SuSE 9.3 und das Via EPIA ME6000

SuSE 9.3 (vermutlich auch andere Versionen) hat auf diesem Mainboard Probleme mit dem Energiesparen, genauer: mit ACPI und powersaved. Der Chipsatzkühler der Northbridge wurde sehr heiß, der Rechner ist gelegentlich abgestürzt und das Systemlog berichtete, dass die CPU nicht mit der erwarteten Frequenz lief.

Abhilfe brachten zwei Dinge:
  • Das Deaktivieren von ACPI. Dazu übergibt man dem Kernel beim Booten den Parameter "acpi=off". Dieser Parameter wird normalerweise in der Grub-Konfigurationsdatei menu.lst oder grub.conf im Verzeichnis /boot/grub eingetragen. Diese Datei enthält für jedes zu bootende Linux System eine Zeile die mit 'kernel' beginnt, z.B.:
    kernel (hd0,1)/boot/vmlinuz root=/dev/hda2 vga=0x317 selinux=0 splash=silent resume=/dev/h da1 desktop elevator=as showopts
    An diese Zeile wird das "acpi=off" angehängt. Diese Änderung wirkt sich erst nach einem Neustart aus.
  • Das Abschalten des Powersave-Daemons (powersaved). Dieser Dienst wird normalerweise beim Booten automatisch gestartet. Dies kann der Benutzer 'root' mit dem Befehl
    insserv -r /etc/init.d/powersaved
    verhindern. Dabei wird im wesentlichen ein symbolischer Link auf das Start-Script entfernt. Um den Dienst wieder automatisch starten zu lassen dient der gleiche Befehl, jedoch ohne die Option '-r'.
    Der Powersave-Daemen kann auch im laufenden Betrieb gestartet und gestoppt werden:
    /etc/init.d/powesaved start
    bzw.
    /etc/init.d/powesaved stop
    erfüllt diesen Zweck.