電子發燒友網 > 嵌入式技術 > 嵌入式操作系統 > 正文

基于Buildroot的Linux系統構建技巧經驗分享

2020年04月27日 17:24 ? 次閱讀

  導讀:嵌入式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快速通關,就順利通關了,是不是很容易,很方便!

  公號里面內容更多,歡迎關注交流.

下載發燒友APP

打造屬于您的人脈電子圈

關注電子發燒友微信

有趣有料的資訊及技術干貨

關注發燒友課堂

鎖定最新課程活動及技術直播

電子發燒友觀察

一線報道 · 深度觀察 · 最新資訊
收藏 人收藏
分享:

評論

相關推薦

楊哥:linux云計算系列:大型網站高并發架構運維實戰

    Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服
發燒友學院發表于 2017-12-13 00:00? 25521次閱讀
楊哥:linux云計算系列:大型網站高并發架構運維實戰

利用多個獨立LED實現嵌入式漸進調光功能

利用兩個或更多的獨立LED,當今的驅動器能夠控制可用于便攜系統中的新潮裝飾光。不僅ILED峰值電流完....
發表于 2020-04-27 09:39? 37次閱讀
利用多個獨立LED實現嵌入式漸進調光功能

容器是否成為下一個Linux

容器將成為下一個“Linux”
發表于 2020-04-27 09:21? 8次閱讀
容器是否成為下一個Linux

如何對Linux Bash輸入輸出重定向

Linux - Bash - 輸入輸出重定向
發表于 2020-04-27 09:01? 8次閱讀
如何對Linux Bash輸入輸出重定向

請問Linux系統reboot與手動復位一樣嗎?

最近板子 有一個模塊的reset是單獨接引腳的 導致reboot時候 這個模塊沒有跟隨系統復位 一般平時需要重啟的時候我們可以...
發表于 2020-04-27 05:55? 9次閱讀
請問Linux系統reboot與手動復位一樣嗎?

香蕉派 BPI-F2P工業級應用開發板,支持PoE網絡供電功能.有RS232,RS485接口

香蕉派 BPI-F2P Sunplus 工業級芯片方案設計, 是完全按照工業級應用標準設計的開發板. 使用 Plus1(sp7021) 芯片...
發表于 2020-04-26 14:43? 81次閱讀
香蕉派 BPI-F2P工業級應用開發板,支持PoE網絡供電功能.有RS232,RS485接口

Linux如何進行日常管理與維護

Linux筆記(三)—日常管理與維護
發表于 2020-04-26 14:37? 22次閱讀
Linux如何進行日常管理與維護

監控模式之中,PC與嵌入式NVR的性能對比

如今的視頻監控行業正處于一個轉變模式中,隨著互聯網普及使得IP監控攝像機需求不斷增多。
發表于 2020-04-26 10:50? 39次閱讀
監控模式之中,PC與嵌入式NVR的性能對比

無縫液晶拼接屏安裝方式及嵌入式安裝方法介紹

無縫液晶拼接屏是一款常見的大屏幕顯示終端產品,主要應用在辦公室、會議室、展館展廳、指揮中心等場合。那....
發表于 2020-04-26 09:22? 71次閱讀
無縫液晶拼接屏安裝方式及嵌入式安裝方法介紹

基于嵌入式操作系統實現HIRFL_CSR多層分布...

蘭州重離子加速器冷卻存儲環工程(HIRFL_CSR) 控制系統是一個由CSR 電源系統、注入引出系統....
發表于 2020-04-26 09:17? 61次閱讀
基于嵌入式操作系統實現HIRFL_CSR多層分布...

基于FIE8100 SoC平臺實現Linux軟件...

FA526是一顆有著廣泛用途的32位RISC處理器。它包括一個同步CPU內核(core)、獨立的指令....
發表于 2020-04-25 10:47? 107次閱讀
基于FIE8100 SoC平臺實現Linux軟件...

利用Xtensa可配置處理器加速嵌入式算法的性能...

可配置處理器允許嵌入式開發人員來定制適合目標算法的處理器,使得處理器和算法能夠更好地匹配。設計人員可....
發表于 2020-04-25 10:40? 74次閱讀
利用Xtensa可配置處理器加速嵌入式算法的性能...

基于PXA270術和GSM無線通信技術實現移動智...

如圖1所示,本系統建立了一套基于PXA270嵌入式處理器技術、視頻圖像處理技術、車輛識別技術、GSM....
發表于 2020-04-25 10:01? 295次閱讀
基于PXA270術和GSM無線通信技術實現移動智...

百度云服務器怎么使用nfs ,tftp

