我們假設(shè)題主是想為特定的平臺(tái)定制一個(gè)特定的Linux系統(tǒng)。這樣的工具有很多,可以參考這篇文章:http://tinylab.org/linux-lab-full-rootfs/
介紹了七種制作Linux系統(tǒng)的工具:
Linux基金會(huì)為Rootfs制定了規(guī)范文檔:LinuxFHS,社區(qū)可以基于它開(kāi)發(fā)自己的實(shí)現(xiàn),下面是社區(qū)的一些候選制作方法:
1.Busybox,BusyBoxcombinestinyversionsofmanycommonUNIXutilitiesintoasinglesmallexecutable.
2.Buildroot,asimple,efficientandeasy-to-usetooltogenerateembeddedLinuxsystemsthroughcross-compilation.
3.Openembedded,thebuildframeworkforembeddedLinux.
4.Yocto,NOTANEMBEDDEDLINUXDISTRIBUTION,ITCREATESACUSTOMONEFORYOU.
5.LFS,aprojectthatprovidesyouwithstep-by-stepinstructionsforbuildingyourowncustomLinuxsystem,entirelyfromsourcecode.
6.CLFS,aprojectthatprovidesyouwithstep-by-stepinstructionsforcrossbuildingyourowncustomizedLinuxsystementirelyfromsource.
7.Distributions,top10mostpopularlinuxdistributionscompared
Busybox小巧輕靈,本身提供了常見(jiàn)Unix工具集的tiny實(shí)現(xiàn),麻雀雖小,五臟俱全,進(jìn)行微小的調(diào)整就可以制作一個(gè)隨Linux內(nèi)核啟動(dòng)的符合FHS的文件系統(tǒng),特別適合入門嵌入式Linux開(kāi)發(fā),不需要花很多時(shí)間,就可以了解Linux文件系統(tǒng)的組織結(jié)構(gòu)和啟動(dòng)引導(dǎo)過(guò)程。
Buildroot,看名字主要是制作Rootfs,集成了Busybox,uclibc等大量輕量級(jí)的工具、代碼庫(kù),可以用熟悉的內(nèi)核配置工具來(lái)配置,用于制作面向嵌入式環(huán)境的根文件系統(tǒng),所以之前就用它來(lái)制作了LinuxLab的minirootfs。它不僅提供了多種架構(gòu)預(yù)先編譯的交叉編譯工具鏈,本身也可以用來(lái)制作交叉編譯工具,還可以用來(lái)編譯內(nèi)核、Qemu等。為什么不用Buildroot來(lái)制作fullrootfs呢?最重要的是,它沒(méi)有包管理,需要有一個(gè)基礎(chǔ)的下載和編譯過(guò)程,這個(gè)是有點(diǎn)費(fèi)時(shí)間。但是,如果需要制作比較小的嵌入式系統(tǒng),這個(gè)過(guò)程是值得的,首次編譯以后,后面就相對(duì)比較輕松。
Openembedded,提供了更靈活的配置功能,引入了“菜譜”這樣的概念,引入了專門的配置工具:Bitbake,也增加了可擴(kuò)展性,但是復(fù)雜度和編譯時(shí)間大大增加。相比而言,Buildroot隱藏了這些細(xì)節(jié)。
Yocto,相比Openembedded在配置性和可擴(kuò)展性上更進(jìn)一步,甚至通過(guò)引入BSPs,支持真實(shí)的機(jī)器和開(kāi)發(fā)板,也可以通過(guò)配置加入包管理工具,所以它有能力通過(guò)大量預(yù)制的“菜譜”制作一個(gè)完整的LinuxDistribution。Yocto和Openembedded之間共享Bitbake和openembedded-core,它們是Openembedded的構(gòu)建系統(tǒng),Yocto基于此做了自己的構(gòu)建工具:Poky。Yocto和Buildroot的更完整比較請(qǐng)看:Buildrootv.s.Openembedded/YoctoProject。
LFS,LinuxFromScratch,從名字就可以理解,它是從頭開(kāi)始制作一個(gè)Linux,manually,step-by-step,相比Busybox,它包含了各種normal-size的包,本身還會(huì)制作工具鏈,制作代碼庫(kù),Busybox帶了tiny-size的代碼庫(kù),但是沒(méi)有工具鏈。
CLFS,CrossLFS,這里主要體現(xiàn)是交叉編譯,就是在一個(gè)架構(gòu)上step-by-step完成另外一個(gè)架構(gòu)的LFS過(guò)程。
Distributions,Linux世界的發(fā)行版百花齊放,不同主題、不同桌面、不同領(lǐng)域、不同更新頻次、不同包管理工具讓人眼花繚亂,目前業(yè)界還在常用的有這么幾種:Ubuntu、Debian、ArchLinux、CentOS、Android。Ubuntu現(xiàn)在被各大企業(yè)廣泛使用,每年4月和10月各發(fā)行一個(gè)版本;Debian更新更慢,可能也更為穩(wěn)定;ArchLinux的package滾動(dòng)更新,比較快能拿到單個(gè)軟件的新版本;CentOS基本是Redhat的社區(qū)版;Android面向手機(jī)。Distributions的好處是有預(yù)編譯的工具鏈、工具以及Qemu,還有各種代碼庫(kù),比較適合聚焦應(yīng)用開(kāi)發(fā)。不過(guò)并不是所有發(fā)行版都支持多種架構(gòu),這里頭Ubuntu和Debian是特例,它們都支持ARM、PowerPC和S390,Debian還支持MIPS。除了CD包,Ubuntu還提供了Ubuntu-base(非常基礎(chǔ))和Ubuntu-core(功能更豐富)的文件系統(tǒng)的壓縮包,14.10以后只提供制作好的img,之前有純粹的壓縮包。另外,Ubuntu和Debian都提供了debootstrap機(jī)制,允許直接拉一個(gè)base系統(tǒng),然后在之上安裝其他的package。