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

OSCHINA-MIRROR/luobing4365-uefi-practical-programming

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.en.md

Практическое программирование 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 )

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

Введение

Этот репозиторий содержит код для книги «Практическое программирование UEFI», включая все коды, используемые в книге. Способ компиляции и использование кода описаны в книге. Развернуть Свернуть
GPL-2.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