會對 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)
你好,我想研究UEFI,這本書找很久都找不到,如果你書不需要的時候,可以賣給我嗎?感謝
回覆刪除不好意思, 可能要請你找其他購書管道, 目前正在研究 uefi, 還蠻需要本書。
回覆刪除Ok. 謝啦. 這本書真的難找. 我有考慮買影印版. 只是沒有光碟. 可以請問光碟裡面是什麼內容嗎?
回覆刪除這本書沒有光碟, 作者把範例程式放在 github 上。
回覆刪除