bsp的分析(其中使用buildroot文件夹建立rootfs)
生活随笔
收集整理的這篇文章主要介紹了
bsp的分析(其中使用buildroot文件夹建立rootfs)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下內容源于朱有鵬嵌入式課程的學習,如有侵權,請告知刪除。
一、X210的bsp介紹
1、嵌入式linux產品的bsp介紹
- ARM+linux形式的bsp,內容和結構都是相似的。
- bsp由芯片廠家或板卡廠家提供的,交付時會提供bsp。
2、X210的linux+QT bsp整體介紹
- tslib_x210_qtopia.tgz,是用來支持QT的觸摸屏操作的應用層庫;
- xboot和uboot是X210支持的2個bootloader源代碼;
- kernel,文件夾中是內核源代碼;
- buildroot文件夾,用來構建根文件系統的文件夾;
- tools,一些有用工具;
- mk,用來管理和編譯整個bsp。
3、mk的幫助信息
(1)Linux下,執行程序時加-h或者--help就可以看到這個程序執行的幫助信息。
- 這里可以在此目錄下輸入mk -h查看mk的幫助信息。
(2)mk腳本的主要作用是編譯。
- 可以完整編譯也可以部分編譯;
- 通過執行mk xxx,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鏡像
(4)腳本執行方式
- ./mk和mk都是執行mk這個腳本文件,區別在于./mk是帶路徑的,mk是不帶路徑的。
- 還有source mk,這個和前兩個的區別是source執行時不需要mk文件具有可執行權限,而前面兩種要求mk必須在當前用戶下具有可執行權限。
二、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為空,這時候按照一套默認的配置來編譯。
三、buildroot引入
1、buildroot作用介紹
(1)之前從零開始構建根文件系統,步驟比較麻煩。
(2)交叉編譯工具鏈arm-linux-gcc
- 之前都是從soc官方直接拿來使用的,但官方的工具鏈從何而來?
- 實際上交叉編譯工具鏈都是由gcc配置編譯生成的。
(3)buildroot是一個集成包
- 集成了交叉編譯工具鏈的制作,以及整個rootfs的配置編譯過程。
- 即使用buildroot可以很簡便的得到一個做好的文件夾形式的根文件系統。
- 在buildroot的配置界面下完成集成在里邊的所有東西的配置,然后直接make,最終可以得到文件夾形式的rootfs。
2、make x210ii_defconfig
(1)先make xxx_defconfig
(2)make menuconfig
(3)make
3、make及其錯誤解決
(1)直接make會遇到很多錯誤,這些錯誤原因都是因為ubuntu中缺乏一些必要軟件包造成的。解決方案是先安裝這些必要的軟件包。
(2)編譯過程會需要從網上下載一些軟件包,因此整個編譯過程需要在聯網狀態下進行。
4、編譯后結果查看與分析
- 編譯后生成的文件夾格式的rootfs在buildroot/output/images/rootfs.tar。
- 將其復制到根目錄下的release目錄中,這個文件就是一個完整的、可以工作的、文件夾形式的rootfs。
總結
以上是生活随笔為你收集整理的bsp的分析(其中使用buildroot文件夹建立rootfs)的全部內容,希望文章能夠幫你解決所遇到的問題。