Linux läuft auf der Spielkonsole Atari Jaguar

Nach der Portierung von Linux auf die Sega MegaDrive wurde die Möglichkeit geschaffen, den Linux-Kernel zusammen mit einer Sammlung von Busybox-Dienstprogrammen auf der Spielkonsole Atari Jaguar, die 1993 veröffentlicht wurde, auszuführen. Die Konsole war mit einem Motorola 68000 CPU ausgestattet, verfügte über 2 MB RAM und konnte als permanenter Speicher Cartridge mit einem Volumen von bis zu 6 MB verwenden. Das Gerät war mit zwei Co-Prozessoren ausgestattet: Tom (GPU mit 32-Bit-RISC-Architektur + 64-Bit-Videoprozessor + 64-Bit-Prozessor für logische Operationen) und Jerry (DSP mit 32-Bit-RISC-Architektur für die Verarbeitung von Audio).

Ähnlich wie beim Sega MegaDrive-Port für den Betrieb des Linux-Kernels auf einer Motorola 68000-CPU ohne Hardware-Speicherverwaltungsmodul (MMU) wurde das Standardkernel 7.2.0-rc1 im für Mikrocontroller verwendeten "NOMMU"-Modus kompiliert, der es ermöglicht, das flache Speichermodell mit linearem Adressraum zu nutzen (frühere Entwicklungen für den Betrieb ohne MMU wurden in einem Fork des uClinux-Kernels vorangetrieben, fanden aber später in Form der Option "NOMMU" Aufnahme in den Hauptkernel). Das Problem des Speichermangels wurde auf andere Weise gelöst, indem der Mechanismus Executable-in-Place (XIP) eingesetzt wurde, der es ermöglicht, den Kernel-Code direkt aus dem ROM auszuführen, ohne ihn in den Hauptspeicher kopieren zu müssen.

Der RAM des Geräts ist unter der Adresse 0x000000 abgebildet, während der ROM (Cartridge) unter der Adresse 0x80000 abgebildet ist. Die Komponenten des Linux-Kernels wurden in zwei separate Speicherbereiche unterteilt: Die .rodata- und .text-Sektionen, die Konstanten und Code enthalten, befinden sich auf der Cartridge, während die .data- und .bss-Sektionen, die veränderliche Daten enthalten, im RAM liegen. Da der CPU 68000 die Interrupt-Vektortabelle an der Adresse 0x0 sucht und der Kernel tatsächlich auf der Cartridge platziert ist, deren Inhalt an der Adresse 0x80000 abgebildet ist, wurde zusätzlich ein Hack angewendet, um die Interrupt-Vektoren in den RAM zu kopieren.

Das Problem des fehlenden Timers im Motorola 68000 CPU wurde durch die Nutzung der Timer gelöst, die im DSP zur Klangsynthetisierung verwendet werden. Diese Timer wurden verwendet, um Interrupts zur Aktivierung des Taskplaners zu generieren. Für die Ausgabe von Kernel-Nachrichten während des Bootvorgangs wurde ein separater Konsolentreiber geschrieben, der die Ausgabe simulierte, indem er über die TXD- und RXD-Pins, die über den DSP-Prozessor gesteuert werden, mit dem parallelen Port kommunizierte.

Für die Zusammenstellung der Benutzerraumkomponenten wurde das Buildroot-Toolset mit Patches vom LinuxMD-Projekt verwendet. Um den Speicherbedarf bei der Initialisierung zu reduzieren, wurde die Kommandozeile „/bin/busybox sh“ direkt aufgerufen, und die Funktion malloc in der uClibc-Bibliothek wurde durch eine vereinfachte Version, malloc-simple, ersetzt, die keine zusätzlichen Metadaten speichert. Anstelle eines vollwertigen Bootloaders wie U-Boot wurde eine direkte Übergabe an den Kernel mit dem Befehl „jmp $80000“ ausgeführt.



Quelle: opennet.ru
Zuverlässiges Website-Hosting mit DDoS-Schutz, VPS- und VDS-Server 🔥 Zuverlässiges Website-Hosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster