UEFI規範實現EDKII項目學習筆記緒論[0]
2015-07-10 北京海淀區 張俊浩
這段時間在學習UEFI( Unified Extensible Firmware Interface,統一的可擴展固件接口),熟悉EDKII(EFI Developer KitII,EFI開發工具包)項目,本想對UEFI框架脈絡和EDKII項目的組織結構較爲熟悉時候再着手寫UEFI、EDKII項目的學習筆記,這樣會對一些概念、工程的開發把握、闡述會更準確些~但發現冰凍三尺非一日之寒,一口也吃不下一個大胖子,所以先把博客寫成散、零碎的UEFI、EDKII筆記,較爲真實的記錄自己的學習過程~等到對UEFI和EDKII較爲明朗的時候,再反過來整理這些博客~
學習UEFI和EDKII項目,發現中文資料很少,主要是UEFI論壇(http://www.uefi.org)、Tianocore社區(http://www.tianocore.org)上的各類規範、手冊進行學習、開發。本人的UEFI、EDK學習也是通過UEFI論壇、Tianocore社區,還有一本中文書籍戴正華的《UEFI原理與編程》,當然也有百度各種文庫、博客資源,從中國知網下載一些期刊、文獻來科普、學習。發現UEFI規範、EDKII項目的剛開始學習重點不在於解決一些具體概念(比如key concepts)或者EDKII項目中某個具體的技術點,而在於有一條宏觀上的較爲清晰、明確的學習路線,或者說是對UEFI論壇、Tianocore社區上各類文檔、說明性資源的有一個較爲明晰的把握,這也是期望接下來的學習之路能理清的。
剛接觸UEFI及其實現EDKII項目,能感覺到UEFI比BIOS(Basic Input Output System,基本輸入/輸出系統 )、 Uboot ( Universal Boot Loader,通用的引導程序)等常用的引導程序更爲強大的生命力(硬件芯片上原則上BIOS、Uboot、UEFI都可以支持MIPS、 x86、ARM、PowerPC等諸多CPU系列。BIOS開發採用彙編開發效率低,而且技術壟斷在少數大公司;Uboot主要支持Linux類操作系統;UEFI由於可編程性好、可擴展性、高性能、安全性獲得主流操作系統Linux系、Windows、MacOS等支持),但陌生的UEFI概念、EDKII項目框架,還有網上對於UEFI的介紹鋪天蓋地的好評,自然的高大上~找到一條相對明朗的學習路線成了很關鍵的事情:自己是通過EDKII項目來熟悉UEFI的,Tianocore社區http://www.tianocore.org ->EDKII->Getting Started for Developers—>Getting Started with EDK II->Step-by-step Instructions,還有《EDKII_UserManual_0_7》是EDKII項目學習的一個入門線路,還有戴正華的《UEFI原理與編程》作爲輔助(畢竟手冊式文檔,幾乎很少個人感情色彩、學習體驗的呈現)。
開始的幾篇EDKII學習筆記,模仿EDKII_UserManual框架來整理目前的學習情況,主要包括:EDKII概述, EDKII源碼的下載,EDKII項目Linux、Windows開發環境的搭建,EDKII項目的配置編譯,模擬器的運行,還有簡單UEFI應用程序的編寫。(These blogs provides detailed instructions for downloading, configuring and building an EDKII project , running EDKII Emulation Environments as well as writing a simple UEFI EDK II Application)。
最近幾篇UEFI規範實現EDKII項目博客內容安排如下:
1. UEFI&EDKII Introduction(UEFI&EDKII概述)
->1.1 EFI,UEFI,PI,Tianocore,EDK,EDKII
->1.2 Several key concepts introduced by EDKII:
Package,Library Class/Library Instance, PCD, Module, UEFI Application and UEFI Driver
2. Setting Up EDKII Development Environment(EDKII開發環境的搭建)
->2.1 The General Procedure Of Setting Up EDKII Development Environment(搭建EDKII項目的通用流程)
->2.2 Setting up a EDK II build environment on Windows and Linux(搭建Windows和Linux開發環境)
->2.3 Tools:Installing and using the Required Tools for downloading and Building EDKII. (工具篇)
3. EDKII Build Process(EDKII項目源碼的配置、編譯流程)
->3.1 The General Process Of EDKII Build(EDKII項目源碼的配置、編譯一般流程)
->3.1.1 Tool chain:BaseTools
->3.1.2 Setup build shell environment
->3.2 The Process Of EDKII Build on Windows(Windows環境下EDKII項目源碼的配置、編譯流程)
->3.3 The Process Of EDKII Build on Linux(Linux環境下EDKII項目源碼的配置、編譯流程)
4. Build/Launch EDKII emulator in Windows and Linux(編譯/運行EDKII模擬器)
->4.1 Emulation Platforms Introduction (EDKII模擬器平臺介紹)
->4.2 In Windows:Nt32Pkg(Windows環境下編譯/運行Nt32模擬器)
->4.2.1 Tool chain:BaseTools
->4.2.2 Setup Nt32 build shell environment
->4.3 In Linux:EmulatorPkg(Linux環境下編譯/運行Emulator模擬器)
5. How to Write a simple UEFI EDKII Application:Getting Started Writing Simple Application (寫一個簡單UEFI應用程序例程)
->5.0 EDKII Project Introduction
->5.1 Setup build shell environment:Run the edksetup
->5.2 Modify Conf Files:Edit the file conf/target.txt
->5.3 Create a project:MyHelloWorld
->5.3.1 Create a new directory.
->5.3.2 Create MyHelloWorld.c file in the project directory
->5.3.3 Create MyHelloWorld.inf file in the project directory
->5.4 Build your UEFI Application
->5.5 Run your UEFI Application
->5.5.1 Run Nt32 and UEFI Application
->5.5.2 Run Emulator and UEFI Application
6. UEFI簡單的應用程序模塊MyHelloWorld:C源文件//INF工程文件源碼/簡析
->6.1 MyHelloWorld.c源程序/簡析
->6.2 MyHelloWorld.inf源程序/簡析
(隨學習進度推進、博客內容繼續增加~哪裏闡述有誤,希望批評指正~)