Booten vom USB-Stick



  • Da ich keine Floppylaufwerke mehr habe, möchte ich vom USB-Stick booten können. Die Bedingung ist, es soll nicht mit FAT12 formatiert sein! Ich möchte ein eigenes Dateisystem entwickeln und dabei die Kapazität des USB-Sticks ausnutzen.
    Vorerst habe ich überhaupt kein Dateisystem und schreibe direkt in die Sektoren. Mit einer entsprechenden Binärdatei, kann ich zwar mit bochs booten, jedoch nicht vom Stick. Es muß eine Möglichkeit geben, wie man vom Stick Sektoren laden kann.
    Immerhin kann man Linux ja auch vom USB-Stick booten, auch wenn man kein EXT2 Format hierzu verwendet!



  • Das Thema hat sich für mich erledigt und kann als gelöst betrachtet werden. Man braucht für einen USB-Stick keine Partition, welche unbedingt mit FAT12 bzw. ISO9660 formatiert ist um ein eigenes OS laufen zu lassen. Ein Diskettenabbild ist jedenfalls nicht nötig, um ein eigenes Betriebssystem vom Bootstick zu starten. Man muß nur darauf achten, daß im Bootloader bzw. im Bootsektor die letzten 70 Bytes vor der Bootsignatur vom Bootloaderprogramm nicht überschrieben werden. Man hat also für den Bootloadercode maximal nur 440 Bytes zur Verfügung.
    Von den Adressen 0x1b8 bis 0x1FD reicht der Master Boot Record. Die Adressen 0x1FE und 0x1FF enthalten die bekannte Bootsignatur 0x55 und 0xAA. Die Partitionstabelle beginnt bei der Adresse 0x1be und ist 64 Bytes groß. Wenn man mit den Unix-Befehl dd if=OS.img =/dev/sdX (X mit lsblk ermitteln, wo der USB-Stick ist) die OS-Daten auf den USB-Stick schreibt, zerstört man natürlich den MBR des USB-Sticks. So muß man nachher mindestens eine bootbare Partition mit fdisk anlegen (unter Linux mit fdisk /dev/sdX), oder man schreibt schon vorher in die Partitonstabelle quasi per Hand vom USB-Stick die Daten hinein, wobei man dann auf den USB-Stick-Typ bezüglich der Kapazität sich festlegt. Wenn fdisk aufgrund des vorangegangenen dd-Befehls 4 Partitionen anzeigt, so löscht man diese erst einmal und legt eine neue primäre Partition mit Bootflag an.
    Gewöhnlicherweise wird diese 1. primäre Partition bei Sektor 2048 (0x0800) anfangen. Es ist nicht notwendig, daß der Kernel unbedingt in dieser bootbaren Partition enthalten ist. Das Bootflag muß jedoch gesetzt werden, sonst nimmt das BIOS an, daß auf den Stick überhaupt kein bootbares System sich befindet, trotz der Bootsignatur im Bootloader.

    Man kann also getrost sein Betriebssystem zunächst in diese Lücke schreiben, oder später bzw. den Kernel in die 1.primäre Partition auslagern, wo man allerdings es schaffen muß, jenen Sektor vom Bootloader aus zu laden. Dazu braucht man die Geometrie des Bootsticks. Die läßt sich aus der Partitionstabelle ermitteln. Gewöhnlicherweise werden in diese Lücke vom Bootsektor bis zur ersten Partition meistens für das OS wichtige Daten untergebracht, bzw. ein Multi - Bootloader, wo man verschiedene aufgelistete Betriebssysteme starten kann. Es muß also auch hier nicht unbedingt GRUB oder LILO sein.

    Das Ganze gilt in gleicher Weise auch für Festplatten oder andere partitionierbare Datenträger, wenn man dort sein eigenes OS unterbringen möchte.


  • Mod

    Danke für deine genaue Schilderung.


Anmelden zum Antworten