Linux draait op de spelcomputer Atari Jaguar

Na de portering van Linux naar de Sega MegaDrive werd de mogelijkheid geïmplementeerd om de Linux-kernel met een set Busybox-hulpmiddelen te draaien op de Atari Jaguar, die in 1993 werd uitgebracht. De console was uitgerust met een Motorola 68000 CPU, werd geleverd met 2 MB RAM en kon cartridges gebruiken met een opslagcapaciteit tot 6 MB. Het apparaat had twee coprocessoren: Tom (GPU met een 32-bits RISC-architectuur + 64-bits videoprocessor + 64-bits logische processor) en Jerry (DSP met een 32-bits RISC-architectuur voor geluidsverwerking).

Analog aan de port voor de Sega MegaDrive, om de Linux-kernel op de Motorola 68000 CPU uit te voeren, die geen hardwarematig geheugenmanagementunit (MMU) heeft, werd de standaardkernel 7.2.0-rc1 samengesteld in de 'NOMMU'-modus die voor microcontrollers werd gebruikt, waardoor een vlak model van geheugen met een lineaire adresruimte kon worden gebruikt (eerder werd er gewerkt aan een variant zonder MMU in een fork van de uClinux-kernel, maar deze werd later als optie 'NOMMU' in de hoofdversie van de kernel opgenomen). Het probleem van het gebrek aan RAM werd anders opgelost, door gebruik te maken van de execute-in-place (XIP) mechanisme, waardoor de kernelcode direct vanuit het ROM kon worden uitgevoerd zonder deze naar het RAM te kopiëren.

Het RAM op het apparaat is geadresseerd op 0x000000, terwijl het ROM (cartridge) op het adres 0x80000 is, waardoor de componenten van de Linux-kernel in twee aparte geheugensegmenten zijn verdeeld: de .rodata en .text secties met constanten en code zijn op de cartridge geplaatst, terwijl de .data en .bss secties met veranderlijke gegevens in het RAM zijn geplaatst. Aangezien de CPU 68000 de interrupt vector tabel zoekt op adres 0x0, en de kernel feitelijk op de cartridge is geplaatst, waarvan de inhoud is geadresseerd op 0x80000, werd er bovendien een hack toegepast om de interrupt vectoren naar het RAM te kopiëren.

Het probleem van het ontbreken van een timer in de Motorola 68000 CPU werd opgelost door gebruik te maken van timers die in de DSP voor geluidssynthese worden gebruikt. Deze timers werden toegepast om interrupts te genereren voor het activeren van de taakplanner. Voor het weergeven van kernelberichten tijdens het opstarten werd een aparte console-driver geschreven die de output simuleerde via een seriële poort met behulp van de TXD en RXD pinnen, aangestuurd via de DSP-processor.

Voor het samenstellen van de gebruikersruimte werd de Buildroot-toolkit met patches van het LinuxMD-project gebruikt. Om geheugen te besparen, werd de command shell '/bin/busybox sh' direct aangeroepen, de functie malloc in de uClibc-bibliotheek werd vervangen door een vereenvoudigde versie, malloc-simple, die geen extra metadata opslaat, en in plaats van een volledige bootloader zoals U-Boot, werd de controle rechtstreeks aan de kernel overgedragen met de opdracht 'jmp $80000'.



Bron: opennet.ru
Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster