Ich will mal beschreiben, wie ich es geschafft habe, LinVDR bootfähig auf einen USB-Stick zu bekommen. Es war nicht allzu einfach, einmal konnte ich mit dem einen Rechner booten, ein anderes Mal nur mit einem anderen. Hab etwas experimentieren müssen, aber so ging es dann schließlich.
Dieser Thread half dabei ein gewaltiges Stück weiter:
http://www.vdr-portal.de/board/thread.php?threadid=26235
- Einen passenden Kernel kompilieren. Passend heißt in diesem Fall, dass man die Teile, die zum Betrieb des USB-Sticks benötigt werden, fest einkompiliert werden müssen. Das sind "usb-storage" und außerdem natürlich die USB-Hostcontroller-Geschichten. Man braucht dann KEINE initrd mehr!
- Syslinux herunterladen. Man braucht aus dem Paket das Tool "mkdiskimage" und "syslinux" selbst auch noch einmal.
- Stick anstecken. Nichts mouten. Man sollte natürlich sicher sein, dass nichts Wichtiges mehr auf dem Stick ist, da die nachfolgenden Aktionen so ziemlich alles vernichten werden. Mit
./mkdiskimage -4 /dev/sda 4 64 32
eine Partition auf dem Stick anlegen. Das Tool bereitet außerdem den MBR so auf, dass BIOSse von ihm, wie von einer normalen Festplatte booten können. Wer sich in die Tiefen der Syslinux-Doku begibt, erfährt, dass es eine Menge BIOSse mit Bugs gibt, die einen USB-Stick nur booten können, wenn man ihn wie ein USB-ZIPDrive aussehen lässt. Daher erstellt obiger Befehl die Boot-Partition als Nummer 4 und aktiviert sie. Ist etwas ungewohnt, geht aber und war bei einem meiner PCs (mit buggy BIOS) die einzige Möglichkeit, ihn zum Booten zu bekommen.
- Jetzt muss man die Partition formatieren:
mkdosfs /dev/sda4
- Nun den Bootloader, das eigentliche Syslinux, installieren:
./syslinux /dev/sda4
Das verändert den Bootsektor und kopiert eine Datei "ldlinux.sys" drauf.
- Um den oben kompilierten Kernel draufzukopieren, mounten wir die Partition:
mount /dev/sda4 /mnt
"vmlinuz" kommt nach /mnt
- Im gleichen Verzeichnis muss eine "syslinux.cfg" erstellt werden, damit der Bootloader beim Start weiß, was er zu machen hat. Inhalt:
default vmlinuz rw root=/dev/sda5 vga=0x315 rootdelay=7
Die Optionen kann man den Gegebenheiten anpassen. rootdelay=7 sorgt für 7 Sekunden Verzögerung beim Booten, damit usb-storage Zeit hat, den Stick zu erkennen, bevor der Kernel den Mountversuch mit einer Panic aufgibt.
- Jetzt kann man die Partition mal umounten und einen Startversuch machen. Wenn alles klappt, wird zwar nur der Kernel geladen (da das Rootdevice noch nicht existiert), aber das ist schon verdammt viel wert. Wenn es aussieht, als würde gar nichts booten, erkennt das BIOS den Stick vielleicht nicht richtig. In diesem Fall (siehe oben) kann man mal probieren, als Bootdevice im BIOS "USB-ZIP" zu wählen. Das half bei einer meiner älteren Krücken.
- Wenn das geht, kann man den nächsten Schritt wagen, nämlich das Draufkopieren des VDR-Systems. Wer gut aufgepasst hat, dem ist aufgefallen, dass ich oben als Rootdevice "/dev/sda5" gewählt habe. Das ist ein logisches Laufwerk einer erweiterten Partition auf dem Stick. Andere Versuche mit einer zweiten primären Partition sind aus irgendeinem Grund auf einem Testsystem fehlgeschlagen. Nachdem man die Partitionen mittels "fdisk" erstellt hat, formatiert man "/dev/sda5" mit dem Dateisystem seiner Wahl (ext2/3 oder wer mag vielleicht auch xfs), mountet es und kopiert sein System drauf. Die "/etc/fstab" bedarf natürlich der Anpassung des Rootdevices und man muss noch irgendwie sicherstellen, dass nicht allzu häufig Schreibzugriffe auf den Stick erfolgen (mit der Ramdisk und Symlinks arbeiten).
Der letzte Punkt bedarf noch einiger Experimentierarbeit. Hier ist natürlich jede Idee willkommen.