Atari Jaguar вышла в ноябре 1993 года и обещала стать хитом благодаря 64-битной архитектуре — но провалилась. Даже CD-приставка не спасла. Тем не менее, энтузиаст по имени cakehonolulu решил портировать Linux на эту консоль. И всё ради того, «потому что можем».
В Jaguar стоит процессор Motorola 68000 — CISC с 32-битными регистрами и 16-битной шиной данных, адресная шина 24 бита, максимум 16 МБ памяти. Этот чип использовали в Macintosh, Amiga, Sega Genesis и самой Jaguar. Linux до сих пор содержит код для семейства m68k в папке arch/m68k/.
Главная проблема — у Jaguar всего 2 МБ RAM и до 6 МБ ROM (картридж). MMU нет, но Linux умеет работать без него через uClinux, который давно влит в основное ядро. Пришлось включить Flat Memory model в menuconfig.
Влезть в 2 МБ помог XIP (eXecute-In-Place): read-only секции (.text, .rodata) остаются в ROM (по адресу 0x80000), а динамические (.data, .bss) — в RAM. Ядро умеет так разбивать образ самостоятельно.
Для вывода использовали UART через DSP-чип Jerry, написав простой консольный драйвер на bitbang. Таймер взяли из того же Jerry — один из двух таймеров использовали как PIT для планировщика.
После сборки ядро не стартовало. Оказалось, что кросс-компилятор m68k-linux- из Ubuntu генерирует невыровненные обращения к памяти, а оригинальный 68000 их не обрабатывает. Пришлось собирать m68k-elf-gcc из исходников. Ещё одна проблема — ROM висит не по адресу 0x0, а по 0x80000, поэтому векторы прерываний (VBR) пришлось копировать в начало RAM отдельным memcpy.
Когда ядро наконец загрузилось, оно не нашло init-процесса — и упало. Пришлось собирать пользовательское окружение с FLAT-бинарём (ELF не работает без MMU). Утилита elf2flt отдельно не собиралась, но buildroot уже умеет делать FLAT для 68000 (спасибо проекту linuxmd, патч от мая 2026). В rootfs положили busybox, но busybox --install ел всю память — пришлось ограничиться просто sh. malloc в uClibc переключили на malloc-simple.
Итоговый образ — cpio-архив, вшитый в vmlinux. Для запуска на реальной консоли нужно сдвинуть адреса в CONFIG_ROM_START и CONFIG_ROMVEC на 8 КБ из-за заголовка картриджа. Автор также написал драйвер для Tom (графический сопроцессор Jaguar), чтобы видеть вывод на реальном железе.
Весь код лежит на GitHub: https://github.com/cakehonolulu/linux_jag. Повторить можно через buildroot с изменённой стратегией malloc и кастомным конфигом busybox.