Forth am Sti(e)l - Teil 1

Sonntag, 26. März 2006 @ 15:34 CEST

Beitrag von: Anonymous

Die Idee

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''.

Der Plan:

Der Bootloader

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.

VolksForth Anpassungen

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.

Entwicklung

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.

Ausblick

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/


Kommentare (4)


Forth-Gesellschaft e.V.
/article.php/20060326153445411