На игровой консоли Atari Jaguar 1993 года удалось запустить Linux. Очередной пример из серии «потому что можем». Разработчик Джоэль Буэно опубликовал подробный материал, демонстрирующий работу ядра Linux 7.2.0-rc1 на Atari Jaguar с минимальным окружением на основе BusyBox.
Краткий экскурс в историю: Atari Jaguar появилась в Северной Америке в ноябре 1993 года и рекламировалась как игровая система с сомнительной «64-битной» мощностью. Внутри установлены процессор Motorola 68000, 2 МБ ОЗУ, картриджная ПЗУ по адресу 0x80000 и два фирменных чипа Tom и Jerry. Tom отвечает за графику, а Jerry — за цифровую обработку сигнала, такую как таймеры и последовательные линии.

Самая большая проблема, по словам разработчика, заключалась в отсутствии блока управления памятью (MMU) у Motorola 68000. Соответственно, стандартная конфигурация Linux с виртуальной памятью не работала бы. К счастью, Linux поддерживает системы m68k без MMU через опцию uClinux/NOMMU и плоскую модель памяти.
Ещё одной трудностью стало размещение ядра. При всего 2 МБ ОЗУ загрузить всё в память нельзя. Решением стал механизм XIP (execute-in-place): доступные только для чтения части ядра, такие как код и константы, остаются на картридже, а изменяемые секции размещаются в ОЗУ.
На практике ядро разделяется на две области памяти. Секции .text и .rodata остаются на картридже, а .data и .bss загружаются в ОЗУ. Linux управляет необходимой переадресацией, как только определяет расположение ОЗУ и ПЗУ.
Консоль также не имеет привычного для Linux таймера, который есть на обычных компьютерах. Для решения этой проблемы в порте задействованы таймеры DSP Jerry, изначально предназначенные для звуковых задач. Теперь они генерируют прерывания, необходимые планировщику Linux.
Для раннего вывода отладочных сообщений разработчик написал небольшой драйвер консоли, использующий пины TXD и RXD DSP Jerry. Позже добавили простой консольный драйвер для Tom, чтобы можно было тестировать сборку на реальном оборудовании.
После того как ядро достигало этапа поиска пользовательского окружения, снова вставала проблема памяти. Сборка использует Buildroot и BusyBox, а вместо ELF применяются бинарные файлы в формате FLAT из-за отсутствия MMU. Даже в этом случае стандартная настройка BusyBox оказывалась слишком тяжёлой, поэтому init-скрипт напрямую запускает /bin/busybox sh.
Библиотеку C также пришлось урезать. К тому же здесь нет U-Boot или полноценного загрузчика. Всё сделано максимально просто: после подготовки образа управление сразу передаётся ядру переходом на адрес, привязанный к картриджу. На реальном железе итоговый бинарный файл также должен включать заголовок картриджа Jaguar и фиксированные смещения ПЗУ.
Что же получает конечный пользователь? Всего лишь командную оболочку. Очень маленькую. Но этого достаточно, чтобы показать: Linux может загружаться даже на таком устройстве, как Atari Jaguar, всего с 2 МБ ОЗУ, без MMU, с картриджной ПЗУ, минимальным окружением BusyBox и множеством платформозависимых правок.
Конечно, для большинства людей это ничего не меняет. Никто не станет превращать Atari Jaguar в полезный Linux-компьютер. Но как демонстрация гибкости Linux и того, насколько далеко могут зайти разработчики в работе со старым железом, это отличное ретро-компьютерное достижение.
Подробности, включая заметки по конфигурации и модифицированное дерево исходников Linux, доступны в оригинальной статье Буэно.




Пока нет комментариев. Будьте первым!