小華的部落格: 快快樂樂學EFI (1)

搜尋此網誌

網頁

星期二, 9月 04, 2012

快快樂樂學EFI (1)


快快樂樂學EFI
Harrison Hsieh 2010/07/19
Chap 1 EFI How to
1.1 概論
     有感於當初學習EFI的時候是直接經由BIOS vendor: "I公司"的網路上的訓練課程以及他們派了一組人來幫我們上了一星期Bring up之後,就直接在客戶的案子上邊做邊學,所以很多EFI基本的基礎都沒有學好!因此,最近想化整為零把EFI 重頭學習一遍! EFI 入門該學些甚麼呢?!  個人覺得,工欲善其事必先利其器! 所以先去抓一套可以編譯工具以及一套EDK或是 EFI Tool kits 來學習是最簡單的方式 所以我們的學習目標就是了解甚麼是EFI/UEFI ,然後再告訴你如何去找到你需要的資料以及建構出一個可以撰寫EFI code的環境。

1.2 EFI 歷史回顧
     Extensible Firmware Interface (EFI,可擴充韌體介面) 是一個規範,他規範了一個介面,界於作業系統(例如: Windows)與平台韌體(Platform firmware)之間的一個橋樑。 EFI 的改進是被用來取代傳統BIOS的介面(這個傳統的介面被稱之為IBM PC compatible PC BIOS或稱之為Legacy BIOS). 最初EFI是由Intel 所主導發展,Intel 已於2005年此規範交給目前UEFI論壇(Unified EFI Forum) 的會員一起共同維護與推廣,這便是眾所皆知的UEFI (Unified EFI,統一的EFI).
最初EFI發展動機是為了在1990年中的Intel-HP Itanium 系統,當時的PC BIOS有一個限制(支援16 bit 的處理器模式,1MB 位址空間與AT 硬體架構),而這個限制使的他無法支援大型伺服器平台的系統Intel-HP Itanium 最初的時候Intel 只是為了解決這些BIOS啟動時的限制,後來就乾脆改變它的名稱,且稱之為EFI

Intel Platform Innovation Framework for EFI
   Intel
 在其平台上為了EFI去建立了一個新框架(Framework),而這個框架的最初代號叫做Tiano,這個框架非常的完整,它包含了EFI對原本傳統韌體的所有支援,他也可以透過所謂的compatibility support module(CSM)來支援傳統的PC BIOS,簡單說就是傳統BIOS能做的EFI也能做,但是不是完整支援就要看CSM支援的程度。
特別是,這個框架包含了在Power- On後,所有必要的初始化步驟去初始化一個平台(Platform);但是這些步驟的運作並沒有被定義在EFI specification內,而是被定義在 Platform Initialization Specification(簡稱PI Spec)內的章節。 Intel 並沒有將這個架構完整的開放給一般的End-User知道,他只有開放這些資訊給一些獨立的BIOS 廠商(稱之為IBV),像是安邁 (American Megatrends AMI) 或是系微(Insyde Software)、鳳凰科技(Phoenix) …等的BIOS韌體供應商。
而在TianoCore project(也就是所謂的EFI Developer Kit EDK)Open source之中,會提到如何去開發這個Framework。這個開發工具中含括了EFI的一些硬體初始化的程式碼(只針對一些硬體,但並不包含韌體本身) ,至於這些程式碼的授權包含BSD license  Eclipse Public License等。
Tiano是為了取代BIOS的一種框架,所以透過EFI可以讓PC的設備自己撰寫一個驅動程式來管理這個設備。而對於開放原始碼來說,這也代表大家可以從TianoCore.org 下載這個專案,然後以BSDBerkley Software Distribution)的授權方式來生產你的產品。BSD的授權,你自己去修改它的軟體並且發展出屬於你自己的產品,但BSD並不會去要求你把修改的地方公開出來,而這種方法會有助於你去保護你的智慧財產權。
歷史故事簡略介紹完了,廢話不多說我們就馬上進入EFI 世界中,告訴你一個EFI的環境需要哪些工具來編譯、去哪裡下載EFI 工具包、如何建構你的編譯環境。

