В рамках моей работы я занимаюсь разработкой Option ROM. Переход с Legacy BIOS на современный UEFI BIOS был непростым. Чтобы лучше изучить UEFI, я написал серию блогов под названием "Исследование разработки UEFI" в свободное время.
В процессе я познакомился с множеством профессионалов в отрасли, и мы обсуждали различные аспекты разработки продуктов и продвижения на рынке.
Legacy BIOS всегда использовался для программирования на ассемблере, и у каждой компании были свои архитектуры. В течение последних тридцати лет (начиная с 1981 года, когда IBM выпустила первую персональную компьютер) это была область с высокой сложностью и большим разнообразием. Особенно это касается нас, третьих сторон разработчиков.
Введение UEFI изменило все. Разработка на основном языке C снизила порог входа и повысила эффективность разработки; хорошая архитектура обеспечивает отличную расширяемость и безопасность. С определенной точки зрения, UEFI можно считать хорошо спроектированной встроенной системой, которая является BIOS-структурой, соединяющей аппаратное обеспечение и современные операционные системы.Поэтому, когда я увидел, что большинство BIOS в национальных автономных компьютерах, начиная с нескольких лет назад, используют архитектуру UEFI, я не был удивлен. В процессе обучения у меня появилась идея записать свои повседневные практические знания и собрать их в книгу. Я надеюсь, что смогу внести свой вклад в продвижение UEFI, особенно в отношении еще находящихся в ранней стадии развития национальных компьютеров.После более чем года работы результатом моих усилий стала книга "Практическое программирование UEFI".
Код в RobinPkg был успешно скомпилирован автором в следующей среде:
Операционная система: Windows 10 (версия 10.0.19042.1165)
Компиляторы: Visual Studio 2015, Python 2.7, IASL(20200528), NASM 2.15
Ветка EDK2: EDK2 vUDK2018
Библиотека StdLib: EADK 1.02
Следуйте инструкциям из главы 2 книги для настройки среды разработки UEFI. В книге для поддержания чистоты кода используется скрипт batch для компиляции.
В большинстве случаев все файлы из библиотеки StdLib можно скопировать в директорию EDK2 для использования. Подробнее можно посмотреть в серии блогов автора "Исследование разработки UEFI". Рекомендуемые статьи:
Исследование разработки UEFI 97 - Настройка симулятора UEFI для сети
Исследование разработки UEFI 62 - Настройка окружения 4 (сводка всех версий EDK2)
Исследование разработки UEFI 22 - Настройка окружения 3 (использование UDK2018)
Исследование разработки UEFI 03 - Настройка окружения 2
Исследование разработки UEFI 02 - Настройка окружения 1
Основные шаги следующие:
1. Установите необходимые инструменты разработки, включая Visual Studio, Python, ASL и компилятор NASM, и настройте переменную окружения PATH;
2. Создайте рабочую директорию MyWorkspace и загрузите необходимые репозитории кода, в частности EDK2 и StdLib (EADK):
Administrator@robin MINGW64 /c/MyWorkspace
$ git clone --branch vUDK2018 https://github.com/tianocore/edk2.git
$ git clone https://github.com/tianocore/edk2-libc.git
3. Обновите подмодули и скомпилируйте BaseTools
Administrator@robin MINGW64 /c/MyWorkspace/edk2
$ git submodule update --init
Откройте окно командной строки VS2015 x86 Native Tools Command Prompt и выполните компиляцию:
C:\MyWorkspace\edk2> edksetup.bat Rebuild
После завершения компиляции, BaseTools и другие инструменты будут автоматически созданы.
4. Скопируйте три папки AppPkg, StdLib и StdLibPrivateInternalFiles из edk2-libc в директорию edk2 для удобства последующей компиляции.
Тестирование настроек для проверки успешности установки.```
C:\MyWorkspace\edk2> edksetup.bat
C:\MyWorkspace\edk2> build -p AppPkg\AppPkg.dsc -a IA32
Если нет сообщений об ошибках, то завершение компиляции означает её успешное выполнение.
GitHub в Китае работает медленно, поэтому можно найти соответствующий репозиторий на Gitee для загрузки. Или обратиться к другой статье на моём блоге, где описано, как импортировать репозиторий с GitHub на Gitee для ускорения загрузки:
:zap: [Использование Gitee для загрузки проектов с GitHub](https://blog.csdn.net/luobing4365/article/details/105658274)### 2. Компиляция примеров из RobinPkg
Скопируйте папку RobinPkg в корневую директорию edk2, чтобы завершить подготовку к компиляции. Подготовленная директория edk2 выглядит следующим образом:

Обычные примеры, такие как pixelCHS, можно скомпилировать напрямую. Команды компиляции следующие:
C:\MyWorkspace\edk2> edksetup.bat C:\edk202011\edk2> build -p RobinPkg\RobinPkg.dsc -m RobinPkg\Applications\pixelCHS\pixelCHS.inf -a IA32 -t VS2015x86 -b DEBUG
Так как в файле Conf\target.txt в директории edk2 указаны стандартные параметры компиляции, то параметры "-t" и "-a" можно опустить.
Примеры, связанные с сетью, такие как stdEchoTcp4 и stdEchoUdp4, используют функции из библиотеки StdLib. При компиляции этих примеров появляется предупреждение C4706. Оно вызвано строкой кода в файле \StdLib\BsdSocketLib\ns_addr.c на строке 83, которая выполняет присваивание внутри выражения, что вызывает предупреждение C4706.
Для устранения этого предупреждения можно изменить строку кода или изменить параметры компиляции, чтобы отключить это предупреждение. Например, для компиляции 32-битного приложения с целевым режимом DEBUG можно изменить макрос DEBUG_VS2015x86_IA32_CC_FLAGS в файле Conf\tool_def.txt, заменив параметр "/W4" на "/W3".
После внесения изменений, компиляция может быть выполнена успешно.## Дополнительные сведения
При написании данной книги я старался сделать так, чтобы каждое утверждение было обосновано. Однако из-за ограниченности знаний, в книге могут быть ошибки или неточные описания. Просьба к читателям указывать на них и предлагать улучшения. Если вы заметили ошибку в книге или у вас есть предложения, пожалуйста, отправьте письмо на:
:email:<a href=mailto:uefi_explorer@163.com>email to: uefi_explorer@163.com</a>
Исследование UEFI и других технологий — бесконечный процесс. В процессе работы и обучения я буду регулярно обновлять свой блог и колонку. Если вас интересует эта тема, вы можете подписаться:
:heart: [CSDN блог https://blog.csdn.net/luobing4365](https://blog.csdn.net/luobing4365) :purple_heart: [Знань колонка https://www.zhihu.com/column/c_1233025362843209728](https://www.zhihu.com/column/c_1233025362843209728)
:blue_heart: [личный блог http://yiiyee.cn/blog/author/luobing/](http://yiiyee.cn/blog/author/luobing/)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )