Login
Newsletter
Werbung

Fr, 30. März 2012, 14:24

Hardware

Linux auf 8-Bit-Prozessor

Der Entwickler Dmitry Grinberg hat ein System um einen 8-Bit-Microcontroller konstruiert, das Linux ausführen kann. Möglich wurde das durch einen Emulator, der 32-Bit-ARM-Code ausführen kann.

Der 8-Bit-Rechner von Grinberg

Dmitry Grinberg

Der 8-Bit-Rechner von Grinberg

Wenn Neulinge die Frage stellen, ob Linux auf einem 8-Bit-Prozessor lauffähig ist, ernten sie lediglich Gelächter. Abgesehen von einem früh begonnenen (und heute noch aktiven) Versuch, Linux auf 16-Bit-Prozessoren zu portieren (Embeddable Linux Kernel Subset, ELKS) benötigt Linux mindestens 32 Bit und meist deutlich mehr als 1 MB RAM.

Der Entwickler Dmitry Grinberg wollte das ändern. Doch wie bringt man einem 8-Bit-Prozessor bei, 32-Bit-Code auszuführen, und stellt ihm genug RAM zur Verfügung? Letzteres ist ein seit langem gelöstes Problem. Man sorgt dafür, dass immer nur der Teil des RAM, der gerade benötigt wird, in den Adressraum des Prozessors eingeblendet wird. Ein Microcontroller wie der von Grinberg verwendete ATmega1284p besitzt genug universelle Ein/Ausgänge, dass einige davon als zusätzliche Adressleitungen verwendet werden können. Alle Anwendungen, die von dem erweiterten Speicher profitieren wollen, müssen allerdings zusätzlichen Code zur Umschaltung der Speicherbänke enthalten. Virtueller Speicher würde das Problem vermeiden, da nur das Betriebssystem die Umschaltung vornehmen müsste. Doch das ist auf 8-Bit-Prozessoren nicht möglich.

Das RAM-Problem löste Grinberg mit einem alten 30-Pin-SIMM-Riegel, den er direkt mit dem Prozessor verband. Da das dynamische RAM periodisch aufgefrischt werden muss, ließ er den Prozessor diese Aufgabe per Interrupt ausführen. Fast 3% der CPU-Leistung werden davon aufgefressen. Die erzielbare Speicherbandbreite beträgt 300 KB/s.

Für permanenten Speicher sorgt bei Grinberg eine SD-Karte mit 1 GB. Nach seinen Angaben würden 512 MB für ein minimales Linux-System bereits genügen. Die Karte wird über ihre SPI-Schnittstelle angesprochen. Da der Entwickler bei der Nutzung der prozessoreigenen SPI-Schnittstelle auf Probleme stieß, nutzte er stattdessen weitere Ports der CPU und implementierte das Protokoll in Software. Dabei erzielt er eine Geschwindigkeit von 200 KB/s. Für die Ein- und Ausgabe wird eine serielle Schnittstelle verwendet, auf die man von einem Linux-System aus mit Minicom zugreifen kann.

Um nun Ubuntu Linux auf dieser mächtigen Hardware zum Laufen zu bekommen, musste ein Emulator herangezogen werden. Grinberg entschied sich dafür, die vergleichsweise einfache ARM-Architektur zu emulieren. Eine Portierung eines bestehenden Emulators wäre nach seiner Einschätzung nicht leichter gewesen, als ihn selbst zu schreiben, was an verschiedenen Eigenheiten des AVR-C-Compilers liegt. Der Emulator ist seinen Angaben zufolge modular, so dass er leicht erweitert werden kann, um andere Hardware-Konfigurationen zu emulieren. Den Emulator schrieb er sogar schon vor einigen Jahren, der Aufwand belief sich auf etwa ein halbes Jahr.

Linux (der Autor verwendete Ubuntu 9.04) wird im Emulator über einen mehrstufigen Bootloader gestartet und funktioniert perfekt. In Eile darf man dabei allerdings nicht sein. Ein Bootvorgang, der lediglich eine Shell startet, dauert zwei Stunden. Etwas länger dauert es, die vollständigen Init-Skripte auszuführen: Sechs Stunden. Die effektive CPU-Geschwindigkeit im Emulator liegt bei etwa 6,5 KHz, etwa 160.000 mal niedriger als ein realer ARM-Prozessor bei 1 GHz. Viel mehr dürfte auf dem mit 24 MHz getakteten AVR-Prozessor auch nicht möglich sein. Doch es ist sogar möglich, den X-Server zu starten, wenn man viel Zeit hat. Die Eingabe eines Kommandos ist aber vergleichsweise schnell. Schon nach einer Minute erhält man die Ausgabe. Ein Video, das allerdings etwas langweilig werden könnte, zeigt den Bootvorgang in seiner ganzen Pracht. Ein weiteres Video, das nur die interessanten Teile enthält und um das Dreifache beschleunigt wurde, war kurz genug, um es auf Youtube zu veröffentlichen.

Laut Grinberg ist seine Konstruktion der wahrscheinlich billigste Linux-PC und der einfachste, der selbst zusammengebaut werden kann. Für den Nachbau wird nicht einmal eine Platine benötigt. Es genügt, die Pins der Komponenten direkt miteinander zu verlöten, wenn man vorsichtig vorgeht. Der Entwickler stellt den Quellcode des Emulators und ein Disk-Image zum freien Download zur Verfügung.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung