1. 程式人生 > >《20.buildroot的引入和介紹》

《20.buildroot的引入和介紹》

《20.buildroot的引入和介紹》

第一部分、章節目錄
2.20.1.X210的bsp介紹
2.20.2.mk檔案分析
2.20.3.buildroot引入

第二部分、章節介紹
2.20.1.X210的bsp介紹
本節介紹x210開發板的linux+QT的bsp,主流嵌入式SoC的linux bsp結構大都和x210的bsp相類似。
2.20.2.mk檔案分析
本節分析整個bsp的總Makefile檔案,該檔案中定義的一些函式完成了對主體模組如uboot、kernel等的整個配置編譯工作。
2.20.3.buildroot引入
本節引入buildroot,並且以X210的bsp為例演示buildroot的編譯過程和得到的結果。

第三部分、隨堂記錄
2.20.1.X210的bsp介紹
2.20.1.1、嵌入式linux產品的bsp介紹
(1)大部分的ARM架構的linux平臺的bsp的內容和結構都是相似的。
(2)bsp一般是晶片廠家/板卡廠家提供的。

2.20.1.2、X210的linux+QT bsp整體介紹
(1)tslib_x210_qtopia.tgz是用來支援QT的觸控式螢幕操作的應用層庫
(2)xboot和uboot是X210支援的2個bootloader原始碼。kernel資料夾中是核心原始碼,buildroot資料夾是用來構建根檔案系統的資料夾。tools裡是一些有用工具。
(2)mk指令碼是用來管理和編譯整個bsp的。

2.20.1.3、mk的幫助資訊
(1)linux下的慣例就是,執行程式時加-h或者–help就可以看到這個程式執行的幫助資訊。
(2)mk指令碼的主要作用是編譯bsp中的所有的原始碼(包括bootloader、kernel、rootfs等),但是我們可以完整編譯也可以部分編譯,我們通過執行mk 後面加不同的引數來指定mk指令碼去編譯相應的部分。
譬如:
mk -a 即可編譯所有的bsp原始碼
mk -x 即可只編譯xboot
mk -ui 即可只編譯uboot針對inand版本開發板的原始碼
mk -r 即可只編譯buildroot,-r只是得到了資料夾形式的rootfs,並沒有將其製作成映象檔案。
mk -re 即可編譯buildroot並且製作得到ext3格式的rootfs映象
mk -rj 即可編譯buildroot並且製作得到jffs2格式的rootfs映象

2.20.1.4、工作示例
(1)編譯uboot ./mk -ui
(2)編譯核心

注:./mk和mk都是執行mk這個指令碼檔案,區別在於./mk是帶路徑的,mk是不帶路徑的。還有source mk,這個和前兩個的區別是source執行時不需要mk檔案具有可執行許可權,而前面兩種要求mk必須在當前使用者下具有可執行許可權。

2.20.2.mk檔案分析
2.20.2.1、shell程式結構
(1)shell指令碼程式分為:變數定義、函式、程式碼。shell指令碼程式的結構非常類似於C語言程式
(2)shell程式和C語言程式很大的一個差別就是shell沒有main函式,shell指令碼執行時也是先執行主函式的,不過主函式沒有放在一個類似於main這樣的函式中,而是直接放在全域性下的一些程式碼。
(3)shell程式執行時首先執行變數定義,然後執行主函式,其他函式在主函式程式碼中被呼叫執行。
2.20.2.2、主函式
(1)上節課說過mk可以編譯整個bsp的原始碼,也可以只編譯其中一部分。怎麼實現控制編譯哪個不編譯哪個?實現原理就是:用一個函式來完成編譯一個(譬如編譯核心用build_kernel函式,編譯inand的uboot用build_bootloader_uboot_inand),然後用相應的一些變數來控制這個函式要不要被編譯(譬如uboot_inand變數=yes就表示要編譯inand版本的uboot,=no就表示不要編譯),我們編譯時通過-xxxxx來傳參時,這些傳參會影響這些變數的值=yes或者=no
(2)如果我們直接./mk並不傳參,則$1為空,這時候按照一套預設的配置來編譯。
2.20.2.3、各個原始檔的編譯函式

2.20.3.buildroot引入
2.20.3.1、buildroot作用介紹
(1)之前自己從零開始構建根檔案系統,一路下來事情還挺多,步驟比較麻煩。
(2)交叉編譯工具鏈arm-linux-gcc,我們目前都是從soc官方直接拿來使用的,官方的工具鏈從何而來?實際上交叉編譯工具鏈都是由gcc配置編譯生成的,這個配置編譯過程比較複雜,一般人自己去配置編譯得到自己的交叉編譯工具鏈是比較麻煩的,所以經常都是用別人最好的。
(3)buildroot就是一個整合包,這個包裡集成了交叉編譯工具鏈的製作,以及整個rootfs的配置編譯過程。也就是說,使用buildroot可以很簡便的得到一個做好的資料夾形式的根檔案系統。
(4)buildroot將很多東西整合進來後,移植了linux kernel的make xxx_defconfig+make menuconfig的2步配置法,我們可以在buildroot的配置介面下完成整合在裡邊的所有東西的配置,然後直接make就可以最終得到資料夾形式的rootfs。

2.20.3.2、make x210ii_defconfig
(1)先make xxx_defconfig
(2)make menuconfig
(3)make

2.20.3.3、make及其錯誤解決
(1)直接make會遇到很多錯誤,這些錯誤原因都是因為ubuntu中缺乏一些必要軟體包造成的。解決方案是先安裝這些必要的軟體包。
(2)編譯過程會需要從網上下載一些軟體包,因此整個編譯過程需要在聯網狀態下進行。

2.20.2.4、編譯後結果檢視與分析
(1)編譯後生成的資料夾格式的rootfs在buildroot/output/images/rootfs.tar。我們將其複製到了根目錄下的release目錄下去,這個檔案就是一個完整的可以工作的資料夾形式的rootfs。