Запуск ядра Ubuntu и ОС на собственном процессоре

Это вряд ли теоретический вопрос, так как многие уже сделали это, хотя информации об основных процессах очень мало.

Я разрабатываю пользовательский процессор на основе MIPS, на котором я хотел бы запустить Ubuntu. Я весьма озадачен тем, что делать дальше после того, как вы разработали набор инструкций и саму архитектуру компьютера. Мне нужно иметь возможность запускать ядро ​​и ОС, но как все это связано? В данный момент я занимаюсь разработкой компилятора для ядра Linux, чтобы сгенерировать соответствующий язык ассемблера. Это хороший путь? Что мне нужно делать после этого?

3
задан 24 November 2012 в 15:06

1 ответ

Чтобы иметь какой-либо шанс получить этот портированный файл, вам сначала нужно, чтобы GCC мог создавать объектный код для вашего целевого процессора, ядро ​​было написано с использованием GCC, и мы также предполагаем, что GCC используется для создания большого пространства пользователя. приложения тоже.

Затем вам также нужно написать специфичные для архитектуры части в ядре для вашего процессора и платформы. Если вы основали свой ЦП на существующих проектах MIPS, то это немного облегчает жизнь, например, если вам повезет, обработка вашего виртуального памяти может уже существовать для вашего целевого ЦП, однако вам, возможно, придется написать это с нуля, если новый дизайн.

Если вы пишете свой собственный компилятор, вам нужно, чтобы он поддерживал все специфичные для GCC расширения, которые поддерживает ядро, и их немало. Скорее всего, проще портировать GCC, чем писать свой с нуля.

Портирование ядра - это первый шаг, но для нового процессора вам нужно подумать о том, как вы будете спроектировать способ, которым пользовательское пространство выполняет системные вызовы в ядре, и вам нужно будет написать системный вызов для ядра, а также системный вызов библиотеки C пространства пользователя тоже шимс. Вы обнаружите, что нужно приложить огромные усилия, чтобы добраться до точки, в которой вы можете запустить процесс инициализации первого пользовательского пространства. Затем вам нужно будет выполнить кросс-компиляцию всех основных библиотек и утилит просто для начальной загрузки системы. Это нетривиально. Первый шаг заключается в том, чтобы иметь возможность создавать инструменты, такие как busybox, которые дают вам минимальный набор инструментов Linux, чтобы иметь возможность запустить оболочку с минимальным набором инструментов для взаимодействия с системой.

Во времена ядра 2.2 я портировал Linux и busybox на новую архитектуру (медиапроцессор VLIW) в рамках исследовательского проекта (который получил консервы), и потребовалось около года, чтобы добраться до точки, где я может загрузить ядро, запустить init и запустить busybox на последовательном TTY. И это не считая усилий, чтобы получить стабильный набор инструментов. Просто будьте осторожны, это может потребовать некоторых усилий.

0
ответ дан 24 November 2012 в 15:06

Другие вопросы по тегам:

Похожие вопросы: