(請保留-> 作者: 羅冰 https://blog.csdn.net/luobing4365)
《UEFI編程實踐》發布
- 1 內容簡介
- 第一部分 UEFI環境搭建及UEFI應用構建:sparkles:
- 第1章 UEFI的世界
- 第2章 UEFI開發和除錯環境搭建
- 第3章 構建UEFI應用
- 第二部分 圖形影像、漢字顯示和GUI構建:sparkles:
- 第4章 圖形與漢字顯示
- 第5章 影像顯示及特效
- 第6章 GUI開發與移植
- 第三部分 UEFI下訪問各類總線設備:sparkles:
- 第7章 UEFI環境下訪問外設
- 第8章 UEFI驅動與Option ROM
- 第9章 UEFI與USB
- 第10章 UEFI與網路
- 第四部分 國產計算機與UEFI:sparkles:
- 第11章 龍芯平臺上開發UEFI程式
- 第12章 飛騰平臺上開發UEFI程式
- 2 代碼庫
- 3 實驗用開發板
- 4 其他
經過四百多天的奮斗,新書終于上市了(京東官方書店 https://item.jd.com/13406126.html):
每天晚上9點,在安排好孩子睡覺后,就坐在書桌前敲打鍵盤;每個周末,都逼迫自己進入代碼和Spec的海洋,一句句除錯,一點點查詢,
看到書稿成型的那一刻,感覺一切的付出都值得了!
封面以紅色色調為主,占據視覺中心的芯片,周邊的器件和數字0、1,表明這是本計算機底層實踐的書,在各種器件間專心走著的漫畫小人,讓我想起每個專心除錯的日日夜夜,我很喜歡這個封面的感覺,工程師的文化感撲面而來,
書中提供了33個UEFI應用和驅動示例,以及多個用來配合實驗的Windows程式、Linux程式和嵌入式程式,涵蓋了構建程式架構、除錯方法、構建GUI、各種總線外設的訪問、網路應用開發、UEFI驅動和Option ROM開發等內容,特別介紹了國產計算機下的UEFI開發,是偏實戰操作的技術性書籍,
1 內容簡介
《UEFI編程實踐》總共12章,可分為四個部分,其內容編排如下,
第一部分 UEFI環境搭建及UEFI應用構建?
第一部分介紹UEFI的基本知識,包括UEFI的發展、開發和除錯環境的搭建,以及UEFI程式的構建,特別是除錯部分,是后續開發中經常需要使用的,這部分包括第1章、第2章和第3章,
第1章 UEFI的世界
概覽了Legacy BIOS和UEFI BIOS的組成部分,并分析比較了UEFI BIOS和Legacy BIOS的優缺點,介紹了UEFI BIOS的組成部分和啟動程序,以及它在國產計算機發展中所起的作用;
第2章 UEFI開發和除錯環境搭建
介紹了如何在Windows和Linux主機上,搭建UEFI的開發環境和除錯環境,為方便測驗和除錯UEFI程式,本章還介紹了如何制作Legacy BIOS和UEFI BIOS下的UEFI啟動盤,
第3章 構建UEFI應用
介紹了UEFI各種工程檔案的規范,包括DSC檔案、INF檔案和DEC檔案等,詳細描述了構建UEFI應用和UEFI Package的方法,以及如何使用C++語言撰寫UEFI程式,
第二部分 圖形影像、漢字顯示和GUI構建?
第二部分開始,進入實際的專案試驗,此部分包括第4章、第5章和第6章,介紹了UEFI圖形編程、漢字顯示、影像顯示,并在這些知識的基礎上構建了UEFI的GUI(圖形用戶介面),
第4章 圖形與漢字顯示
介紹UEFI圖形顯示的原理,實作了各種基本圖形的顯示,并基于這些函式,使用點陣顯示的方式,在UEFI環境下顯示漢字,另外還介紹了UEFI提供的HII(人機介面基礎架構),以及使用HII實作漢字和字串的顯示,
第5章 影像顯示及特效
介紹如何在UEFI環境下,顯示BMP格式、PCX格式和JPEG格式的影像,以及如何使用HII方式,進行影像的顯示,介紹并實作了各類影像特效,可直接應用于各類專案中,
第6章 GUI開發與移植
介紹了UEFI下GUI的基本組成和實作,構建了初級的UEFI GUI框架,并將開源GUI框架GuiLite,移植到了UEFI環境下,
第三部分 UEFI下訪問各類總線設備?
實際專案中,需要通過各種總線將軟硬體有機地結合起來,第三部分介紹了如何在UEFI下通過各種總線訪問硬體設備,以及使用相關的協議,包括PCI/PCIE、SMBus、串口、USB和網路,并介紹了UEFI驅動以及Option ROM的撰寫方法,本部分包括第7章、第8章、第9章和第10章共四章,
第7章 UEFI環境下訪問外設
介紹如何使用UEFI提供的API訪問各類外設,包括PCI/PCIE設備、SMBus設備和串口設備,
第8章 UEFI驅動與Option ROM
詳細介紹了UEFI驅動,包括服務型驅動和UEFI驅動模型,以筆者自制的開發板YIE001為例,介紹了如何撰寫一種特殊的UEFI驅動-Option ROM,它在顯卡、網卡等板卡設備上有比較廣泛的作用,
第9章 UEFI與USB
介紹了USB規范,以及UEFI下對USB訪問的支持,使用開發板YIE002,實作了自制的USB HID設備,并使用它演示如何在UEFI下訪問USB HID設備,
第10章 UEFI與網路
介紹了如何在實際UEFI環境下,以及各種虛擬機中,搭建UEFI的網路測驗環境,本章還介紹了UEFI對網路的支持,以及如何撰寫UEFI下的TCP4和TCP6的網路程式,
第四部分 國產計算機與UEFI?
本部分介紹了國產計算機龍芯和飛騰的現狀,以及如何使用X86的Windows/Linux主機,搭建跨平臺的UEFI開發和編譯環境,第11章和第12章屬于第四部分,
第11章 龍芯平臺上開發UEFI程式
介紹了龍芯的發展歷史,以及其目前的產品線,以龍芯主打的桌面級產品3A4000為例,介紹了龍芯CPU架構和指令集,以及如何使用Linux Lab學習龍芯的指令集和匯編語言,另外還介紹了如何使用廠商提供的代碼和工具,配合開源的EDK2代碼,搭建龍芯平臺的UEFI開發環境,
第12章 飛騰平臺上開發UEFI程式
介紹了飛騰平臺的系列產品,以桌面級產品FT2000/4為例,對飛騰CPU架構和指令集進行了概括性描述,并使用ARM提供的開源工具,配合EDK2代碼,搭建了支持包括飛騰在內的ARM64的UEFI開發環境,為方便沒有實際飛騰硬體平臺的開發人員,還介紹了如何使用Qemu搭建飛騰平臺的UEFI測驗環境,
2 代碼庫
為方便讀者閱讀,我在Gitee和Github上建好了本書的代碼倉庫,地址如下:
?? Github代碼倉庫 https://github.com/luobing/uefi-practical-programming
?? Gitee代碼倉庫 https://gitee.com/luobing4365/uefi-practical-programming
代碼庫中的檔案可以分為幾類:
- 示例工程,為闡述某個議題而撰寫的代碼,包括UEFI應用和UEFI驅動,主要包含在RobinPkg
檔案夾下; - 框架工程,包括開發用的幾種UEFI應用框架,除錯時用的框架工程,分散在每章的檔案夾中;
- 輔助工具,每章的實驗中,需要用到的測驗代碼和工具,比如第4章的漢字提取工具、第9章的USB HID設備代碼等,
書中的UEFI代碼,基本上是在Win10下,使用UDK2018+Visual Studio 2015進行編譯開發的,輔助工具中的代碼,則包含了嵌入式工程、Windows的MFC工程和Linux下的工程,主要使用了以下幾種開發工具:
- 嵌入式工程:MDK-ARM 5.14.0.0
- Windows MFC工程: Visual Studio 2015
- Windows Application工程:Visual Studio 2015
- Linux工程(主要是網路程式):GCC 7.5.0
更多的資訊,請參考Gitee代碼庫或Github代碼庫中的說明,以及書中的介紹,
3 實驗用開發板
《UEFI編程實踐》的實驗,基本都可以使用EDK2模擬器,或者在實際硬體環境的UEFI Shell中進行,有些實驗,可以使用虛擬機來進行,不過,有兩個實驗,是必須要實際的硬體設備支持的,
第8章介紹的UEFI驅動和PCI Option ROM開發,以及第9章介紹的UEFI下的USB開發,必須用到PCIE板卡和支持USB開發的嵌入式開發板,
為此,我特別做了兩個開發板,也即博客中介紹過的YIE001和YIE002,如下圖所示:

YIE001開發板是為開發UEFI Option ROM而制作的,其目的為了演示Option ROM代碼如何呼叫Protocol、如何控制硬體,它是一塊PCIe的板卡,提供了撥動開關控制、LED燈的控制以及I2C的介面,
YIE002開發板則是一塊U盤大小的開發板,主要目的是為了進行USB HID設備的開發,實際上在此開發板上,提供了LED等、按鍵、TTL串口、RS232串口和RS485串口的功能,是一個便于攜帶的小型開發板,
書中使用它們,是為了便于講解,筆者目前沒有計劃去打樣生產,想到硬體生產那一堆的作業,頭有點大,
讀者完全可以使用自己手中的開發板,去進行第8章和第9章的實驗,YIE001作為PCIE開發板,可能不容易找到,開發板卡(比如網卡、顯卡)的讀者應該會有這方面的資源,書中的代碼稍作修改就可運行,
YIE002作為實作USB HID設備的開發板,有很多可以替代的,比如正點原子的F1戰艦和F4探索者開發板,都可以使用,筆者手上有款F4探索者,最早的USB HID嵌入式工程,就是在它上面實作的,代碼庫的chap09檔案夾下,把這個專案工程STM32F4_UEFI放進去了,供讀者參考,
針對YIE001開發板和YIE002開發板,筆者做了十幾個有趣的實驗,有興趣的讀者也可以看看,
- 📚 YIE001PCIe開發板探索:
📙 UEFI開發探索65- YIE001PCIe開發板(01開篇)
📙 UEFI開發探索66- YIE001PCIe開發板(02 UEFI驅動)
📙 UEFI開發探索67- YIE001PCIe開發板(03 UEFI驅動)
📙 UEFI開發探索68- YIE001PCIe開發板(04 UEFI驅動)
📙 UEFI開發探索69- YIE001PCIe開發板(05 UEFI驅動)
📙 UEFI開發探索70- YIE001PCIe開發板(06 UEFI驅動))
📙 UEFI開發探索71- YIE001PCIe開發板(07 OptionROM框架)
📙 UEFI開發探索75- YIE001PCIe開發板(08 跑馬燈實驗)
📙 UEFI開發探索76- YIE001PCIe開發板(09 界面和鍵盤控制)
📙 UEFI開發探索77- YIE001PCIe開發板(10 撥動開關及顯示)
📙 UEFI開發探索78- YIE001PCIe開發板(11 貪吃蛇)
📙 UEFI開發探索79- YIE001PCIe開發板(12 貪吃蛇)
📙 UEFI開發探索80- YIE001PCIe開發板(終篇 移植雜談)
- 📚 YIE002USB開發板探索:
📘 UEFI開發探索72- YIE002USB開發板(01 開篇)
📘 UEFI開發探索73- YIE002USB開發板(02 Windows編程)
📘 UEFI開發探索74- YIE002USB開發板(03 Windows編程)
📘 UEFI開發探索81- YIE002USB開發板(04 制作HID設備)
📘 UEFI開發探索82- YIE002USB開發板(05 制作HID設備)
📘 UEFI開發探索83- YIE002USB開發板(06 制作HID設備)
📘 UEFI開發探索84- YIE002USB開發板(07 制作HID設備)
📘 UEFI開發探索85- YIE002USB開發板(08 制作HID設備)
📘 UEFI開發探索86- YIE002USB開發板(09 UEFI對USB的支持1)
📘 UEFI開發探索87- YIE002USB開發板(10 UEFI對USB的支持2)
📘 UEFI開發探索88- YIE002USB開發板(11 UEFI下訪問HID設備)
📘 UEFI開發探索89- YIE002USB開發板(12 Linux編程)
📘 UEFI開發探索90- YIE002USB開發板(13 Linux編程)
📘 UEFI開發探索93–UEFI下使用YIE002亂數發生器
另外,針對YIE002開發板,筆者嘗試使用STM32 Cube MX開發了一系列示例,請見:
?? CSDN博客 YIE002開發探索
💜 知乎專欄 YIE002開發探索-Cube MX編程
與之相關的代碼倉庫:
?? YIE002開發探索 https://gitee.com/luobing4365/yie002-explorer
4 其他
在撰寫本書的程序中,筆者盡量做到每句話都言之有據,但是學識有限,書中可能出現錯誤和不準確的介紹,懇請讀者批評指正,如果發現本書的任何錯誤,或者有任何的建議,請發郵件至:
?? email to: uefi_explorer@163.com
對于本書的勘誤,筆者會在代碼倉庫的檔案-勘誤.md中給出,瀏覽地址:
《UEFI編程實踐》勘誤
請打開書本,開始享受UEFI編程的樂趣吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/297191.html
標籤:其他
