Forth am Sti(e)l - Teil 1
Beitrag von: Anonymous
Angezeigt 15.858
Anfang dieses Jahres veröffentlichte die Zeitschrift c't zwei interessante
Artikel über das Installieren und Starten von Windows1 und Linux2 Betriebssystemen von einem USB-Stick. Diese Artikel regten mich zu
der Überlegung an, ob nicht auch ein kleines Forth-System direkt von
einem USB-Stick gestartet werden kann. Es wäre doch praktisch, ein
mobiles Forth ``in der Tasche'' mitzunehmen und direkt starten
zu können (ohne dass erst ein umfangreiches Betriebssystem wie Unix/Linux
oder Windows gestartet werden muss)...
USB-Sticks sind aus Kompatibilitätsgründen mit FAT16 oder FAT32 Dateisystem
formatiert, da diese Dateisysteme von einer Vielzahl von Betriebssystemen
unterstützt werden (DOS, Windows 9x, Windows NT/2000/XP, Linux, Solaris,
MacOS 9/X, OS/2, ...). Das FAT Dateisystem wurde 1977 von Bill Gates
und Marc McDonald für das Microsoft Disk BASIC entworfen, speziell
zur Verwaltung der zur damaligen Zeit erhältlichen Disketten (160
KB). Nachdem das FAT Dateisystem Anfang der 80er Jahre in MS-DOS eingebaut
wurde und im Laufe der Zeit die Disketten, und später die Festplatten
immer größer wurden, musste auch das Dateisystem an die neuen Speichergrößen
angepasst werden. Wie oftmals bei ``historisch gewachsenen'' Systemen
geschah dies nicht ohne Verluste. Obwohl FAT32 die neuste Variante
des FAT Dateisystems ist (FAT32 wurde Mitte der 90er Jahre mit Windows
95 OSR2 eingeführt), merkt man dem System noch die Vergangenheit als
Disketten-Dateisystem an. Im FAT Dateisystem werden Sektoren zu Clustern
zusammengefasst. Die Anzahl der Sektoren pro Cluster hängt von der
Gesamtkapazität des Speichermediums ab. Da USB-Speichersticks vom
PC wie Festplatten verwaltet werden, befindet sich am Anfang des Mediums
ein Bootsektor mit der Partitionstabelle. Dieser Bootsektor mit Partitionstabelle
(512 Byte) verbraucht jedoch den vollen ersten Cluster eines mit FAT32
formatieren Mediums, da die FAT-Partition erst am Anfang des zweiten
Clusters beginnen kann.
Auf meinem Test-USB-Stick (Apple iPod Shuffle 512MB) beginnt die FAT Partition auf Sektor 45. Abzüglich des Bootsektors sind das 44 Sektoren zu je 512 Byte, die nicht genutzt werden und auf dem USB Stick brach liegen. Platz genug, um dort ein Forth mitsamt den Zusatzprogrammen zu ``verstecken''.
- ein PC ``real-mode'' Forth, bootbar direkt von USB-Sticks
- zuerst VolksForth 8086
- später ``Begin-Again'' (OpenBIOS)
- kompatibel mit aktueller PC Technologie und auf Intel CPU basierenden Apple Macintosh Rechnern
- Forth-Unterstützung für den Zugriff auf FAT32 Laufwerke
- grundlegende Dateiverwaltungsbefehle wie ``copy'', ``delete'' und ``rename''
- ASCII-Textbetrachter
- ASCII-Texteditor
- Forth-Entwicklungssystem
- Forth und Hilfsprogramme ``versteckt'' in ungenutzten Sektoren des FAT Dateisystems
Das Forth-System soll direkt vom Bootsektor aus geladen werden. Das Bootprogramm im Bootsektor muss daher die Partitionstabelle lesen und das Forth-System in den nicht von Partitionen belegten Sektoren finden. Dies ist meist einfach, da die freien Sektoren direkt mit Sektor 1 nach dem Bootsektor beginnen. Wer im Internet nach Bootloadern für die PC Plattform sucht wird schnell an mehreren Stellen fündig, inklusive Beschreibungen und Quellcode. Ich habe mich bei diesem Projekt für den Bootloader von Alexei Frounze3 entschieden. Dieser Bootloader kann MS-DOS COM-und EXE-Programme direkt laden und starten, was die Entwicklung beschleunigt, da VolksForth schon als MS-DOS COM-Datei vorliegt und nicht jedesmal die Forth-Programmdatei in die freien Sektoren kopiert werden muss, sondern das System auch direkt aus dem Dateisystem ``gebootet'' werden kann.
Auf die Sektoren des USB-Speichers muss mit Hilfe der erweiterten BIOS Schnittstellen4 für Festplatten zugegriffen werden, da in den meisten BIOS Versionen die regulären BIOS Schnittstellen nur auf Festplatten und nicht auf USB-Speicher zugreifen.
Das VolksForth wird nun direkt von Bootloader im Bootsektor geladen (wie Forth-Systeme in der ``guten alten Zeit''). Daher mussten alle Abhängigkeiten zu MS-DOS aus dieser Version des VolksForth entfernt werden. Das Forth-System wird direkt, Sektor für Sektor, auf den USB-Stick zugreifen und das FAT32 Dateisystem mitsamt den Dateistrukturen interpretieren. Derzeit (Stand März 2006) kann die Partitionstabelle und der FAT-Bootsektor gelesen und interpretiert werden. Auch können Verzeichnisse gelesen und aufgelistet werden, sowie Dateien geöffnet werden.
Da der Treiber für das FAT32 Dateisystem auch für das MicroUSB5 Projekt verwendet wird, ist dieser Treiber unabhängig vom VolksForth gehalten und kann als Modul auch in anderen Forth-Systemen und Projekten eingesetzt werden.
Programme, die direkt über BIOS Funktionen auf die Festplatte zugreifen, sollten nicht direkt auf dem Entwicklungsrechner ausgetestet werden. Neben den langen ``Turn-Around'' Zeiten (Reboot, USB-Boot Test, Betriebssystem laden, Forth Kernel ändern, auf USB-Stick speichern, Reboot ...) kann auch ein Programmierfehler die gesamte Festplatte durcheinanderwürfeln und wichtige Dateien zerstören. Aus diesem Grund führe ich die Programmtests innerhalb einer VMWare Workstation6 VirtuellenMaschine durch. VMWare simuliert eine virtuelle PC Hardware innerhalb eines gestarteten PC Betriebssystems. Programme innerhalb der VMWare können nicht auf die Festplatte des Wirt-Systems zugreifen. Für die Entwicklung kann auch der kostenlose VMWare Player verwendet werden. Das VMWare BIOS unterstützt USB-Sticks sowie die erweiterten BIOS Funktionen zum Lesen und Schreiben von Sektoren. Leider kann VMWare derzeit noch nicht von USB-Speichern booten. Für den Test der Programme boote ich daher das modifizierte VolksForth von Diskette und greife dann auf den USB-Speicher zu. Verläuft der Test erfolgreich, so wird das VolksForth von der Diskette auf den USB-Stick übertragen und in einem richtigen PC gebootet. Für den Boot von einem USB-Stick müssen ggf. die Boot-Einstellungen im BIOS angepasst werden, bei einigen BIOS Versionen muss auch ``USB-Keyboard''7 Unterstützung aktiviert werden. Informationen zum Booten von USB-Speichern finden sich im Internet8.
Bisher ist das VolksForth angepasst und kann sowohl von Diskette wie
auch vom USB-Stick gebootet werden. Derzeit arbeite ich an den FAT32
Routinen. Mein Plan ist es, bis zum Sommer eine fertig benutzbare
Version auf der VolksForth Webseite9 bereitzustellen. Über die weitere Entwicklung werde ich im zweiten
Teil dieses Artikels in der VD 3/2006 berichten.
Fußnoten ... Windows1 Windows: XP von USB-Laufwerken booten, S. 188, c't 2/2006 ... Linux2 Linux auf dem USB-Stick installieren, S. 212, c't 3/2006 ... Frounze3 http://alexfru.chat.ru/epm.html#bootprog ... Schnittstellen4 http://home.teleport.com/~brainy/interrupts.htm ... MicroUSB5 http://www.microusb.org/ ... Workstation6 http://www.vmware.com/ ...``USB-Keyboard''7 http://rz-obrian.rz.uni-karlsruhe.de/knoppix-usb/ ... Internet8 http://www.weethet.nl/english/hardware_bootfromusbstick.php ... Webseite9 http://volksforth.sf.net/