我自己買了個百度云服務器來學習嵌入式使用,云服務器上有兩個ip地址,一個公網的一個內網的,在服務器上配置好了nfs和...
發表于 2020-04-24 15:30? 91次閱讀
百度云服務器怎么使用nfs ,tftp

物聯網當中是如何運用嵌入式編程的

嵌入式編程是物聯網設備工作方式的重要組成部分。您可能需要學習C/C++并獲得一些實際的電子經驗,以掌....
發表于 2020-04-24 08:52? 57次閱讀
物聯網當中是如何運用嵌入式編程的

(轉)linux系統學習方法論

(轉)linux系統學習方法論 基于Linux的學習方法 我是一名普通的計算機軟件人員,接受過普通的計算機科學教育,有6年...
發表于 2020-04-23 17:12? 207次閱讀
(轉)linux系統學習方法論

加入RFID的監管信息系統有什么好處

系統管理軟件由系統管理、電子標簽管理、放行監控統計三大子系統組成。
發表于 2020-04-23 16:58? 69次閱讀
加入RFID的監管信息系統有什么好處

嵌入式linux學習規劃路線,準備好了嗎皮卡丘們

嵌入式linux學習規劃路線,準備好了嗎皮卡丘們 ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟件開發...
發表于 2020-04-23 12:00? 139次閱讀
嵌入式linux學習規劃路線,準備好了嗎皮卡丘們

嵌入式傳感器將是未來智能移動增長的核心

移動即服務(MaaS)被認為是智能移動的一個關鍵要素,而機器人汽車技術將是智能移動的一個重要因素,它....
發表于 2020-04-23 11:44? 200次閱讀
嵌入式傳感器將是未來智能移動增長的核心

如何把OMAP138側Linux的LCD顯示從寬頻改為豎屏?

需要把 OMAP138-> ARM 側Linux 的LCD顯示從寬頻改為豎屏(也就是顯示旋轉 90 度),...
發表于 2020-04-23 10:22? 72次閱讀
如何把OMAP138側Linux的LCD顯示從寬頻改為豎屏?

如何在控制器上使用Linux操作系統

嗨,我們正在努力開發以下控制器:PIC24FJ32GB002、PIC24FJ128GB206和PIC18F26K22。我們有使用Li...
發表于 2020-04-23 10:12? 25次閱讀
如何在控制器上使用Linux操作系統

基于嵌入式微處理器和PCI總線實現電力監測系統的...

目前,作為監測系統核心器件的微處理器一般采用高性能單片機、數字信號處理器(DSP)等提高系統的處理速....
發表于 2020-04-23 09:38? 138次閱讀
基于嵌入式微處理器和PCI總線實現電力監測系統的...

嵌入式系統的IP授權結構問題及事項考慮

處理器是1款系統的心臟部分,所有功能的達成幾乎都要依靠處理器,而在嵌入式系統方面,由于針對的應用層次....
發表于 2020-04-23 09:08? 102次閱讀
嵌入式系統的IP授權結構問題及事項考慮

嵌入式和物聯網兩者有色有什么區別

首先,它是各種感知技術的廣泛應用。物聯網上部署了海量的多種類型傳感器,每個傳感器都是一個信息源,不同....
發表于 2020-04-22 15:17? 81次閱讀
嵌入式和物聯網兩者有色有什么區別

Azure RTOS如何賦能嵌入式物聯網的發展

物聯網正在各個市場領域中成為主流技術,我們的愿景是使Azure成為全球的計算工具,使企業能夠實時了解....
發表于 2020-04-22 14:14? 136次閱讀
Azure RTOS如何賦能嵌入式物聯網的發展

Google應該有足夠的時間來修補該問題

由于這是黑客可以很容易利用的一項重大利用,因此,谷歌還沒有找到時間對其進行修補,這是一個很大的驚喜。....
發表于 2020-04-22 09:40? 221次閱讀
Google應該有足夠的時間來修補該問題

Centos linux系統中殺死進程如何實現

結束進程有很多方法,一般是kill,killall,kill等, 簡單地使用kill命令是最安全的。
發表于 2020-04-22 08:59? 44次閱讀
Centos linux系統中殺死進程如何實現

嵌入式Linux啟動時間優化的秘密之五-Boot...

本文主要講述嵌入式Linux啟動時間優化的秘密,我們繼續上篇沒有講完的嵌入式Linux啟動時間優化方....
發表于 2020-04-21 17:24? 246次閱讀
嵌入式Linux啟動時間優化的秘密之五-Boot...

紐約理工學院溫哥華分校基于高云半導體安全FPGA...

紐約理工學院(NYiT)溫哥華分校與高云半導體 SecureFPGAs合作開發了解決方案,并將其作為....
發表于 2020-04-21 11:27? 60次閱讀
紐約理工學院溫哥華分校基于高云半導體安全FPGA...

