В рамках моей работы я занимаюсь разработкой 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 )