如下內容源於朱有鵬嵌入式課程的學習,若有侵權,請告知刪除。linux
1、X210的bsp介紹
一、嵌入式linux產品的bsp介紹
- ARM+linux形式的bsp,內容和結構都是類似的。
- bsp由芯片廠家或板卡廠家提供的,交付時會提供bsp。
二、X210的linux+QT bsp總體介紹
- tslib_x210_qtopia.tgz,是用來支持QT的觸摸屏操做的應用層庫;
- xboot和uboot是X210支持的2個bootloader源代碼;
- kernel,文件夾中是內核源代碼;
- buildroot文件夾,用來構建根文件系統的文件夾;
- tools,一些有用工具;
- mk,用來管理和編譯整個bsp。
三、mk的幫助信息
(1)Linux下,執行程序時加-h或者--help就能夠看到這個程序執行的幫助信息。shell
- 這裏能夠在此目錄下輸入mk -h查看mk的幫助信息。
(2)mk腳本的主要做用是編譯。ubuntu
- 能夠完整編譯也能夠部分編譯;
- 經過執行mk xxx,mk後面加不一樣的參數來指定mk腳本去編譯相應的部分。
譬如:
mk -a 便可編譯全部的bsp源代碼函數
mk -x 便可只編譯xboot工具
mk -ui 便可只編譯uboot針對inand版本開發板的源代碼學習
mk -r 便可只編譯buildroot,-r只是獲得了文件夾形式的rootfs,並無將其製做成鏡像文件。ui
mk -re 便可編譯buildroot而且製做獲得ext3格式的rootfs鏡像spa
mk -rj 便可編譯buildroot而且製做獲得jffs2格式的rootfs鏡像開發
(4)腳本執行方式qt
- ./mk和mk都是執行mk這個腳本文件,區別在於./mk是帶路徑的,mk是不帶路徑的。
- 還有source mk,這個和前兩個的區別是source執行時不須要mk文件具備可執行權限,而前面兩種要求mk必須在當前用戶下具備可執行權限。
2、mk文件分析
(1)shell腳本程序分爲:變量定義、函數、代碼。
- shell腳本程序的結構很是相似於C語言程序;
- shell程序和C語言程序很大的一個差異就是shell沒有main函數,shell腳本執行時也是先執行主函數的,不過主函數沒有放在一個相似於main這樣的函數中,而是直接放在全局下的一些代碼。
- shell程序執行時首先執行變量定義,而後執行主函數,其餘函數在主函數代碼中被調用執行。
(2)怎麼實現控制編譯哪一個不編譯哪一個?
- 用一個函數來完成編譯一個(譬如編譯內核用build_kernel函數,編譯inand的uboot用build_bootloader_uboot_inand);
- 而後用相應的一些變量來控制這個函數要不要被編譯(譬如uboot_inand變量=yes就表示要編譯inand版本的uboot,=no就表示不要編譯);
- 編譯時經過-xxxxx來傳參時,這些傳參會影響這些變量的值=yes或者=no
- 若是咱們直接./mk並不傳參,則$1爲空,這時候按照一套默認的配置來編譯。
3、buildroot引入
一、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。
二、make x210ii_defconfig
(1)先make xxx_defconfig
(2)make menuconfig
(3)make
三、make及其錯誤解決
(1)直接make會遇到不少錯誤,這些錯誤緣由都是由於ubuntu中缺少一些必要軟件包形成的。解決方案是先安裝這些必要的軟件包。
(2)編譯過程會須要從網上下載一些軟件包,所以整個編譯過程須要在聯網狀態下進行。
四、編譯後結果查看與分析
- 編譯後生成的文件夾格式的rootfs在buildroot/output/images/rootfs.tar。
- 將其複製到根目錄下的release目錄中,這個文件就是一個完整的、能夠工做的、文件夾形式的rootfs。