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
