Портирование ядра на другую архитектуру? - PullRequest
6 голосов
/ 23 декабря 2011

Я хочу перенести ядро ​​xnu на архитектуру ARM с конечной целью - иметь возможность запустить полное ядро ​​внутри Qemu.Хотя я понимаю, что это очень трудная задача, я все же хочу попробовать ее.

Насколько я знаю, вы должны написать точку входа для ядра (osfmk/arm/start.s), где вы выполняете общую инициализацию (MMU и PlatformExpert), после чего могут быть запущены подсистемы Kext / IOKit изагружать специфичные для CPU расширения (т. е. traps, GPIO, clock), которые либо предварительно связаны с двоичным файлом, либо загружаются загрузчиком (, поскольку ядро ​​не может взаимодействовать с файловой системой из-за того, что расширения NAND еще не доступны ).

Хотя у меня есть общее представление о том, как работают процессоры ARM, я даже не знаю, с чего начать с порта xnu, потому что я не совсем уверен, как:

  • Выполнение низкоуровневой отладки (поскольку средства отладки ядра недоступны на ранних этапах запуска).
  • Интегрируйте ветвь ARM с остальной частью исходного дерева ядра (т.е. убедитесь, что всев osfmk/kern работает).
  • Создание разумной среды для запуска независимого от платформы ядра (machine_startup());
  • Исправление некоторых специфичных для платформы кодовОн находится внутри основного кода ядра (большая часть кода платформы ограничена osfmk/platform_name, но некоторые из них должны быть интегрированы в osfmk/kern и другие).

Существуют ли приличные руководства по портированиюядро XNU (или, по крайней мере, Mach ) для разных платформ, как есть руководства для Linux?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Не могу дать вам ответ, но несколько подсказок:

«Большие парни» выполняют такую ​​работу в системе с подключенным специальным аппаратным обеспечением, которое позволяет циклически обрабатывать процессор, проверять регистры и т. Д. И они могут выполнять большую часть работы на эмуляторе, который имеет те же услуги. Настройка аппаратного отладчика, вероятно, находится за пределами ваших возможностей для сборки (и немного дорогостоящей для покупки), но эмулятор полностью выполним (и именно так Гейтс и Аллен начали работу над Altair BASIC - если бы Аллен не написал эмулятор, Гейтс все еще буду играть в видеоигры в Гарварде).

Если не считать полного отладчика, если у вас подключен какой-либо символьный дисплей, вы можете встраивать инструкции в отлаживаемый код, чтобы записывать символы на экран по мере выполнения кода. Путь A может писать «A» в следующем месте (индекс хранится в зарезервированном слове памяти где-то), в то время как путь B будет писать «B» и т. Д. Очень грубый, но иногда бывает достаточно, чтобы обойтись для небольших проектов.

Так что я бы рекомендовал сначала написать эмулятор. В любом случае, это хороший способ познакомиться с процессором.

(Что касается интеграции, я всегда просто говорю: «Привет, Джереми! Интегрируй это для меня, не так ли?»)

1 голос
/ 11 февраля 2012

Вы столкнетесь с небольшой проблемой, так как не весь исходный код доступен. Часть исходного кода эксперта по платформе доступна как часть исходников xnu, однако com.apple.driver.AppleACPIPlatform.kext нет.

...