Coreboot (LinuxBIOS) 研究報告

簡介:
Coreboot前身為LinuxBIOS,目的是要提供一個基於Linux廣大Open Source來開發的BIOS Project,可以提供更快、更穩定、更透明也更好除錯跟維護的免費BIOS,不只能用來啟動Linux,也能啟動本機磁碟的、Windows、FreeBSD或者PXE遠端開機,這也是更名Coreboot的原因,免得大家誤解說它只能拿來開Linux

相關連結:
專案首頁:Coreboot
支援的主機板晶片組
討論區:Coreboot Maillist

研發進度:
目前出到V2版本,官網有提到V3版本,不過就像是Linux的偶數版本跟奇數版本,V3算是beta實驗版本,新開發的功能都會移植回V2,所以抓V2回來用就好

Build System
基本背景介紹完之後,開始說點技術性的東東,要Build出一個BIOS Binary有三種方法,abuild(用於自動驗證系統)、target-build(建議使用)跟make-build(利用Kernel的Kconfig技術,但是問題很多)
abuild:(util/abuild)
abuild不加參數就會把全部主機板設定都build一次,一個型號大概要一分鐘,全部build完大概要一個多小時吧!這就是用來當作上傳程式碼之前的驗證動作,確定新的更動不會影響其他板子
./abuild -t intel/d945gclf 加上 -t 參數表示指定要build的目標,本例是編譯intel的d945gclf,是採用Atom跟945的組合

target-build:(target)
./buildtarget intel/d945gclf 這邊一定要指定build目標,本例一樣選擇intel的d945gclf

make-build:
make config 或 make menuconfig 或 make xconfig
然後make
這邊的操作比較直覺,就像編kernel一樣,只是Makefile編寫尚未完備,很多板子都不能順利build出來


深入頗析target-build
Coreboot的設計團隊應用python跟yapps 2.0打造出一個全動態、分散式、自動化的build tree generater
透過在各地分散的config.lb加上內建許多規則的config.py就可以聰明的把需要的檔案挑出來並且產生對應的Makefile,
中間的步驟都是全自動的,大大簡化了embedded system中最討厭的相依性問題
我自製的程式流程分析圖:

不想看完整的落落長分析的話,就看中間三個關鍵黃色方塊,
第一個是src/[vendor]/[model]/config.lb,這個檔案包含了整體的設定,例如要修改ROM SIZE或者預設參數,都可以加在這邊
第二個是src/config/config.lb,這個檔案負責產生coreboot核心的所有用到的相依檔案,通用於所用板子
第三個是target/mainboard/[vendor]/[model]/config.lb,這個檔案的下半部跟devicetree.cb一模一樣,這個結構定義了板子應用的元件跟組態,config.py會依照這個結構去長出對應的build tree
換句話說,要移植coreboot到其他主版,要改得就是這些地方

開機流程:
這邊先賣個關子,有興趣的讀者可以自己分析target-build生成的Makefile,就會知道它的來龍去眽了

延伸閱讀:
Checko的工作筆記
Porting LinuxBIOS to the AMD SC520

留言

這個網誌中的熱門文章

RTC & CMOS 技術詳解

[自由網路] 如何取得 Google Drive (真實)外連位址 (Direct Link)