1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/luobing4365-uefi-practical-programming

Клонировать/Скачать
README.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.06.2025 15:10 b6a633f

Практическое программирование UEFI

Введение

В рамках моей работы я занимаюсь разработкой Option ROM. Переход с Legacy BIOS на современный UEFI BIOS был непростым. Чтобы лучше изучить UEFI, я написал серию блогов под названием "Исследование разработки UEFI" в свободное время.

В процессе я познакомился с множеством профессионалов в отрасли, и мы обсуждали различные аспекты разработки продуктов и продвижения на рынке.

Legacy BIOS всегда использовался для программирования на ассемблере, и у каждой компании были свои архитектуры. В течение последних тридцати лет (начиная с 1981 года, когда IBM выпустила первую персональную компьютер) это была область с высокой сложностью и большим разнообразием. Особенно это касается нас, третьих сторон разработчиков.

Введение UEFI изменило все. Разработка на основном языке C снизила порог входа и повысила эффективность разработки; хорошая архитектура обеспечивает отличную расширяемость и безопасность. С определенной точки зрения, UEFI можно считать хорошо спроектированной встроенной системой, которая является BIOS-структурой, соединяющей аппаратное обеспечение и современные операционные системы.Поэтому, когда я увидел, что большинство BIOS в национальных автономных компьютерах, начиная с нескольких лет назад, используют архитектуру UEFI, я не был удивлен. В процессе обучения у меня появилась идея записать свои повседневные практические знания и собрать их в книгу. Я надеюсь, что смогу внести свой вклад в продвижение UEFI, особенно в отношении еще находящихся в ранней стадии развития национальных компьютеров.После более чем года работы результатом моих усилий стала книга "Практическое программирование UEFI".

Обложка книги "Практическое программирование UEFI"

Описание кода в репозиторииВ этом репозитории хранится весь сопроводительный код для книги "Практическое программирование UEFI". Содержимое представлено ниже. * :file_folder: /chap02 Файлы проекта для главы 2,主要用于Visual Studio和Windbg调试。

  • :file_folder: /chap03 Файлы проекта для главы 3, используемые для UEFI-программ и библиотек.
  • :file_folder: /chap04 Программы и инструменты для главы 4, используемые для извлечения китайских символов.
  • :file_folder: /chap08 Файлы проекта для главы 8, BlankDrv — пример драйвера от Intel.
  • :open_file_folder: /chap09 Программы и инструменты для главы 9. :wrench: UsbHID. exe Программа для двусторонней связи USB HID, работает на Windows. :bookmark_tabs: STM32F4_UEFI Код для реализации USB HID-устройства, использует разработку от Zhengdian Zhuanyuan на плате F4. :bookmark_tabs: YIE002STM32F1-UsbHID Код для реализации USB HID-устройства, использует разработку на плате YIE002. :pushpin: _Примечание: два проекта для микроконтроллеров в главе 9 были созданы с использованием MDK-ARM 5. 14. 0. 0. _
  • :open_file_folder: /chap10 Программы для главы 10, используемые для сетевой связи. :bookmark_tabs: LinuxIPV6 Код для TCP и UDP-связи IPv6 на Linux, включая сервер и клиент. :bookmark_tabs: WindowsIPV4 Код для TCP-связи IPv4 на Windows, включая сервер и клиент. :bookmark_tabs: WindowsIPV6 Код для TCP и UDP-связи IPv6 на Windows, включая сервер и клиент. :pushpin: _Примечание: два проекта на Windows в главе 10 были созданы с использованием Visual Studio 2015. _
  • :file_folder: /chap11 Файлы для главы 11, включая ассемблерные коды и скрипты для Loongson.* :file_folder: /chap12 Файлы для главы 12, включая скрипты для компиляции UEFI на ARM.
  • :file_folder: /RobinPkg Примеры программ для всех глав, включая UEFI-приложения и драйверы, всего 29 примеров.
  • :file_folder: /RobinPkg_сгенерированные_файлы Примеры программ из RobinPkg были скомпилированы для удобства экспериментов, включая IA32 и X64 версии.
  • :page_facing_up: Корректировки.md Записи о корректировках в книге "UEFI Programming Practice"

Пособие по использованиюФайлы проектов и инструменты для каждой главы (в папках chapxx) следует использовать в соответствии с инструкциями в книге. В данной главе описаны методы компиляции примеров в RobinPkg.

Код в RobinPkg был успешно скомпилирован автором в следующей среде:

:bulb: Операционная система: Windows 10 (версия 10.0.19042.1165)
:bulb: Компиляторы: Visual Studio 2015, Python 2.7, IASL(20200528), NASM 2.15
:bulb: Ветка EDK2: EDK2 vUDK2018
:bulb: Библиотека StdLib: EADK 1.02

1 Настройка среды разработки UEFI

Следуйте инструкциям из главы 2 книги для настройки среды разработки UEFI. В книге для поддержания чистоты кода используется скрипт batch для компиляции.

В большинстве случаев все файлы из библиотеки StdLib можно скопировать в директорию EDK2 для использования. Подробнее можно посмотреть в серии блогов автора "Исследование разработки UEFI". Рекомендуемые статьи:

Исследование разработки UEFI 97 - Настройка симулятора UEFI для сети
Исследование разработки UEFI 62 - Настройка окружения 4 (сводка всех версий EDK2)
Исследование разработки UEFI 22 - Настройка окружения 3 (использование UDK2018)
Исследование разработки UEFI 03 - Настройка окружения 2
Исследование разработки UEFI 02 - Настройка окружения 1
Основные шаги следующие:

:low_brightness: 1. Установите необходимые инструменты разработки, включая Visual Studio, Python, ASL и компилятор NASM, и настройте переменную окружения PATH;

:low_brightness: 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

:low_brightness: 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 и другие инструменты будут автоматически созданы.

:low_brightness: 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 выглядит следующим образом:

![введите описание изображения здесь](https://images.gitee.com/uploads/images/2021/0829/142318_b353a02b_791211.png "gitee_edk2_dir.png")

Обычные примеры, такие как 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/luobing4365-uefi-practical-programming.git
git@api.gitlife.ru:oschina-mirror/luobing4365-uefi-practical-programming.git
oschina-mirror
luobing4365-uefi-practical-programming
luobing4365-uefi-practical-programming
master