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