標籤

2008年10月15日 星期三

EFI OVERVIEW










  • CPU RESET ENTRY 在fffffff0 ,正好在SEC CORE的位置,擺在ROM的最上面,SEC在CRB實際上也只有一行CODE,他只是一個MODULE而已,他與PEI放在一起,看成一個特殊的PEI MAIN就好。 EFI則是放在BIOS的最下面。
  • IA32,X64,3.5之後的CODE之後target processor都是用x64。
  • PEI_MAIN、NVSTORAGE(存放DATA的地方)、FV_DYNAMIC、FV_BACKUP、FV_RECOVERY。
  • 每一隻MODULE都是一個FILE
  • EFI想像成小型OS,想像HD是BIOS ROM,FV就是partition,Region name就是他的name。會有幾個partition呢,請看FLASHMAP。
  • DSC FILE 描述你有什麼COMPONENT
    ENV檔為COMPONENT的DEFINE
  • ENTRY點都在ASM裡幾乎不會去變動,做PROJECT出錯,要找RESET點,要去哪裡找呢,在IA32的resetvec.asm
  • 建立STACK才可以做FUNCTION CALL
  • package定義component type,告訴他是POST CODE,才不會COMPILER出錯(DSC檔中)
  • 為什麼第四個phase BDS不是擺在最後面,在CODE的前面先出現呢,BDS其實是做DRIVER的CONNECT,DXE只是載入記憶體,有些DRIVER需要CONNECT才可以開始啟動,想像成WINDOWS的DEVICE MANAGER,可以每個DRIVER ENABLE、DISABLE。
  • BDS想像為一個DXE DRIVER (PWR ON->SEC->PEI(Pre EFI initialization)->DXE(Driver Execution Environment)->BDS(Boot Device Selection)->OS)
  • 在SEC階段 SS可用 DS不可用,不要去動,在C中不要加入STATIC,不然會被放到DS中
  • SEC會LINK PEI MAIN載入它,這時想像PEI是個小型的OS, 此時有很多的FUNCTION CALL可以用,例如FV SERVICE。基本上是一個檔案一個檔案載入進來,順序是系統決定,以PEI來講,大致上跟我們寫的順序一樣,除非有特殊的DEPENDENCY。
  • 所謂的BOOT FV,就是放PEI MAIN的地方,包含PEI CORE 和 MODULES。沒有他就找不到NEXT FV。
  • PEI CODE大部分在ROM執行,但後面可能可以進到MEMORY了
  • Driver 有沒有進去可以看FVMAIN.INF 裡面會列出所有的component
  • FILE就是FILE拉~
  • 每一個INF檔是一個COMPONENT 被放在FVMAIN裡面
  • flashmap.h有所有的flash region的base、size、offset,sub region也有。
  • 有了GUID,PPI即可找到相對的記憶體位置
  • 不要把兩個INF檔放再同一個目錄
  • PEI沒有RAM,怎麼擺資料結構呢 :用STACK去建立HOB LIST
  • 一個PPI,就是一個GUID加上一個POINTER
  • proto type: 定義一個 function應該傳入什麼參數。
  • PEI到PXE的階段,必須把記憶體位址的INFORMATION PASS 給PXE
  • DXE想像為比PEI大一點的小型OS
  • DXE DEPENDENCY的概念:dxs檔描述他需要哪些PROTOCOL
  • 要看DXE DRIVER,先看INF檔描述的ENTRY POINT,傳HANDLE和SYSTEM TABLE,
    SYSTEM TABLE,
  • EFI的概念中,所有的檔案都是EFI檔,都可以執行,不僅可以放在ROM裡,還可以放在HD中,那我們要傳些什麼給他呢,就是一個PATH,有點像是C:\xxx\xxx,在EFI中,我們需要比較完整的路徑,稍後詳述。
  • DXE階段,有TIMER、EVENT的觀念。
  • 8259的IRQ1(KB)幾乎都是被DISABLE的,由於進入PROTECTED MODE,INT一進來我們看到的是32BIT的IDT,那KB是怎麼被抓進來呢,哈我聽不太懂= =,只說是有POOL的概念,參考SPEC的CH5。重聽(5)26:00
  • PROTOCAL

沒有留言: