UEFI的driver有幾種不同的種類,分別用來完成不同的任務。就好像汽車有分轎車、跑車、休旅車、貨車等...統稱為汽車,但其作用是大大的不同,就好像在路上時我們看到一台法拉利的時候也不會叫他為得利卡一樣。
從UEFI driver writer's guide的文件中,我們可以看到UEFI image可分為兩大類,分別為"Drivers"和 "Application",簡單說在系統中對晶片做一些初始化的動作,或者是針對Platform做一些特殊客製化動作的就是driver,而負責進入像是windows或是shell的就是application。
如果從Driver的存在時間來分類,分別為如下:
1. Boot service driver:
在POST階段中exit boot service前都可使用的driver,但一exit boot
service呼叫後,這些driver就不會存在memory中了,如果後面的driver還有人使用boot
service的driver的話就會出現錯誤...
2. Runtime driver:
基本上這種driver會一直存在memory中,不只在POST階段中在OS下也可使用。
由UEFI driver writer's guide擷取的上圖來看的話,說明如下:
1. UEFI driver model drivers:
也就是說這類型的driver是符合UEFI規範的driver,也就是說這類型的driver需要提供Support、Start、Stop...的protocol,並且是被動的,當這隻driver initialize之後,就在系統中等待其他controller或device來做binding的動作。例如路上的公共電話,設置好後它固定在同一位置,等到有人有需要時才會去拿起電話來做撥打這個動作。
舉例來說,當我們在路上要找公共電話,找到了一個IC卡的電話,身上沒帶IC卡(不Support)離開,找到了投幣式的電話,有零錢(Supported),開始打電話(Start),打完掛上電話(Stop)。
而UEFI driver model drivers可分為:
1) Device drivers:
1. 初始化傳進來的controller
2. 提供這個controller相對應的 I/O protocol,如此一來在OS下,這個controller就能夠直接或間接的使用這些protocol。
Ex : USB mouse driver, USB keyboard driver...,另外很重要的一點是,device driver在Start 時不會再去create child handle。
2) Bus drivers:
1. 初始化傳進來的bus controller
2. 在Start時會對傳進來的bus controller create child handle
3. 為create的child handle提供所需要的protocol。
Ex : PCI bus driver, USB bus driver...
3) Hybrid drivers:
會對傳進來的handle初始化,也會對其做create child handle的動作,但跟bus driver的差別我還不是很清楚,也不太了解有啥driver是屬於此類型的(日後更新)...
2. Non UEFI driver model drivers:
下面提到的driver為不屬於UEFI model的driver,也就是說不需要產生任何的binding protocol(Support,Start,Stop...)。也就是說,這類型的driver所做的事會比較單純一些。
1) Service drivers:
Ex : ACPI table driver, SMBIOS driver,當我門在系統中要產生ACPI table跟SMBIOS table時會執行的driver,這種類型的driver就可以稱之為service driver。
2) Initializing drivers:
這種driver並不會create任何的handle,簡單說就是做雜事的driver,像是我們想在開機前針對某些device填一些想要修改的register value,就會使用initializing driver。
3) Root bridge drivers:
乍聽之下這好像是bus driver,但不同的是這種driver並不會產生binding protocol來讓controller做binding的動作,root bridge driver的主要目的是install傳進來的handle所需要的protocol。以PCI host bridge driver為例,在進入這driver的entry point之後,PCI host bridge driver的目的就是install "PCI resource allocation"、"device path"、"PCI root bridge IO" protocol來讓這個root bridge使用。
沒有留言:
張貼留言