1.3 Compiler 工具
   為了能夠編譯一套EDK或是EFI Tool kits ,你會需要使用到 WinDDK或是VisualStudio,這是為了提供一些Compiler 工具像是CCompiler : CL.EXE或是像Lib工具: LIB.EXE 以及連結工具Link.exe...etc
   另外你可能還需要使用到MASM 來組譯一些少部分的組合語言程式碼,因此軟體需求如下:
(1) WinDDK version 3790.11830(EFI Tool kits預設)/ VisualStudio 2003(EDK預設)/VisualStudio 2005/VisualStudio 2008
(2) EFI Tools Kit /EDK source code.
(3) MASM
(4) TortoiseSVN
1.4 EFI Resource
  在茫茫網海中,如何蒐尋EFI 相關資源?! 小弟我不是幫Google 打廣告,是因為我常使用他去找資料 那我們要輸入哪些關鍵字可以找到我們要的資料呢?

 首先進入Google搜尋引擎,輸入關鍵字 "EFI EDK",你就會看到下面的連結 http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK

目前EFI 相關資訊比較完整的地方就是這個網站,裡面你可以下載到你需要的EFI Tool kit/EDK ,並且有一些相關的文件可以幫助你開始你的EFI之旅。

1.5 EFI Tool Kits
  
接下來我們就開始看看這些不同的專案有哪些是可以幫助我們入門,首先要介紹的是 EFI 工具組(EFI Tool Kits),他是一個可以支援快速開發EFI 應用程式的一個環境,讓你可以快速的開發32 bit/64bit EFI應用程式。
這些應用程式包含 : EFI based applications, protocols, device drivers, EFI shells 以及不同平台的 OS loaders  (IA-32, IA-64(IPF) and Intel 64(EM64T or X64) platforms),你可以透過他的Source Repository下載。
在下載之後,如何得知你下載的EFI Tool kit 版本 : 例如 D:\efitoolkit\doc\RELNOTE.pdf 文件內會有版本,如下圖所示:

  EDK指的是Open-source的一個EFI “Framwork”元件,英特爾依照EFI規範所實做出來的一套Code,當時的開發的代號為“Tiano”

  EDK的基本上是一個範例元件,裡面有為框架的基礎程式碼(Framework's Foundation code)和驅動程序範例(Sample Driver)

  EDK也是一個開發工具包,可以用來Debugging/Testing EFI Framework's driver
你可以透過下面的連結去取得一些相關的資訊以及說明:
   (2) 一些Framework Spec : http://www.intel.com/technology/framework/spec.htm
從下圖中的紅色框框的地方就是SVN下載的連結

1.7 Download EDK/EFI Tool kits
 首先,你必須先安裝 TortoiseSVN,這是一個版本控制的軟體,可以幫助你去Server端把code抓下來! 如果你沒有使用過的人就請先研究看看這個東西要如何使用,這邊就不多說明!
    
 http://tortoisesvn.tigris.org/

 
接著,透過這個TortoiseSVN去抓一套最新版的EDK /EFI Tool kits 下來 方法很簡單,就是透過TortoiseSVNExport功能,在他的URL地方輸入你要抓的Code的位置(也就是前面提到的Source Repository)然後輸入好Export directory(例如存放到 D:\EfiToolKit ),然後就等他下載好就可以了,例如下面的圖示與步驟 https://efi-toolkit.svn.sourceforge.net/svnroot/efi-toolkit/trunk/efi-toolkit (下載EFI Tool Kits)

 
1.8 Reference
  

3 則留言:

Waync Cheng 提到...

寫的太好了! 按個讚 (y)

匿名 提到...

怎麼是不是UDK2010的資料?

Unknown 提到...

UEFI 能不能讀取FTP 或是連上Windows 資料夾?
在EDK2下有看到函數,只是沒有sample也不知如何使用...
您有研究過這方面嗎?