Linux е стартиран на игровата конзола Atari Jaguar

След портировката на 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 беше компилирано в режим "NOMMU" предназначен за микроконтролери, позволяващ използването на плоска модел на паметта с линейно адресно пространство (по-рано разработките за работа без 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
Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster