Что вообще представляет собой Atari Jaguar?
Дебютировавшая в Северной Америке осенью 1993 года, эта консоль позиционировалась как технологический прорыв благодаря своей (весьма дискуссионной) 64-битной архитектуре.

В конечном счете приставка потерпела фиаско на рынке. Даже выпуск периферийного модуля Jaguar CD, призванного составить конкуренцию Sony PlayStation и Sega Saturn, не исправил ситуацию — устройство продавалось крайне слабо.

Зачем здесь Linux?
Любопытно, что в ядре Linux по сей день сохраняется поддержка семейства процессоров Motorola 68000: от 68010 до 68040, включая классический 68000. Все необходимые исходники аккуратно разложены в директории arch/m68k/.
Напомню, что Motorola 68000 — это CISC-процессор со смешанной 16/32-битной архитектурой. Его часто называют 32-битным из-за ширины регистров, хотя шина данных у него 16-битная, что ограничивает передачу двумя байтами за такт.
Благодаря 24-битной адресной шине процессор мог работать максимум с 16 МБ оперативной памяти. Чип был выпущен в 1979 году и стал ответом на конкурентные 16-битные решения того времени.

Процессор получил широкое распространение и лег в основу множества устройств: от легендарных Macintosh и Amiga до Sega Genesis, Neo-Geo AES и, конечно, Atari Jaguar. А ответ на вопрос «зачем портировать Linux на эту консоль» прост: потому что это технически возможно (ну, почти).
jmp_linux?
Казалось бы, запуск порта для m68k должен пройти как по маслу, но на практике всё гораздо сложнее. Существует распространенный стереотип, что для Linux критически важен MMU (блок управления памятью) для работы с виртуальной адресацией. Технически это так, но проект uClinux давно решил эту проблему, обеспечив поддержку систем без MMU, и эти наработки были интегрированы в основную ветку ядра.
Казалось бы, достаточно настроить конфигурацию ядра (menuconfig), отключив MMU и выбрав плоскую модель памяти, — и готово. Но не всё так просто.
Что скрывается за «прыжком» в Linux?
В архитектуре Jaguar доступно 2 МБ ОЗУ (начиная с адреса 0x000000) и до 6 МБ ПЗУ картриджа (с адреса 0x80000). Также в адресное пространство отображаются специфические контроллеры Tom и Jerry. Основное ограничение — жесткий лимит доступной памяти.
Чтобы вписаться в эти рамки, пришлось оптимизировать ядро, удалив лишний отладочный код и неиспользуемые функции. Решением стала стратегия XIP (eXecute-In-Place): исполняемый код ядра (.text, .rodata) размещается непосредственно в ПЗУ, а динамические переменные (.data, .bss) — в оперативной памяти.
Что нужно для старта?
Для загрузки ядра необходимы два компонента: механизм вывода сообщений и таймер для планировщика.
Для вывода сообщений идеально подошел UART. Контакты TXD/RXD на DSP Jerry можно перенастроить на последовательную передачу данных — этого достаточно для отладки через earlyprintk. Для работы системного таймера (PIT) задействованы прерывания от процессора Jerry, что позволяет планировщику Linux «тикать» в нормальном режиме.
В процессе возникла неожиданная трудность: кросс-компилятор из репозиториев Ubuntu генерировал обращения к невыровненной памяти, что приводило к краху системы. Использование самосборного m68k-elf-gcc решило проблему.
Кроме того, возник конфликт с векторами прерываний, так как ПЗУ смещено по адресу 0x80000. Пришлось реализовать механизм копирования векторов в нулевой адрес ОЗУ, чтобы процессор не «терялся» при старте.
Linux version 7.2.0-rc1+ (cakehonolulu@jaguar) (m68k-elf-gcc (GCC) 16.1.0, GNU ld (GNU Binutils) 2.46.1) #38 Sun Jul 5 11:56:37 CEST 2026
printk: legacy bootconsole [early_jerry0] enabled
uClinux with CPU MC68000
Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne
...
Calibrating delay loop... 1.04 BogoMIPS (lpj=5248)
...
Ядро успешно загрузилось, однако возникла новая преграда — запуск init-процесса.
Пользовательское пространство
Поскольку мы работаем в режиме без MMU, приходится использовать формат плоских бинарных файлов (flat binaries) вместо ELF. Это потребовало настройки инструментария сборки и использования Busybox, который корректно работает в таких условиях.
Чтобы избежать нехватки памяти (OOM), пришлось скомпилировать libc с упрощенной стратегией выделения памяти (malloc-simple), так как стандартные методы потребляли слишком много ресурсов для хранения метаданных.

В итоге, с помощью патчей для NOMMU и оптимизации файловой системы, система успешно запускает командную оболочку. Все наработки, включая конфигурационные файлы для ядра и Busybox, доступны в репозитории: https://github.com/cakehonolulu/linux_jag
Этот эксперимент — логическое продолжение интереса к запуску современных систем на ретро-железе, подобных проекту LinuxMD для Sega Mega Drive, доказывающее, что даже 16-битная архитектура 40-летней давности способна исполнять Linux.


