kboot本质上是个小型Linux作业系统,但功能却是个boot loader,何解? kboot本身提供简单的系统工具,支援档案与网路操作,可自外界取得kernel image或其他档案,进而kboot利用了kexec的机制,让Linux kernel可快速重新启动,于是具备boot loader的功能。
kexec是一组新的系统呼叫,包含在2.6 kernel中(视支援架构而定),搭配其user-space的工具kexec-tools,则可在既有的Linux kernel (支援kexec系统呼叫) 中载入其他的kernel (不需要有kexec支援),并给予必要之参数或档案,如kernel command line与initrd等,这方面的资讯可参考以下文章:
使用 kexec 快速重启 Linux (DeveloperWorks)
kexec (LWN)
目前,kexec的硬体支援不限定x86,包含ARM与PPC都已有patch现身。那么,如此的机制到底有什么价值呢?以往的boot程序是很单纯,清一色就是boot loader载入kernel,然后跳到user-mode或者是特定的工作,但现在的系统设计往往不是单一硬体、单一架构就可胜任的,诸如RAID或高负载的备援系统设计,都需要相当繁复的规划,很显然就非普通的boot loader可以应付,也很难修改Etherboot去圆满符合需求,这时候,我们联想到Linux,搭配到上述的kexec,不就是最美妙的boot loader吗?在载入新的kernel之前,我们可作任何Linux能做的事情,像是载入firmware并进行设定、挂载NFS、挂载NTFS (透过Linux-NTFS)、... 等等,只要能提供新kernel给kexec-tools工具作载入,最后再透过kexec系统呼叫,就可完成这个「功能强大的boot loader」的终极任务。
kboot就是这样的概念验证实做品,使用的情境相当多元。举例来说,kboot想进行远端开机(Diskless),但只有Wireless LAN或3G network可用,这时候就挂载对应的kernel module (包附在kboot中),然后透过user-space的应用程式进行设定,等待连线建立并确保档案撷取成功,接着就在装置上执行自远端取得核心。另一种情境也很有趣,以往Linux distribution都得作通用性与最佳化的妥协,前者往往得将系统划分诸多核心模组与大量的设定程式,后者往往得针对硬体作多次尝试,那么,透过kboot可先启动generic kernel,然后进行硬体侦测,参考所需的硬体与最佳化组态,重新编译核心,最后将该核心载入,而这个过程可透过一些设计得当的效能评估工具,一次又一次的重复自动微调,有别于以往的boot loader。关于kboot的应用,可参考以下简报:
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)
后者给予我们极大的想像空间,当我们在新的硬体进行核心与周边移植时,的确可先把能运作的最低限度核心置入kboot,然后再从不同的开发分支取得新核心并启动,而这些过程都是透明的,而且不需要烧录到传统储存装置中,只要资源允许,可在RAM中做到繁琐的事情。
主页:http://kboot.sourceforge.net/
下载:http://kboot.sourceforge.net/kboot-11.tar.gz
来自:开源中国社区