Monday, May 6, 2013

“Hello World” in UEFI (2)

 

"哈囉"時間就這樣愉快的過去了嗎?

雖然常常聽到一句俗語"好奇心害死一隻貓"。

但我的好奇心時常作祟,就會很想了解萬事的根本。

於是,開始反問自己一些問題。

“Hello World” 是怎麼秀出來的呢?

Print (L"Hello World\r\n");

這段指令就好像我們C語言常見的printf一樣,只是UEFI提供了print這個函式,而放在(protocol\print)的資料夾內。

但我卻想要用UEFI的概念寫出一樣的功能,該如何做呢?

因為我想這會是一個好時機更了解整個UEFI的概念。其實,UEFI提供了一個protocol handle服務Console Support,它可以幫助我們簡單的完成這項功能,概念顯得更貼近UEFI的架構。這指令為

SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello World\n\r");

protocol handle的名字為Txtout,可能會因為定義不同而有不同的名子。不過也可以從公定的GUID確切的找到這個protocol。

#define EFI_SIMPLE_TEXT_OUT_PROTOCOL_GUID \
  { 0x387477c2, 0x69c7, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

Shell>guid –b

image

image

至於這protocol怎麼去控制硬體,這就會是一個很大的工程,這之中會跟組語有些關聯。遇到大問題這時還是要學會取捨,把大方向抓住,了解目前我們需要了解的就夠了。

No comments:

Post a Comment

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

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