導讀:嵌入式Linux開發大體上可以分為三個部分BSP開發、系統集成、應用開發,一般公司開發會有不同的人員分別負責這三個大的部分。就本文談到Linux系統構建而言,主要涉及到BSP、系統集成兩個方面。對于從業人員而言了解Linux系統的構建過程,會對Linux系統有更加深入的理解。
1. 基本概念
1.1 嵌入式開發主要任務
首先想談談對于Linux開發這三個方面的大體內容,具體有哪些開發工作:
BSP開發:移植bootloader以及Linux 內核,開發Linux設備驅動
系統集成:將用戶空間所需的組件集成進系統并進行配置,同時開發升級恢復機制。
應用開發:開發特定業務的應用軟件或者庫
而對于Linux的啟動過程,大體如下圖:
當然對于不同的體系結構會有所不同,本文主要基于ARM進行討論。
至于Bootloader、內核的移植、驅動開發不在本文的討論范圍。假定都是完備可執行的。那么Buildroot可以幫我們做什么呢?Buildroot可以完成Bootloader的配置編譯、內核的配置編譯、根文件系統的配置編譯、用戶空間所需的軟件組件及庫的配置編譯等工作。
1.2 常用的Linux構建系統
常見的嵌入式構建系統有Yocto/OpenEmbedded,PTXdist, Buildroot,OpenWRT 等等。。。
比較流行的有兩種:
Yocto/OpenEmbedded:使用二進制包構建完整的Linux發行版。功能強大,但有些復雜,而且學習曲線相當陡峭。
Buildroot:構建一個根文件系統映像,沒有二進制包。使用,理解和修改要簡單得多
2. Buildroot之初體驗
2.1 Buildroot簡介
Buildroot的特點:
可以構建工具鏈,rootfs,內核,引導程序
易于配置:menuconfig,xconfig等
快速:只需幾分鐘即可構建一個簡單的根文件系統
易于理解:用大量書面文件制作
小型根文件系統,起始于2 MB
提供2500多個用于用戶空間庫/應用程序的軟件包
支持多種架構
知名技術:make和kconfig
具有最讓用戶心動的設計目標:
簡單易用
易于定制
可復制的構建
小根文件系統
而事實上,Buildroot確實如其期望一樣,簡單易用,用戶體驗友好。詳細請參考:https://buildroot.org/
2.2 基本的步驟
Buildroot的使用主要有以下幾個步驟:
下載:從下面網址選擇你需要的版本
https://buildroot.org/download.html
你也可以:git clone git://http://git.busybox.net/buildroot
配置:可選的有以下幾種配置方式:
make menuconfig,這無疑是為大家所熟知的,因為內核正式基于kconfig語言的配置方式。需要ncurses的支持
make nconfig,需要ncurses的支持
make xconfig,需要QT的支持
make gconfig,需要QTK的支持
編譯:make
部署: 位于。/output/images/下 是生產的bootloader鏡像,內核鏡像以及根文件系統壓縮包。
2.3 基本配置
對于一個最小系統而言,我們需要配置以下一些基本配置就可以進行編譯了:
本文基于TI的DM3730為例進行描述。
TI公司的DM3730微處理器是由1GHz(同時支持300,600和800MHz)的ARM Cortex-A8 Core和800MHz(同時支持250,520和660MHz)的TMS320C64x+ DSP Core兩部分組成,并集成了3D圖形處理器,視頻加速器(IVA),USB 2.0,支持MMC/SD卡,串口等。DM3730 pin-to-pin兼容DM3725、AM3715、AM3703處理器,支持高清720p視頻編解碼。
2.3.1 Target配置
根據芯片手冊很容易做出如上配置。所以關于目標機的配置,主要是包括大小端、目標機二進制格式、目標機內核變種、浮點支持選項、指令集選擇。
2.3.2 Build 配置
主要配置以下一些內容:
配置文件保存位置,將配置文件保存的好處是,在重新構建時,值需要調用
make 《xxx_defconfig》
然后make,而不必重新全部配置。
配置下載位置,因為系統構建的時候需要從網絡上抓起很多軟件報的代碼進行編譯構建。這個一般不需要修改。
strip target binaries建議使能,這樣會使文件尺寸變小。
對于其他的選項基本可以不做修改。
2.3.3 工具鏈配置
工具鏈配置非常重要,不容出錯:
工具鏈可選擇外部可執行工具鏈,亦可以自行編譯,或者本地存放的廠商提供的二進制工具鏈。本例選則本地可執行二進制包。
工具鏈前導符,本文選擇arm-none-linux-gnueabi,這取決于所用芯片的體系結構,需與所配的工具對應! 另外需要注意的是浮點的支持,需與所選芯片是否有硬件浮點計算單元匹配,且與上面提到的目標機浮點配置對應。
外部GCC版本,選擇所需的版本。
內核頭文件版本,這個選項至關重要,需與你用的內核版本對應
GDB調試,這個建議選上,方便后面系統調試
MMU支持,一般地需要MMU支持。
對于其他一些選項,不做詳述
2.3.4 系統配置
主機名:根據需要定義一個字符串,是控制臺前面的提示符xxx@vsi
密碼加密方式:根據需要選擇加密算法
init系統:這里選擇busybox,輕量級使用非常廣泛。可選的有systemV,systemd.
設備表,可以默認即可
符號鏈接,這個可選
shell,因為前面選擇使用busybox,通常嵌入式會選擇busybox提供的shell工具集
其他還有諸如語言、時區、用戶表、根文件系統覆蓋、本地腳本加載等不做一一描述了。需要提示的是,如果需要需要修改根文件系統的某部分,可以考慮使用根文件系統覆蓋。
2.3.5 內核配置
對于內核可選擇本地壓縮包,亦可以選擇從代碼庫、網絡進行抓取
補丁選項,如果有補丁需要打,可使能
內核格式,因為采用u-boot這里選擇uImage
內核代碼壓縮格式,因為前面選擇的是.gz格式,故這里選gzip
設備樹,因為本例的內核并不支持設備樹,故未使能。值得一提的是,現行的內核大多采用設備樹對硬件層進行抽象剝離。
內核擴展,這里有以下一些選項:
Adeos/Xenomai Real-time patc,
FB TFT drivers,
ev3dev Linux drivers
Aufs Filesystem Module patch
內核工具,有以下一些選項:
可根據硬件系統需要進行裁剪,這些工具非常有用。
2.3.6 Target package配置
根據需要進行配置,需要提到的是,這個配置非常有用,可實現豐富的客制化軟件包的支持,公司內部自研的應用包、庫可以由此進行集成。
2.3.7 Filesystem images配置
可將output/target生成的根文件系統打包成一個鏡像,需要注意的是output/target下生成的根文件系統由于權限等原因是不可以直接加載的。例如不可以用NFS進行掛載。
2.3.8 Bootloaders配置
本例采用本地壓縮包,類似內核配置,也可以通過網絡進行抓取,需要注意的是網絡抓取的代碼很多移植工作應該沒有完成,除非已經聲明支持的板子能找到對應bootloader代碼倉庫。當然如果內部已經開發完成,并有版本系統管理,這里就可以配置為從版本倉庫抓取了。
對于Host utilities/Legacy config options 對于最小系統可不做配置。
最后一步,完成配置,保存設置。
建議:保存.config 用如下命令
mv .config 。/configs/xxx_defconfig
下次修改,只需執行make xxx_defconfig就會加載本次的配置。
3.編譯部署
完成了配置后,只需要執行 make,則在。/output/images/下就會得到如前所示的bootloader,uImage,rootfs.tar,然后就可以部署在目標板上進行運行了。
至此,我們的Buildroot快速通關,就順利通關了,是不是很容易,很方便!
公號里面內容更多,歡迎關注交流.
評論