Linux foi iniciado no console de jogos Atari Jaguar

Após a portação do Linux para a Sega MegaDrive, foi implementada a possibilidade de executar o núcleo do Linux com um conjunto de utilitários Busybox no console de jogos Atari Jaguar, lançado em 1993. O console era equipado com um CPU Motorola 68000, tinha 2 MB de RAM e podia utilizar cartuchos com capacidade de até 6 MB como armazenamento permanente. O dispositivo contava com dois coprocessadores: Tom (GPU com arquitetura RISC de 32 bits + processador de vídeo de 64 bits + processador de 64 bits para execução de operações lógicas) e Jerry (DSP com arquitetura RISC de 32 bits para trabalho com áudio).

Analogamente à portação para a Sega MegaDrive para a execução do núcleo Linux no CPU Motorola 68000, que não possui um módulo de gerenciamento de memória (MMU), o núcleo padrão 7.2.0-rc1 foi montado no modo "NOMMU" utilizado para microcontroladores, permitindo o uso de um modelo de memória plana com espaço de endereçamento linear (anteriormente, os desenvolvimentos para operação sem MMU tinham sido desenvolvidos em um fork do núcleo uClinux, mas foram posteriormente aceitos no núcleo principal na forma da opção "NOMMU"). O problema da escassez de memória foi resolvido de outra forma, através da utilização do mecanismo execute-in-place (XIP), que permite a execução direta do código do núcleo a partir da ROM sem a cópia para a memória RAM.

A RAM no dispositivo está mapeada para o endereço 0x000000, e a ROM (cartucho) para o endereço 0x80000, respectivamente, os componentes do núcleo Linux foram divididos em duas áreas de memória separadas: as seções .rodata e .text com constantes e código foram alocadas no cartucho, enquanto as seções .data e .bss com dados mutáveis estão na memória RAM. Como o CPU 68000 busca a tabela de vetores de interrupção no endereço 0x0, e o núcleo está, de fato, situado no cartucho, cujo conteúdo está mapeado para o endereço 0x80000, um hack foi adicionalmente aplicado copiando os vetores de interrupção para a RAM.

O problema da ausência de um timer no CPU Motorola 68000 foi resolvido através da utilização de timers usados no DSP para síntese de áudio. Esses timers foram aplicados para gerar interrupções para ativar o escalonador de tarefas. Para a saída de mensagens do núcleo durante a inicialização, um driver de console separado foi escrito, que realizava a saída simulando uma porta paralela através dos pinos TXD e RXD, controlados pelo processador DSP.

Para montar os componentes do espaço do usuário, foi utilizada a ferramenta Buildroot com patches do projeto LinuxMD. Para economizar memória na inicialização, a shell foi chamada diretamente com o comando "\/bin\/busybox sh", a função malloc na biblioteca uClibc foi substituída por uma versão simplificada chamada malloc-simple, que não armazena metadados adicionais, e ao invés de um carregador completo como o U-Boot, foi feita uma transferência direta de controle para o núcleo com o comando "jmp $80000".



Fonte: opennet.ru
Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster