Nach der Portierung von Linux auf die Sega MegaDrive wurde die Möglichkeit realisiert, den Linux-Kernel mit einer Sammlung von Busybox-Dienstprogrammen auf der Spielkonsole Atari Jaguar zu starten, die 1993 auf den Markt kam. Die Konsole war mit einer Motorola 68000 CPU ausgestattet, hatte 2 MB RAM und konnte als permanentes Speichermedium bis zu 6 MB groĂe Cartridges verwenden. Das GerĂ€t war mit zwei Co-Prozessoren ausgestattet: Tom (GPU mit 32-Bit RISC-Architektur + 64-Bit Videoverarbeitungsprozessor + 64-Bit Logikverarbeitungsprozessor) und Jerry (DSP mit 32-Bit RISC-Architektur fĂŒr die Arbeit mit Sound).
Analog zum Port fĂŒr die Sega MegaDrive zur AusfĂŒhrung des Linux-Kernels auf der Motorola 68000 CPU, die ĂŒber keinen Hardware-Speicherverwaltungseinheit (MMU) verfĂŒgt, wurde der Standardkernel 7.2.0-rc1 im fĂŒr Mikrocontroller eingesetzten Modus âNOMMUâ erstellt, der die Verwendung eines flachen Speichermodells mit linearem Adressraum ermöglicht (frĂŒhere Entwicklungen zur MMU-freien Nutzung wurden in einem Fork des uClinux-Kernels entwickelt, aber spĂ€ter in den Hauptkernel als âNOMMUâ-Option integriert). Das Problem des begrenzten RAM wurde auf andere Weise gelöst, indem der Mechanismus des Execute-in-Place (XIP) verwendet wurde, der die direkte AusfĂŒhrung des Kerncodes aus dem ROM ohne Kopieren in den RAM ermöglicht.
Der RAM des GerÀts ist unter der Adresse 0x000000 abgebildet, wÀhrend das ROM (Cartridge) unter der Adresse 0x80000 abgebildet ist, wodurch die Komponenten des Linux-Kernels in zwei separate Speicherbereiche unterteilt wurden: Die .rodata- und .text-Sektionen mit Konstanten und Code wurden auf der Cartridge platziert, wÀhrend die .data- und .bss-Sektionen mit verÀnderlichen Daten im RAM gespeichert wurden. Da die CPU 68000 die Interrupt-Vektor-Tabelle an der Adresse 0x0 sucht, wÀhrend der Kernel tatsÀchlich auf der Cartridge gespeichert ist, deren Inhalt unter der Adresse 0x80000 abgebildet ist, wurde zusÀtzlich ein Hack implementiert, um die Interrupt-Vektoren in den RAM zu kopieren.
Das Problem des fehlenden Timers in der Motorola 68000 CPU wurde gelöst, indem die in der DSP zur Klangsynthese verwendeten Timer verwendet wurden. Diese Timer wurden zur Generierung von Interrupts eingesetzt, um den Task-Scheduler zu aktivieren. FĂŒr die Ausgabe von Kernel-Nachrichten wĂ€hrend des Bootvorgangs wurde ein separater Konsolentreiber geschrieben, der die Ausgabe ĂŒber eine Simulation des parallelen Ports ĂŒber die AnschlĂŒsse TXD und RXD steuerte, die ĂŒber den DSP-Prozessor verwaltet wurden.
FĂŒr den Zusammenbau der Komponenten des Benutzerraums wurde das Buildroot-Toolkit mit Patches vom LinuxMD-Projekt verwendet. Um den Speicher bei der Initialisierung zu sparen, wurde direkt die Kommandozeile â/bin/busybox shâ aufgerufen, die malloc-Funktion in der uClibc-Bibliothek wurde durch eine vereinfachte Version malloc-simple ersetzt, die keine zusĂ€tzlichen Metadaten speichert, und anstelle eines vollwertigen Bootloaders wie U-Boot wurde die direkte Ăbergabe der Kontrolle an den Kernel mit dem Befehl âjmp $80000â vorgenommen.

Quelle: opennet.ru
