bsp的分析(其中使用buildroot文件夾創建rootfs)

如下內容源於朱有鵬嵌入式課程的學習,若有侵權,請告知刪除。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。