Написание ОС с UEFI - программирование
Подтвердить что ты не робот

Написание ОС с UEFI

В последнее время я не очень много кодирую из-за школы, но решил, что хочу снова начать работу над разработкой ОС. Недавно я слышал о EFI в качестве замены BIOS. Я хочу разработать ОС для платформы, использующей EFI, а не BIOS. Мне трудно понять, с чего начать. Может кто-то указать мне верное направление? Возможно, объясните, что означает EFI для разработки ОС и, возможно, расскажите, какие тестовые среды (желательно виртуальные) я могу использовать. Честно говоря, я не совсем уверен, что такое EFI. Также мне нужно инвестировать время в сборку ARM? Я знаю x86 Assembly, но я чувствую, что это тоже устаревает. Я действительно потерян, и я хотел бы услышать ваш вход.

Спасибо

4b9b3361

Ответ 1

EFI является предшественником UEFI, и это то, что люди фактически используют, хотя они по-прежнему относятся к вещам EFI. Вы можете получить спецификации, указанные в uefi.org.

Спецификация UEFI определяет все, что может потребоваться загрузчик. Спецификации PI определяют интерфейсы для поставщиков кремния для использования в переносимости их кода в отрасли. Таким образом, вы узнаете об ОС, например, о Win8, требующей соблюдения определенной версии UEFI Specification, например 2.3.1c, для некоторых функций, таких как безопасная загрузка. Все это говорит о том, что EFI не заменяет BIOS так же, как стал стандартом, который BIOS должен соблюдать для поддержки некоторых операционных систем.

Место для начала работы (после получения копии спецификаций) проект TianoCore на SourceForge. Один из проектов - OVMF, который является целью виртуальной машины для UEFI. Вы также можете посмотреть на цель NT32 для запуска командной строки под окнами. Это действительно отличные инструменты для использования, когда вы хотите создать приложение, такое как загрузчик, который находится поверх интерфейсов UEFI.

Что касается учебной сборки, я не рекомендую вам начинать там. Нам так много нужно знать, и часть причины, по которой мы создали UEFI, - это то, что новые программисты могут работать на C вместо ASM. В UEFI есть несколько мест, где мы используем ASM, но система сборки обрабатывает детали для сплайсинга, которые вам нужны, и вам вообще не нужен ни сложный контроль состояния процессора, ни производительность, которую вы могли бы получить от написания КАК М. Единственная причина, по которой вы это сделаете, - это размер, и поскольку остальная часть BIOS будет в C, это будет своего рода поражением цели, если вы не перепишете все это в ASM, что никто не собирается делать. Сосредоточьтесь на изучении спецификаций и способах их использования для написания собственных приложений UEFI.

Ответ 2

Поздний ответ на этот вопрос, но я могу добавить следующие моменты, если вы не обнаружили их в среднем:

Возможно, объясните, что означает EFI для разработки ОС.

Собственно, не так много. Ну, может быть, немного. Хорошо, позвольте объяснить. UEFI обеспечивает среду прошивки для этапа предварительной загрузки. Он также предоставляет некоторые службы времени выполнения для операционной системы, однако ожидается, что операционная система, а не прошивка UEFI, в конечном итоге будет управлять системой - эти службы позволяют выполнять различные связанные с загрузкой операции - пример.

Поверхность заключается в том, что если вы готовы использовать загрузчик, который соответствует multiboot 2, вам действительно не нужно ничего знать о UEFI - загрузчик будет загрузите в соответствии с спецификацией multiboot, затем вызовите ExitBootServices(), который в терминах UEFI разрушает среду прошивки.

Можно создать ядро ​​Linux с заглушкой EFI и, следовательно, загружать "без" загрузчика - этот блог показывает вам, как. Вы можете сделать это для своего ядра - вам просто нужно создать ядро ​​PE/COFF, соответствующее битте прошивки.

и, возможно, скажите мне, какие тестовые среды (желательно виртуальные) я могу

Если вы можете позволить себе Рабочую станцию ​​VMWare, это поможет вам в массовом порядке. Помимо включения заглушки gdb, чтобы вы могли отлаживать любую часть чего-либо, вы также можете редактировать файлы определения виртуальной машины (*.vmx), содержащие

firmware="efi"

и voila, VMWare загрузит полностью работоспособную среду UEFI. Работает с Linux и Windows.

В разных сообщениях по всему миру упоминаются установки QEMU и, конечно же, VirtualBox. Я никогда лично не успешно загружал любую существующую систему на платформе VirtualBox EFI, и я не пробовал QEMU, хотя я считаю, что это и другие другие эмуляторы там, вероятно, работают.

Также мне нужно инвестировать время в сборку ARM?

Это зависит от ваших целей. Что касается сборки, я думаю, вы должны это знать, чтобы написать ОС. Я не думаю, что это важно для того, на какой платформе вы пишете - на самом деле, я думаю, что писать для нескольких заставит вас больше ценить различия между машинами.

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

Ответ 3

Вы можете использовать qemu для разработки/тестирования приложений uuefi. См. this для получения дополнительной информации

Кроме того, я настоятельно рекомендую ознакомиться с uefi и попытаться сделать некоторые разработки драйверов/приложений в модели uefi. Вы можете попробовать такие вещи, как запуск сетевого стека из загрузчика, инфраструктура сетевой загрузки, возможно, создание более аккуратного графического интерфейса перед ОС. Это не только сделает вас полезными в uefi, но и поможет вам понять детали конкретной платформы.

Это мое мнение, но комментарии, приведенные выше, хороши, чтобы иметь в виду.