搜尋此網誌

2012年6月11日 星期一

How to debug in UEFI - EDK2

如何Debug在UEFI下
UEFI有2種debug方式;

  1. 在虛擬環境Nt32Pkg中debug,在需要測試的程式碼前面加入"_asm int 3;" ,編譯然後再執行虛擬環境(Nt32Pkg),當模擬器執行到"_asm int 3;"這個指令時,就會彈出對話框,此時程式碼將會被中斷。
  2. 另一種是通過Serial Port(RS232)輸出,在 UEFI 真實環境中的運作。可將變數透過 Serial Port(RS232)輸出到終端機上。

UEFI會為每個Disk(HD or SSD)建立一個對應的裝置(Device),也會為每一個磁區建立一個對應的裝置。 透通"DiskIO Protocol"安裝OS到裝置上,也可以透過此協定去讀寫每一個磁區。
每個裝置上都有"DevicePath Protocol", 可透過DevicePath去判斷此裝置是一個磁區 ,或是一個Disk(HD or SSD)。磁區中的DevicePath的最後一個有效Node是HD(SPEC 9.3.6.1)。
當你得到了GPT HD或SSD的DiskIo後,可利用DiskIo讀取第一個磁區(第0個磁區是MBR或者是Protective MBR)取得GPT header,在第2~33磁區中存放的是EFI_PARTITION_ENTRY。 GPT用到的資料結構,在MdePkg/Include/Uefi/UefiGpt.h中可以查閱到,其GPT的格式可以參考UEFI SPEC 第5章。

沒有留言:

張貼留言