Домой Статьи и аналитика Технологии Linux запущен на игровой приставке Atari Jaguar

Linux запущен на игровой приставке Atari Jaguar

Система работает на процессоре Motorola 68000 в режиме NOMMU, используя механизм выполнения кода из ПЗУ для экономии оперативной памяти.

Следом за портированием Linux на Sega MegaDrive была реализована возможность запуска ядра Linux с набором утилит Busybox на игровой консоли Atari Jaguar, выпущенной в 1993 году. Приставка была оснащена центральным процессором Motorola 68000, имела на борту 2 МБ оперативной памяти и поддерживала использование картриджей объемом до 6 МБ в качестве постоянного хранилища. Устройство также включало два мощных для своего времени сопроцессора: Tom (GPU с 32-разрядной архитектурой RISC, 64-битным видеопроцессором и 64-битным логическим процессором) и Jerry (DSP с 32-разрядной RISC-архитектурой для обработки звука).

Технические особенности портирования

По аналогии с портом для Sega MegaDrive, для работы ядра Linux на процессоре Motorola 68000, который лишен аппаратного модуля управления памятью (MMU), было использовано ядро версии 7.2.0-rc1. Оно было скомпилировано в режиме «NOMMU», предназначенном для микроконтроллеров и позволяющем работать с плоской моделью памяти и линейным адресным пространством. Проблема критической нехватки оперативной памяти была решена с помощью механизма execute-in-place (XIP), который позволяет исполнять код ядра непосредственно из ПЗУ, минуя этап копирования в ОЗУ.

Организация памяти и системные хаки

Так как ОЗУ в системе отражено по адресу 0×000000, а ПЗУ (картридж) — по адресу 0×80000, компоненты ядра Linux были разделены на две зоны: секции .text и .rodata, содержащие код и константы, разместили на картридже, а секции .data и .bss с изменяемыми данными — в оперативной памяти. Поскольку процессор 68000 ожидает таблицу векторов прерываний по адресу 0×0, а ядро находится в области картриджа, разработчикам пришлось применить специальный хак с копированием векторов прерываний в ОЗУ.

Для решения проблемы отсутствия таймера в архитектуре Motorola 68000 были задействованы таймеры звукового DSP-процессора, которые теперь генерируют прерывания для активации планировщика задач. Вывод системных сообщений ядра при загрузке обеспечивает специально написанный драйвер консоли, имитирующий работу параллельного порта через выводы TXD и RXD, управляемые тем же DSP.

Сборка и оптимизация

Для создания окружения пользователя применялся инструментарий Buildroot с набором патчей от проекта LinuxMD. Чтобы максимально сэкономить память, загрузка осуществляется напрямую через командную оболочку «/bin/busybox sh», а стандартная функция malloc в библиотеке uClibc была заменена на облегченный вариант malloc-simple, не требующий хранения лишних метаданных. Вместо использования полноценного загрузчика уровня U-Boot управление ядру передается командой «jmp $80000».

Консоль Atari Jaguar с запущенным Linux
Запуск Linux на приставке Atari Jaguar Источник: opennet.ru
Источник: http://www.opennet.ru