Monday, April 29, 2013

“Hello World” in UEFI

 

又到了研究者最喜歡的"哈囉"時間,這只是確認開發環境是否正常。因為開發環境常常應該連結位置環境變數等等因素而導致無法正確建立,所以才要用簡單的程式來讓問題更簡單。

由於每個編譯環境會因公司,版本而有所不同,而導致設定方式有所不同。所以就不細節加入Step by Step的說明,其實只要照著Spec走應該是沒有太大問題。不過我想分享的就是在編譯過程中都必須加入.inf檔,我想是為了要讓EFI這系統留給空間位置給你所設計出來的Module,之所以為甚麼要額外的檔案,不用compiler來幫忙取代手工打字,這謎團可能等之後更加了解過後再加以分析。

image

有了Source Code和.inf,再來就是靠Makefile來編出我們所要的Image就大功告成了。

image

最後大家看到的畫面應該是長這樣吧!!如果在正常下應該會有紅色框框的訊息,或多或少有的會有fs1,fs2...,這部分我想是系統儲存.efi檔案的地方吧。

image

Reference

<1>http://www.intel.com/content/dam/doc/guide/uefi-driver-compiling-using-uefi-development-kit-guide.pdf

UEFI Overview from Rookie

 

而UEFI(Unified Extensible Firmware Interface)演進過程簡單來說就是2005從Intel所釋出的EFI而衍生而來,主要是希望能夠取代 BIOS的呆版功能和一些限制,就有如<3>所提到IA32架搆的CPU只能訪問1MB的基本內存,影響了程序員的創造性。同時,各種板卡上的BIOS在映射到系統內存中的時候,受到128Kbytes的大小***。這使得一台計算機不能安裝太多的板卡,否則他們的BIOS的容量將很容易突破128Kbytes。

Intel Platform Innovation Framework for EFI,讓整個EFI流程非常明確,在設計上真可以說是如虎添翼,當然一好必有一弊,這樣的一套規範相對編譯出來的Machine Code一定很肥大。在硬體層面來說,需要的硬體資源相對需要提昇許多,但已研發角度來說,可說是大幅減少撰寫時間,我想這省下可是在這一大筆的專業人事成本上,這取捨之間,以長遠的角度來看或許UEFI有它存在的必要性。

image

在大略的掃過UEFI的架構後,它真的可以說是迷你型的OS。如上圖所示,一個EFI image涵蓋了Driver和Application,此外也有類似排程的Event功能, 想想這三個功能就有點OS的味道了。

image

UEFI Architecture提供一個Handle database的機制來供給UEFI System Table使用。

UEFI System Table

  • UEFI Boot Services
  • UEFI Runtime Services(RS)
  • Protocol Services

Protocol負責提供功能函式給主要的兩個程序(UEFI Boot和UEFI Runtime)所使用。

image

UEFI主要是用Framework的概念下去設計,目的是為了區分工作內容,讓設計者能夠更明確的排除問題且加速發展速度。而它主要區分六大步驟,分別為SEC(Security),PEI(Pre-EFI Initialization),DXE(Driver Execution Envronment),BDS(Boot Device Seletction/ BD Service),TSL(Transient System Load),RT(Run Time)。

我們可以在Shell下這段指令,讓我們能更加了解概念。Shell phase已經是透過BDS所選擇出的小型OS,使用者可以透過console來控制或查詢整個UEFI系統狀況。

Shell> dp –d

image_thumb1

Reference

<1>http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface

<2>http://blog.yam.com/wttmama/article/33619399

<3>http://stenlyho.blogspot.tw/2008/10/efi.html

<4>http://www.intel.com/content/www/us/en/architecture-and-technology/unified-extensible-firmware-interface/efi-homepage-general-technology.html

Thursday, April 25, 2013

BIOS Overview from Rookie

 

最近為了能夠快速進入BIOS領域,一直看相關的資料來加強自己,慢慢的了解整個電腦核心系統的架構,也想透過這些架構來幫BIOS在我心中好好定位一下,首先我們先從大方下手在一一細分。

何謂電腦(PC, Hardware, Platform, Motherboard…)?

現在我將它定義為硬體設備,至於硬體製成那又是遠遠的一回事。

何謂系統(OS, System, Kernel…)?

一堆來自世界各地的硬體通通擺在一起,那主機殼就好像地球一樣,每個硬體說著屬於自己的思考和語言,總該有個人(Xmerican??)跳出來維護世界的和平吧?

何謂軟體(Softeare, APP)?

它是一個很好的翻譯機讓使用者避開那些繁雜的命令。例如你若只想知道1+1=2,應該不會想知道暫存器之間如何變化吧。現在APP已經在21世紀火紅起來,我想它應該是最好解釋軟體的統稱。

那我該把BIOS放哪呢?

image

就我目前的認知裡,它就是系統與硬體之間溝通協調的橋樑。上圖就是我將人類使用電腦的流程概念圖。當然這只是想要將許多事件大概合理的區分,但往往一旦你深入圖中任何區塊之中,該如何界定你所在的位置,那就像用Google Map想要定位出百分百的位置一樣,不是不可能但需要一些運氣。

<Reference>

<1>http://en.wikipedia.org/wiki/BIOS

Wednesday, April 24, 2013

ACPI Overview from Rookie

 

目前對於BIOS一知半解的我,在短短的幾天搜尋許多資料,我想將初步的概念分享出來,不但可以整目前理思緒,且能在深入主題後分辨到底是否與當初認知有所差異。

ACPI(Advenced Configuration Power Interface)取代APM(Advanced Power Management)

提供給OSPM(Operation System Power Managerment)準則(standard interface)用函數來控制,主要規範的範圍我分為四大區塊

1)Power Management(System, Device, Processor)

2)Event(Plug and Play, System Event)

3)Environment Management(Battery, Thermal)

4)Communication(Embedde Controller, SMBus Controllor)

而OSPM就是只要tuning出好的QoS(Quality of Service)給使用者,但要達成這樣的最佳化效果那ACPI則要成為絕對領域,其他相關的配角(Hardware, Firmware, non-OS Softeare)不能涉及到以上四到區塊。讓OSPM做好大哥的角色,不過,OSPM也有失去控制權的時候,那就是在Thermal出現異常的狀況,ACPI會啟動Active and Passive Cooling interfaces的機制來保護硬體。

它到底如何作業呢?

Reference

<1>Advanced Configuration and Power Interface  Specification 5.0

<2>http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

<3>http://biosengineer.blogspot.tw/2007/11/acpi-spec-overview.html

<4>http://fred-zone.blogspot.tw/2008/10/bios-acpi-description-table.html

Register Transfer Level Design with Verilog (1) [ebook]

設計程式之所以有趣不外乎是它的千變萬化,同樣的結果卻有不同的寫法。 但這些不同寫法當中也並沒有分誰對誰錯,也沒有制定標準來規範何事該用何解。 這也就是我們設計者的珍貴!! [1] Primitive Instantiations 在Verilog中最基本的邏輯...