kboot移動(dòng)設(shè)備啟動(dòng)加載器
kboot本質(zhì)上是個(gè)小型Linux作業(yè)系統(tǒng),但功能卻是個(gè)boot loader,何解?kboot本身提供簡(jiǎn)單的系統(tǒng)工具,支援檔案與網(wǎng)路操作,可自外界取得kernel image或其他檔案,進(jìn)而kboot利用了kexec的機(jī)制,讓Linux kernel可快速重新啟動(dòng),於是具備boot loader的功能。
kexec是一組新的系統(tǒng)呼叫,包含在2.6 kernel中 (視支援架構(gòu)而定),搭配其user-space的工具kexec-tools,則可在既有的Linux kernel (支援kexec系統(tǒng)呼叫) 中載入其他的kernel (不需要有kexec支援),並給予必要之參數(shù)或檔案,如kernel command line與initrd等,這方面的資訊可參考以下文章:
- 使用 kexec 快速重啟 Linux (DeveloperWorks)
- kexec (LWN)
目前,kexec的硬體支援不限定x86,包含ARM與PPC都已有patch現(xiàn)身。那麼,如此的機(jī)制到底有什麼價(jià)值呢?以往的boot程序是很單純,清一色就是boot loader載入kernel,然後跳到user-mode或者是特定的工作,但現(xiàn)在的系統(tǒng)設(shè)計(jì)往往不是單一硬體、單一架構(gòu)就可勝任的,諸如RAID或高負(fù)載的備援系統(tǒng)設(shè)計(jì),都需要相當(dāng)繁複的規(guī)劃,很顯然就非普通的boot loader可以應(yīng)付,也很難修改Etherboot去圓滿符合需求,這時(shí)候,我們聯(lián)想到Linux,搭配到上述的kexec,不就是最美妙的boot loader嗎?在載入新的kernel之前,我們可作任何Linux能做的事情,像是載入firmware並進(jìn)行設(shè)定、掛載NFS、掛載NTFS (透過Linux-NTFS)、... 等等,只要能提供新kernel給kexec-tools工具作載入,最後再透過kexec系統(tǒng)呼叫,就可完成這個(gè)「功能強(qiáng)大的boot loader」的終極任務(wù)。
kboot就是這樣的概念驗(yàn)證實(shí)做品,使用的情境相當(dāng)多元。舉例來說,kboot想進(jìn)行遠(yuǎn)端開機(jī) (Diskless),但只有Wireless LAN或3G network可用,這時(shí)候就掛載對(duì)應(yīng)的kernel module (包附在kboot中),然後透過user-space的應(yīng)用程式進(jìn)行設(shè)定,等待連線建立並確保檔案擷取成功,接著就在裝置上執(zhí)行自遠(yuǎn)端取得核心。另一種情境也很有趣,以往Linux distribution都得作通用性與最佳化的妥協(xié),前者往往得將系統(tǒng)劃分諸多核心模組與大量的設(shè)定程式,後者往往得針對(duì)硬體作多次嘗試,那麼,透過kboot可先啟動(dòng)generic kernel,然後進(jìn)行硬體偵測(cè),參考所需的硬體與最佳化組態(tài),重新編譯核心,最後將該核心載入,而這個(gè)過程可透過一些設(shè)計(jì)得當(dāng)?shù)男茉u(píng)估工具,一次又一次的重複自動(dòng)微調(diào),有別於以往的boot loader。關(guān)於kboot的應(yīng)用,可參考以下簡(jiǎn)報(bào):
- kboot - A Boot Loader Based on Kexec (kboot作者提供的slides)
- 於Linux Conference AU的演講錄影
- HTTP-FUSE PS3 Linux : an internet boot framework with kboot (PS3 Linux hackers)
後者給予我們極大的想像空間,當(dāng)我們?cè)谛碌挠搀w進(jìn)行核心與週邊移植時(shí),的確可先把能運(yùn)作的最低限度核心置入kboot,然後再?gòu)牟煌拈_發(fā)分支取得新核心並啟動(dòng),而這些過程都是透明的,而且不需要燒錄到傳統(tǒng)儲(chǔ)存裝置中,只要資源允許,可在RAM中做到繁瑣的事情。
