Posted on 2011-10-02 01:46
djx_zh 閱讀(18701)
評論(16) 編輯 收藏 引用
本篇為UEFI實戰系列第一部分。
UEFI實戰前10個部分計劃如下:
UEFI 實戰(1) 開發環境
講述如何配置開發環境。
UEFI 實戰(2) HelloWorld
講述dsc, inf文件的格式, application常用的變量,數據結構和函數。
UEFI 實戰(3) C++
講述如何用C++開發UEFI程序。
UEFI 實戰(4) protocol
講述UEFI中protocol的概念
UEFI實戰(5) driver
講述UEFI中driver模型
UEFI實戰(6) 文件讀寫
UEFI實戰(7) Hii interface 之 Form
UEFI實戰(8) Hii interface 之 String 和Font
UEFI實戰(9) GUI
UEFI實戰(10) Network
UEFI 實戰(1)
配置開發環境
3. 打開visual studio 2008 command prompt
cd EDK2
edksetup.bat
4. 編輯Conf\taget.txt, 修改 編譯工具TOOL_CHAIN_TAG 為
TOOL_CHAIN_TAG = VS2008x86
5. build
build命令有兩個參數, -a 和-p, -a 用來選擇平臺(IA32 X64,...) -p用來選擇要編譯的package,默認的package是Nt32Pkg, 所以build命令與 build -a IA32 -p Nt32Pkg\Nt32Pkg.dsc 等同,用來編譯UEFI模擬器。
6. build run
與build -a IA32 -p Nt32Pkg\Nt32Pkg.dsc run 命令等同,用來運行UEFI模擬器。
制作UEFI USB啟動盤
分兩種情況,如果目標平臺是UEFI平臺,按如下步驟來做:
1。 格式化U盤為FAT(FAT,FAT16, FAT32)格式
2。 在U盤上建立目錄 efi\boot
3。 將efi的應用程序 copy到 efi\boot 目錄,并改名為bootx64.efi 或者bootia32.efi。
因為UEFI的啟動文件是FAT盤內efi\boot目錄里的bootx64.efi 或bootia32.efi, 與legacy bios需要MBR來引導OS不同。
如果目標平臺是legacy bios, 需要在U盤中制作MBR和引導文件, 按如下步驟來做:
1。 編譯duet package
build -a IA32 -p DuetPkg\DuetPkgIa32.dsc 或者
build -a X64 -p DuetPkg\DuetPkgX64.dsc
2。 生成引導文件
cd DuetPkg
postbuild.bat Ia32 或者 postbuild.bat X64
3。 插入U盤,假設J:是U盤, 向U盤寫入MBR
createbootdisk usb J: FAT32 IA32 或者 createbootdisk usb J: FAT32 X64
4。拔出并重新插入U盤, 向U盤copy UEFI文件
createbootdisk usb J: FAT32 IA32 step2 或者 createbootdisk usb J: FAT32 X64 step2
此命令向U盤根目錄copy了efildr20, 該文件用于引導系統進入UEFI環境,并向efi\boot目錄copy了引導文件bootia32.efi或bootx64.efi
接下來就可以用U盤來運行UEFI了。
如何Debug
UEFI有兩種debug方式,一是在模擬環境Nt32Pkg下debug,另一種是通過串口調試真實環境中的UEFI程序。我從來沒見過傳說中的利用串口調試,所以下面只能說說Nt32Pkg下的debug。
在需要調試的代碼前面加入_asm int 3; 編譯,然后再模擬環境中(Nt32Pkg)中運行該程序,當模擬器執行到int 3;指令時,會彈出對話框,然后就可以調試了。