Linux è stato avviato sulla console di gioco Atari Jaguar

Dopo il porting di Linux su Sega MegaDrive, è stata realizzata la possibilità di avviare il kernel di Linux con un insieme di utilità Busybox sulla console di gioco Atari Jaguar, rilasciata nel 1993. La console era equipaggiata con una CPU Motorola 68000, fornita di 2 MB di RAM e poteva utilizzare cartucce come supporto permanente, con una capacità di fino a 6 MB. Il dispositivo era dotato di due coprocessori: Tom (GPU con architettura RISC a 32 bit + processore video a 64 bit + processore per operazioni logiche a 64 bit) e Jerry (DSP con architettura RISC a 32 bit per l'audio).

Analogamente al porting per Sega MegaDrive per eseguire il kernel di Linux sulla CPU Motorola 68000, che non ha un modulo di gestione della memoria (MMU), il kernel standard 7.2.0-rc1 è stato assemblato nella modalità 'NOMMU' utilizzata per i microcontrollori, consentendo di utilizzare un modello di memoria piatta con uno spazio indirizzabile lineare (in precedenza, le soluzioni per il funzionamento senza MMU erano state sviluppate in un fork del kernel uClinux, ma poi sono state integrate nel kernel principale sotto forma di opzione 'NOMMU'). Il problema della scarsità di RAM è stato affrontato diversamente, sfruttando il meccanismo execute-in-place (XIP), che consente di eseguire direttamente il codice del kernel dalla ROM senza copiarlo nella RAM.

La RAM sul dispositivo è mappata all'indirizzo 0x000000, mentre la ROM (cartuccia) è all'indirizzo 0x80000; di conseguenza, i componenti del kernel di Linux sono stati divisi in due aree di memoria separate: le sezioni .rodata e .text con costanti e codice sono state collocate sulla cartuccia, mentre le sezioni .data e .bss con dati modificabili si trovano nella RAM. Poiché la CPU 68000 cerca la tabella dei vettori di interruzione all'indirizzo 0x0, e il kernel è effettivamente posizionato sulla cartuccia, il cui contenuto è mappato all'indirizzo 0x80000, è stato applicato anche un hack per copiare i vettori di interruzione nella RAM.

Il problema della mancanza di un timer nella CPU Motorola 68000 è stato risolto sfruttando i timer utilizzati nel DSP per la sintesi del suono. Questi timer sono stati utilizzati per generare interruzioni per attivare lo scheduler. Per il log delle informazioni del kernel durante il caricamento, è stato scritto un driver della console separato, che realizzava l'output simulando una porta parallela attraverso i pin TXD e RXD, controllati tramite il processore DSP.

Per l'assemblaggio dei componenti dello spazio utente è stato utilizzato lo strumento Buildroot con le patch del progetto LinuxMD. Per risparmiare memoria durante l'inizializzazione, è stata chiamata direttamente la shell «/bin/busybox sh», la funzione malloc della libreria uClibc è stata sostituita con una versione semplificata malloc-simple, che non conserva metadati aggiuntivi, e invece di un bootloader completo, come U-Boot, è stato effettuato un passaggio diretto al kernel con il comando «jmp $80000».



Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster