2016年3月16日 星期三

[books] UEFI原理与编程

20150306 購於台南若水堂 463 nt/89 rmb
《UEFI原理与编程》這本書真是不簡單, 我查閱 amazon.com, amazon.jp, 這兩個網站中相關 uefi 主題的書籍也不多 (20150311), 沒想到中國就出了一本, 重點是中文的。

會對 uefi 有興趣單純只是想寫個 bootloader, 因為傳統 biso 0x7c00 那個方法已經快要過時了, 寫了一個 simple os kernel 的我還想讓這個 simple os kernel 能在新的 x86 上執行, 自然得學習 uefi/edk2 了。

後來我發現了一種不需要使用 edk2 的用法, 只要 gcc + makefile 即可, grub2 也是用類似的方法, 請參考: uefi os loader (0) - write uefi program without edk2

可以把 uefi 想成是一個小型的 os, 我們寫的 uefi 程式就和在 dos, windows, linux, 下的執行檔一樣, uefi 也提供很多豐富的 api 讓我們使用, 就和 bios 的中斷編號一樣, 只是改成 c function。

edk2 是 uefi 的開發工具, 和傳統 biso bootloader 不同, 已經不能很單純的用 gcc 來開發了, 我覺得這不算好事, 但也不是壞事, 不過第一版的 edk 只能用 ms vc 來開發那就不是好事了, 而 efi 執行檔是 pe 也讓我覺得格格不入, 不太爽。

而沒有支援 c++ 讓我更是不爽中的不爽, 這個開發工具用了很多 oo 觀念, 卻硬是要用 c 來模擬, 而不乾脆的支援 c++。好在作者在第十章提供了使用 c++ 編譯器的方法, 總算讓我有機會使用 c++。

第一章介紹了 uefi 啟動過程, 有哪些階段。第二章則是介紹 edk2 開發工具, 有 windows, linux 兩個本版, 還有模擬器, 方便用來除錯。

第三章很重要, 介紹怎麼開發 uefi 程式, edk2 需要編寫 3 個檔案, 類似 makefile, 不過 makefile 只要一個, edk2 要寫 3 個 (dsc, dec, inf), 很累人。還有各種 uefi 程式種類, 這章得要仔細閱讀, 才能理解整個 uefi/edk2 開發流程。

第四章介紹怎麼使用 protocol, 這個可以想成需要什麼服務, 就打開那個 protocol, 例如檔案讀寫, 就要打開相對應的 protocol, 幾乎是使用任何服務的基礎。

可惜書中沒有介紹如何寫 uefi os loader, 我知道為什麼, 因為這不是一個簡單的工作, 比起 legacy bios 的 os loader, 困難多了, 有這樣經驗的人, 應該是少數, 而且有些困難的問題要處理, 要一一克服並不容易。

書中範例:
https://github.com/zhenghuadai/uefi-programming
https://code.google.com/p/uefi-programming-guider/wiki/Download

ref:
UEFI实战(1)

4 則留言:

  1. 你好,我想研究UEFI,這本書找很久都找不到,如果你書不需要的時候,可以賣給我嗎?感謝

    回覆刪除
  2. 不好意思, 可能要請你找其他購書管道, 目前正在研究 uefi, 還蠻需要本書。

    回覆刪除
  3. Ok. 謝啦. 這本書真的難找. 我有考慮買影印版. 只是沒有光碟. 可以請問光碟裡面是什麼內容嗎?

    回覆刪除
  4. 這本書沒有光碟, 作者把範例程式放在 github 上。

    回覆刪除

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。