Buildroot构建指南--Overview
使用Buildroot,讓嵌入式Linux系統(tǒng)構(gòu)建更加便捷。本文以Buildroot-2016.05的版本為基礎(chǔ)來講解,不同版本之間有細節(jié)差異,需要根據(jù)讀者使用的版本自行調(diào)整。
Buildroot是什么
Buildroot是Linux平臺上一個開源的嵌入式Linux系統(tǒng)自動構(gòu)建框架。整個Buildroot是由Makefile腳本和Kconfig配置文件構(gòu)成的。你可以和編譯Linux內(nèi)核一樣,通過buildroot配置,menuconfig修改,編譯出一個完整的可以直接燒寫到機器上運行的Linux系統(tǒng)軟件(包含boot、kernel、rootfs以及rootfs中的各種庫和應(yīng)用程序)。
Buildroot使用演示
以Buildroot官方開源社區(qū)維護的經(jīng)典mini2440開發(fā)板的項目為例,演示其使用方法。
1) ? ? 先從Buildroot官網(wǎng): https://buildroot.org/download.html下載最新的穩(wěn)定版Buildroot-2016.05壓縮包,放到Ubuntu系統(tǒng)下解壓
2) ? ? 進入解壓后的Buildroot主目錄,其目錄結(jié)構(gòu)圖如下Figure1 Buildroot-2016.05 解壓后主目錄???????
Figure1 Buildroot-2016.05 解壓后主目錄
3)?????make? mini2440_defconfig
4)?????make all
5)?????編譯完,生成的可燒寫文件鏡像,主目錄的在output/images/ 文件夾下,截圖如下:
Figure2? mini2440 開發(fā)板,用buildroot編譯生成的可燒寫鏡像?
看起來,只要執(zhí)行make ?*config和make all的命令,u-boot/linuxkernel/rootfs 都能一次性編譯好,而且編出來的鏡像可以直接燒到mini2440開發(fā)板中運行,以后制作uboot, 編譯kenrel, 編譯各種app, 制作rootfs的繁瑣工作都可以自動化一步搞定,媽媽再也不用擔心我構(gòu)建過程出錯了。Buildroot不愧是自動構(gòu)建神器。
Buildroot的優(yōu)勢
Buildroot大概有以下幾點優(yōu)勢:
a). 可以通在make *config 之后,make ?menuconfig 配置需要編譯的軟件包,menuconfig目錄如下:
Figure3? make menuconfig的一級界面
Figure4 ?make menuconfig下的target packages 配置選項
實際上,uboot, linux kernel 還有 ffmpeg等這些應(yīng)用包,并不是強制都有編譯出來的,都可以通過make menuconfig進行選擇,編譯和構(gòu)建。Buildroot原則上是提供自動構(gòu)建框架,具體要編譯什么包,都是用戶自己可以選擇的。
b). 對豐富的開源應(yīng)用軟件包的支持,誰說嵌入式軟件工程師都是搞內(nèi)核驅(qū)動的,有了Buildroot, 這么多開源應(yīng)用都能移植構(gòu)建到你的開發(fā)板中去,以下是Buildroot/package/ 目錄下支持的自動構(gòu)建開源項目的截圖:
boost、python、ffmpeg、redis、opencv、opengl、webkit……這些開源應(yīng)用軟件是不是耳熟能詳呢?沒錯,這些開源應(yīng)用軟件包都可以在Buildroot下通過你的配置腳本,自動完成官網(wǎng)下載à解壓à系統(tǒng)環(huán)境配置à編譯à安裝到根文件系統(tǒng)等這一系列機械繁瑣的工作。
你不用再為某某開源軟件如何移植到我的Linux 開發(fā)板而到處在QQ群和論壇問人了,哪怕以后還要你自己開發(fā)的新的軟件包,所有繁瑣的移植工作,只要做了一次,都可以用Makefile寫成自動構(gòu)建腳本,移植工作做了一次,就不用做第二次了,交給Buildroot自動來做就可以了。
?Figure5? Buildroot 所能構(gòu)建的開源應(yīng)用軟件包部分截圖a
?Figure6? Buildroot 所能構(gòu)建的開源應(yīng)用軟件包部分截圖b
Figure7 ?Buildroot 所能構(gòu)建的開源應(yīng)用軟件包部分截圖c
c). 可以一塊開發(fā)板多次利用。一塊板子,可以配置成手機,機頂盒,監(jiān)控器,路由器或者各種想不到的有意思的應(yīng)用。沒錯,只要把相應(yīng)的配置文件加到configs/目錄下,下次編譯的時候,選擇該種配置,make all 。那么馬上就可以構(gòu)建出相應(yīng)的可燒寫鏡像,燒錄的開發(fā)板中,讓你的開發(fā)板瞬間從手機變成路由器,無需每次耗時地移植和改動了。
Figure8 ?Buildroot官方社區(qū)目前維護的各種開發(fā)板配置截圖
d). 團隊協(xié)作的利器。不用手把手告訴你的同事或者合作伙伴如果重頭構(gòu)建某種系統(tǒng)的整個軟件包,把你配置好的Buildroot交給他,一切自動完成,不明白的步驟,看看各個軟件包的構(gòu)建腳本,瞬間一目了然。
Buildroot的工作原理
Buildroot原則上是一個自動構(gòu)建框架,雖然說u-boot、linux kernel這些經(jīng)典的開源軟件包的構(gòu)建腳本,官方社區(qū)都在幫你實現(xiàn)了,但是有時候你還是需要加入你自己特有的app_pkg軟件包,用以構(gòu)建自己的應(yīng)用。
Buildroot提供了函數(shù)框架和變量命令框架(下一篇文章將介紹細節(jié)),采用它的框架編寫的app_pkg.mk這種Makefile格式的自動構(gòu)建腳本,將被package/pkg-generic.mk 這個核心腳本展開填充到buildroot主目錄下的Makefile中去。最后make all執(zhí)行Buildroot主目錄下的Makefile,生成你想要的image。
package/pkg-generic.mk中通過調(diào)用同目錄下的pkg-download.mk、pkg-utils.mk文件,已經(jīng)幫你自動實現(xiàn)了下載、解壓、依賴包下載編譯等一系列機械化的流程。你只要需要按照格式寫Makefile腳app_pkg.mk,填充下載地址,鏈接依賴庫的名字等一些特有的構(gòu)建細節(jié)即可。
總而言之,Buildroot本身提供構(gòu)建流程的框架,開發(fā)者按照格式寫腳本,提供必要的構(gòu)建細節(jié),配置整個系統(tǒng),最后自動構(gòu)建出你的系統(tǒng)。
Figure9? Buildroot 的大概構(gòu)建流程
Buildroot目錄結(jié)構(gòu)簡介
Buildroot主目錄截圖如下,其中各個目錄存放的腳本簡要介紹。
Figure10 ?Buildroot主目錄截圖
arch/ 目錄存放CPU架構(gòu)相關(guān)的配置腳本,如arm/mips/x86 ,這些CPU相關(guān)的配置,在制作工具鏈,編譯boot和內(nèi)核時很關(guān)鍵。
board/ 目錄存放各種board 特有的一些配置腳本,在構(gòu)建系統(tǒng)時,board默認的boot和Linux kernel配置文件,以及一些板相關(guān)特殊構(gòu)建流程的腳本,都在該目錄下,等待自動構(gòu)建時調(diào)用。
boot/ 目錄存在各種boot軟件的自動構(gòu)建腳本,不只是u-boot,還有g(shù)rub等,也可以通過Buildroot來構(gòu)建。
configs/ 目錄存放這每種方案上層的全局配置文件,之前的make ?mini2440_defconfig實際上就是調(diào)用了該目錄下的mini2440方案的配置。該目錄下的配置文件記錄著該機器平臺或者方案使用的工具欄,boot, kernel,各種應(yīng)用軟件包的配置和是否編譯選擇的狀態(tài),之前所說的某個特殊開發(fā)板整個系統(tǒng)的配置文件,就在configs/目錄下。
dl/目錄存在從官網(wǎng)上下載的開源軟件包,第一次下載后,下次就不會再去從官網(wǎng)下載了,而是從dl/目錄下拿開源包,以節(jié)約時間。
docs/ 存放相關(guān)的參考文檔。
fs/ 存放著各種文件系統(tǒng)的自動構(gòu)建腳本。
linux/ 存放著Linux kernel的自動構(gòu)建腳本。
output/是編譯出來的輸出文件夾,里面的build/目錄存放著解壓后的各種軟件包編譯完后的現(xiàn)場。host/目錄放著制作好的編譯工具鏈,target/ 目錄是用來制作rootfs的,里面放著Linux系統(tǒng)基本的目錄結(jié)構(gòu),以及各種編譯好的應(yīng)用庫和bin可執(zhí)行文件。Images/目錄下就是最終生成的可燒寫到板子上的各種image。
package/ 目錄存放著各種第三方開源應(yīng)用軟件包的自動編譯構(gòu)建腳本,這些構(gòu)建腳本一般都是經(jīng)過測試,能夠構(gòu)建出相應(yīng)的軟件包的。
support/目錄存放著一些固定的流程腳本,以備構(gòu)建時調(diào)用執(zhí)行。
system/ 目錄存放著文件系統(tǒng)目錄的和設(shè)備節(jié)點的模板,這些模板會被拷貝到output/目錄下,用于制作根文件系統(tǒng)rootfs。
toolchain/ 目錄中存放著各種制作工具鏈的腳本,buildroot可以選擇從0開始,用gcc和linux 內(nèi)核,glibc、uclibc庫等原材料制作一個自己工具鏈,也可以下載第三方制作好的開源工具。
?原文鏈接:https://blog.csdn.net/zhou_chenz/article/details/52295674
總結(jié)
以上是生活随笔為你收集整理的Buildroot构建指南--Overview的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阴阳师独眼小僧哪里多
- 下一篇: ubuntu测试网络丢包的方法是什么