2014年4月17日 星期四

UEFI handle, GUID, protocol, driver簡單談

   剛開始接觸UEFI時,對於Handle, GUID, Protocol, Driver這些名詞實在傻傻分不清楚。但UEFI的source code全部都是這些東東阿,把自己所理解的寫下來做個記錄,我想是讓自己記憶並且更清楚這些概念的好方法,如果有高人看到這篇文章,也十分歡迎跟感激糾正小弟的錯誤^_^"




   從UEFI的spec中我們可以看到一張精美的Handle示意圖,如果直接看code沒有搭配這張圖,我想沒有過人的想像力以及打從娘胎出生下來就有的程式敏感度的話,能夠了解透徹是很困難的。下面就將各個名詞簡單說明 :
Handle:
   從圖中可以看到handle是由一個或多個protocol interface組成的,而每個protocol interface又有各自的GUID當作標籤,是獨一無二的。而在系統開機的過程中,會建立一個handle database來串起各個handle。而在exit boot service之後,handle database也隨風而逝,不,是不占用系統的記憶體了!


GUID:
   就如同上面提到的,是為protocol的標籤,好似我們在公司中的分機號碼,如果要找XXX,就打香港334-5678一樣。



Protocol:
   從spec以及網路上很多資源的意思來看的話 ,英文字面上是協定的意思,從電腦術語來看protocol就是包含一個或數個driver的指標的結構體,而driver也可看作一個efi image,一個driver中可能有好幾個function。每個protocol中的interface data就是這個protocol所包含的內容,可能是struct,純data,或function等...也可以想成是一個人的內涵吧,不同的人所會的技能當然就不同囉!
   而其中不同的handle下是可以掛上相同的protocol的,一人身兼數職就是這個道理,但一個handle下則不可能有相同的protocol interface。

Driver:
   整個BIOS就是由一隻一隻的driver組成,driver又可分為bus driver, device driver, hybrid driver, service driver等等...之後應該要針對driver再詳細說明,而system透過driver來執行系統需要做的事,chipset initial、提供I/O protocol、connect device、oprom initial...族繁不及備載。
   但知道這些概念當然還是不夠的,多寫code 、多看code才是更熟稔的不二法門啊!!

沒有留言:

張貼留言