[ON] Linux запущен на игровой приставке Atari Jaguar

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Linux запущен на игровой приставке Atari Jaguar

Сообщение rssbot »

Следом за портированием Linux на Sega MegaDrive реализована возможность запуска ядра Linux с набором утилит Busybox на игровой консоли Atari Jaguar, выпущенной в 1993 году. Приставка комплектовалась CPU Motorola 68000, поставлялась с 2 МБ ОЗУ и в качестве постоянного хранилища могла использовать картриджи, объёмом до 6 МБ. Устройство было оснащено двумя сопроцессорами: Tom (GPU c 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), позволяющего напрямую выполнять код ядра из ПЗУ без копирования в оперативную память.


ОЗУ на устройстве отражено по адресу 0x000000, а ПЗУ (картридж) - по адресу 0x80000, соответственно компоненты ядра Linux были разделены на две отдельные области памяти: секции .rodata и .text с константами и кодом были размещены на картридже, а секции .data и .bss с изменяемыми данными в оперативной памяти. Так как CPU 68000 ищет таблицу векторов прерываний по адресу 0x0, а ядро фактически размещается на картридже, содержимое которого отражено по адресу 0x80000, дополнительно был применён хак с копированием векторов прерываний в ОЗУ.




Проблема с отсутствием таймера в CPU Motorola 68000 была решена через задействование таймеров, используемых в DSP для синтеза звука. Данные таймеры были применены для генерации прерываний для активации планировщика задач. Для вывода сообщений ядра во время загрузки был написан отдельный драйвер консоли, осуществлявший вывод с симуляцией параллельного порта через выводы TXD и RXD, управляемые через DSP-процессор.



Для сборки компонентов пространства пользователя был задействован инструментарий Buildroot с патчами от проекта LinuxMD. Для экономии памяти при инициализации напрямую вызывалась командная оболочка "/bin/busybox sh", функция malloc в библиотеке uClibc была заменена на упрощённый вариант malloc-simple, не сохраняющий дополнительные метаданные,
а вместо полноценного загрузчика, такого как U-Boot, выполнялась прямая передача управления ядру командой "jmp $80000".











Изображение


Источник: https://www.opennet.ru/opennews/art.shtml?num=65866
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 08.07.2026 18:09, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали: