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