嵌入式Linux啟動時間優化的秘密之四-啟動腳本

本文主要講述嵌入式Linux啟動時間優化的秘密,我們繼續上篇沒有講完的嵌入式Linux啟動時間優化方....
發表于 2020-04-21 09:22? 251次閱讀
嵌入式Linux啟動時間優化的秘密之四-啟動腳本

嵌入式Linux啟動時間優化的秘密之三-內核

本文主要講述嵌入式Linux啟動時間優化的秘密之三-內核,我們繼續上篇沒有講完的嵌入式Linux啟動....
發表于 2020-04-20 18:09? 237次閱讀
嵌入式Linux啟動時間優化的秘密之三-內核

EmStat Pico:支持軟件運行的嵌入式小型...

本文詳細介紹了以下三種不同的電化學測量,表明可輕松地將該器件集成到系統中,并示范說明了恒電勢器模塊的....
發表于 2020-04-20 15:47? 137次閱讀
EmStat Pico:支持軟件運行的嵌入式小型...

基于傳統嵌入式技術和FPGA技術實現掌紋鑒別系統...

Nlos是Altera公司推出的一款采用流水線技術、單指令流的32位RISC軟核處理器,并針對Alt....
發表于 2020-04-19 18:58? 108次閱讀
基于傳統嵌入式技術和FPGA技術實現掌紋鑒別系統...

Linux為什么無法取代Windows

Linux系統誕生二十多年了,全球幾百萬開發者維護并使用Linux,堪稱全人類智慧的結晶。為什么卻始....
發表于 2020-04-18 11:46? 542次閱讀
Linux為什么無法取代Windows

傳統服務器與云服務器到底有什么區別

 指實實在在、存在的硬件專用獨立主機或服務器設備,性能和穩定性都比較強,因此,價格也相對比較昂貴,需....
發表于 2020-04-18 11:34? 438次閱讀
傳統服務器與云服務器到底有什么區別

如何使用Linux設備驅動程序點亮LED

特別說明:第一個步驟和第二個步驟我將直接跳過(查看原理圖和芯片手冊),因為這兩者取決于我們的硬件平臺....
發表于 2020-04-18 10:25? 355次閱讀
如何使用Linux設備驅動程序點亮LED

LINUX最全的命令行詳細概述

監聽端口 ss -tlnp 查看哪些進程使用了監聽端口 防火墻 systemctl....
發表于 2020-04-18 10:25? 471次閱讀
LINUX最全的命令行詳細概述

嵌入式汽車電子系統的新設計挑戰與解決方案

第一代防夾設計通常包含一套由電動馬達驅動的機械驅動系統。馬達電流由一顆控制器監測,然后與代表失速狀態....
發表于 2020-04-18 10:02? 150次閱讀
嵌入式汽車電子系統的新設計挑戰與解決方案

文件的Linux常用命令的相關知識概述

我們知道 Linux 下有非常多的命令,我們可以通過這些命令在 Shell 環境下與機器進行交互,那....
發表于 2020-04-18 09:59? 326次閱讀
文件的Linux常用命令的相關知識概述

基于S3C2410A微處理器實現嵌入式GPS導航...

系統平臺的建立主要包括兩部分,即宿主機(PC機)上操作系統的選擇和交叉編譯器工具鏈的建立。
發表于 2020-04-18 09:29? 108次閱讀
基于S3C2410A微處理器實現嵌入式GPS導航...

linux系統POS嵌入式數據庫如何去構建

SQLite作為一個嵌入式的數據庫,主要的是程序小(200多K),速度快,支持ANSISQL-92的....
發表于 2020-04-17 14:42? 118次閱讀
linux系統POS嵌入式數據庫如何去構建

嵌入式芯片是如何改變的

Secure Vault能夠利用當今可用于無線物聯網SoC的最先進硬件和軟件安全保護功能,幫助連網設....
發表于 2020-04-17 14:25? 105次閱讀
嵌入式芯片是如何改變的

TASKING針對英飛凌第三代AURIX微控制器...

基于現有的嵌入式軟件開發工具進行擴充,包括針對汽車安全關鍵應用的微控制器性能優化
發表于 2020-04-17 14:23? 206次閱讀
TASKING針對英飛凌第三代AURIX微控制器...

第一屆openEuler峰會2020在線召開 鼓...

2020年1月1日,華為服務器操作系統EulerOS正式開源,命名為openEuler,開源社區也正....
發表于 2020-04-17 14:20? 349次閱讀
第一屆openEuler峰會2020在線召開 鼓...
宝贝在楼梯间做好刺激_日本tvvivodes欧美_日本变态强奷在线播放