След като Linux беше портирован на Sega MegaDrive, стана възможно стартирането на ядрото на Linux с набор от утилити Busybox на игровата конзола Atari Jaguar, която беше пусната през 1993 година. Конзолата беше оборудвана с CPU Motorola 68000, предлагана с 2 MB RAM и като постоянно хранилище можеше да използва картриджи с капацитет до 6 MB. Устройството имаше два сопроцесора: Tom (GPU с 32-битова архитектура RISC + 64-битов видео процесор + 64-битов процесор за логически операции) и Jerry (DSP с 32-битова архитектура RISC за работа със звук).
По аналогия с порта за Sega MegaDrive за изпълнение на ядрото Linux на CPU Motorola 68000, който няма хардуерен модул за управление на паметта (MMU), стандартното ядро 7.2.0-rc1 беше компилирано в режима на работа без MMU, позволяващ използването на плоска модел на паметта с линейно адресно пространство (по-рано разработките за работа без MMU бяха развити в форка на ядрото uClinux, но след това бяха приети в основния състав на ядрото под формата на опцията «NOMMU»). Проблемът с недостига на оперативна памет беше решен по различен начин, чрез активиране на механизма execute-in-place (XIP), позволяващ директно изпълнение на кода на ядрото от ROM без копиране в оперативната памет.
RAM на устройството е отразена на адрес 0x000000, а ROM (картридж) — на адрес 0x80000, съответно компонентите на ядрото Linux са разделени на две отделни области на паметта: секции .rodata и .text с константи и код бяха разположени на картриджа, а секции .data и .bss с променливи данни в оперативната памет. Тъй като CPU 68000 търси таблицата на векторите на прекъсванията на адрес 0x0, а ядрото всъщност се разполага на картриджа, чийто адрес е 0x80000, допълнително беше приложен хак с копиране на векторите на прекъсванията в RAM.
Проблемът с липсата на таймер в CPU Motorola 68000 беше решен чрез използване на таймерите, използвани в DSP за синтез на звук. Тези таймери бяха използвани за генериране на прекъсвания за активиране на планировчика на задачи. За извеждане на съобщенията на ядрото по време на зареждане беше написан отделен драйвер на конзолата, който осъществяваше извеждането чрез симулация на паралелен порт чрез изходите TXD и RXD, управлявани чрез DSP процесора.
За изграждането на компонентите на пространството на потребителя беше използван инструментариумът Buildroot с пачове от проекта LinuxMD. За спестяване на памет при инициализация беше извикана командната обвивка "/bin/busybox sh", функцията malloc в библиотеката uClibc беше заменена с опростената версия malloc-simple, която не запазва допълнителни метаданни, а вместо полноценен бутлодер, като U-Boot, беше направен директен трансфер на управлението на ядрото с командата "jmp $80000".

Източник: opennet.ru
