kboot 移动设备启动加载器开源项目

我要开发同款
匿名用户2009年06月27日
32阅读
开发技术C/C++
所属分类其他开源、嵌入式操作系统
授权协议未知

作品详情

kboot本質上是個小型Linux作業系統,但功能卻是個bootloader,何解?kboot本身提供簡單的系統工具,支援檔案與網路操作,可自外界取得kernelimage或其他檔案,進而kboot利用了kexec的機制,讓Linuxkernel可快速重新啟動,於是具備bootloader的功能。kexec是一組新的系統呼叫,包含在2.6kernel中(視支援架構而定),搭配其user-space的工具kexec-tools,則可在既有的Linuxkernel(支援kexec系統呼叫)中載入其他的kernel(不需要有kexec支援),並給予必要之參數或檔案,如kernelcommandline與initrd等,這方面的資訊可參考以下文章:

使用kexec快速重啟Linux(DeveloperWorks)kexec(LWN)

目前,kexec的硬體支援不限定x86,包含ARM與PPC都已有patch現身。那麼,如此的機制到底有什麼價值呢?以往的boot程序是很單純,清一色就是bootloader載入kernel,然後跳到user-mode或者是特定的工作,但現在的系統設計往往不是單一硬體、單一架構就可勝任的,諸如RAID或高負載的備援系統設計,都需要相當繁複的規劃,很顯然就非普通的bootloader可以應付,也很難修改Etherboot去圓滿符合需求,這時候,我們聯想到Linux,搭配到上述的kexec,不就是最美妙的bootloader嗎?在載入新的kernel之前,我們可作任何Linux能做的事情,像是載入firmware並進行設定、掛載NFS、掛載NTFS(透過Linux-NTFS)、...等等,只要能提供新kernel給kexec-tools工具作載入,最後再透過kexec系統呼叫,就可完成這個「功能強大的bootloader」的終極任務。kboot就是這樣的概念驗證實做品,使用的情境相當多元。舉例來說,kboot想進行遠端開機(Diskless),但只有WirelessLAN或3Gnetwork可用,這時候就掛載對應的kernelmodule(包附在kboot中),然後透過user-space的應用程式進行設定,等待連線建立並確保檔案擷取成功,接著就在裝置上執行自遠端取得核心。另一種情境也很有趣,以往Linuxdistribution都得作通用性與最佳化的妥協,前者往往得將系統劃分諸多核心模組與大量的設定程式,後者往往得針對硬體作多次嘗試,那麼,透過kboot可先啟動generickernel,然後進行硬體偵測,參考所需的硬體與最佳化組態,重新編譯核心,最後將該核心載入,而這個過程可透過一些設計得當的效能評估工具,一次又一次的重複自動微調,有別於以往的bootloader。關於kboot的應用,可參考以下簡報:

kboot-ABootLoaderBasedonKexec(kboot作者提供的slides)於LinuxConferenceAU的演講錄影HTTP-FUSEPS3Linux:aninternetbootframeworkwithkboot(PS3Linuxhackers)

後者給予我們極大的想像空間,當我們在新的硬體進行核心與週邊移植時,的確可先把能運作的最低限度核心置入kboot,然後再從不同的開發分支取得新核心並啟動,而這些過程都是透明的,而且不需要燒錄到傳統儲存裝置中,只要資源允許,可在RAM中做到繁瑣的事情。

查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论