Buildroot構建指南--Overview【转】
本文转载自:http://www.unixlinux.online/unixlinux/linuxjc/gylinux/201703/65218.html
Buildroot構建指南--Overview
使用Buildroot,讓嵌入式Linux系統構建更加便捷。本文以Buildroot-2016.05的版本為基礎來講解,不同版本之間有細節差異,需要根據讀者使用的版本自行調整。
Buildroot是什麼
Buildroot是Linux平台上一個開源的嵌入式Linux系統自動構建框架。整個Buildroot是由Makefile腳本和Kconfig配置文件構成的。你可以和編譯Linux內核一樣,通過buildroot配置,menuconfig修改,編譯出一個完整的可以直接燒寫到機器上運行的Linux系統軟件(包含boot、kernel、rootfs以及rootfs中的各種庫和應用程序)。
Buildroot使用演示
以Buildroot官方開源社區維護的經典mini2440開發板的項目為例,演示其使用方法。
1)先從Buildroot官網: https://buildroot.org/download.html下載最新的穩定版Buildroot-2016.05壓縮包,放到Ubuntu系統下解壓
2)進入解壓後的Buildroot主目錄,其目錄結構圖如下
Figure1 Buildroot-2016.05 解壓後主目錄
3)make mini2440_defconfig
4)make all
5)編譯完,生成的可燒寫文件鏡像,主目錄的在output/images/ 文件夾下,截圖如下:
Figure2 mini2440 開發板,用buildroot編譯生成的可燒寫鏡像
看起來,只要執行make *config和make all的命令,u-boot/linuxkernel/rootfs 都能一次性編譯好,而且編出來的鏡像可以直接燒到mini2440開發板中運行,以後制作uboot, 編譯kenrel, 編譯各種app, 制作rootfs的繁瑣工作都可以自動化一步搞定,媽媽再也不用擔心我構建過程出錯了。Buildroot不愧是自動構建神器。
Buildroot的優勢
Buildroot大概有以下幾點優勢:
a). 可以通在make *config 之後,make menuconfig 配置需要編譯的軟件包,menuconfig目錄如下:
Figure3 make menuconfig的一級界面
Figure4 make menuconfig下的target packages 配置選項
實際上,uboot, linux kernel 還有 ffmpeg等這些應用包,並不是強制都有編譯出來的,都可以通過make menuconfig進行選擇,編譯和構建。Buildroot原則上是提供自動構建框架,具體要編譯什麼包,都是用戶自己可以選擇的。
b). 對豐富的開源應用軟件包的支持,誰說嵌入式軟件工程師都是搞內核驅動的,有了Buildroot, 這麼多開源應用都能移植構建到你的開發板中去,以下是Buildroot/package/ 目錄下支持的自動構建開源項目的截圖:
boost、python、ffmpeg、redis、opencv、opengl、webkit……這些開源應用軟件是不是耳熟能詳呢?沒錯,這些開源應用軟件包都可以在Buildroot下通過你的配置腳本,自動完成官網下載à解壓à系統環境配置à編譯à安裝到根文件系統等這一系列機械繁瑣的工作。
你不用再為某某開源軟件如何移植到我的Linux 開發板而到處在QQ群和論壇問人了,哪怕以後還要你自己開發的新的軟件包,所有繁瑣的移植工作,只要做了一次,都可以用Makefile寫成自動構建腳本,移植工作做了一次,就不用做第二次了,交給Buildroot自動來做就可以了。
Figure5 Buildroot 所能構建的開源應用軟件包部分截圖a
Figure6 Buildroot 所能構建的開源應用軟件包部分截圖b
Figure7 Buildroot 所能構建的開源應用軟件包部分截圖c
c). 可以一塊開發板多次利用。一塊板子,可以配置成手機,機頂盒,監控器,路由器或者各種想不到的有意思的應用。沒錯,只要把相應的配置文件加到configs/目錄下,下次編譯的時候,選擇該種配置,make all 。那麼馬上就可以構建出相應的可燒寫鏡像,燒錄的開發板中,讓你的開發板瞬間從手機變成路由器,無需每次耗時地移植和改動了。
Figure8 Buildroot官方社區目前維護的各種開發板配置截圖
d). 團隊協作的利器。不用手把手告訴你的同事或者合作伙伴如果重頭構建某種系統的整個軟件包,把你配置好的Buildroot交給他,一切自動完成,不明白的步驟,看看各個軟件包的構建腳本,瞬間一目了然。
Buildroot的工作原理
Buildroot原則上是一個自動構建框架,雖然說u-boot、linux kernel這些經典的開源軟件包的構建腳本,官方社區都在幫你實現了,但是有時候你還是需要加入你自己特有的app_pkg軟件包,用以構建自己的應用。
Buildroot提供了函數框架和變量命令框架(下一篇文章將介紹細節),采用它的框架編寫的app_pkg.mk這種Makefile格式的自動構建腳本,將被package/pkg-generic.mk 這個核心腳本展開填充到buildroot主目錄下的Makefile中去。最後make all執行Buildroot主目錄下的Makefile,生成你想要的image。
package/pkg-generic.mk中通過調用同目錄下的pkg-download.mk、pkg-utils.mk文件,已經幫你自動實現了下載、解壓、依賴包下載編譯等一系列機械化的流程。你只要需要按照格式寫Makefile腳app_pkg.mk,填充下載地址,鏈接依賴庫的名字等一些特有的構建細節即可。
總而言之,Buildroot本身提供構建流程的框架,開發者按照格式寫腳本,提供必要的構建細節,配置整個系統,最後自動構建出你的系統。
Figure9 Buildroot 的大概構建流程
Buildroot目錄結構簡介
Buildroot主目錄截圖如下,其中各個目錄存放的腳本簡要介紹。
Figure10 Buildroot主目錄截圖
arch/目錄存放CPU架構相關的配置腳本,如arm/mips/x86 ,這些CPU相關的配置,在制作工具鏈,編譯boot和內核時很關鍵。
board/ 目錄存放各種board 特有的一些配置腳本,在構建系統時,board默認的boot和Linux kernel配置文件,以及一些板相關特殊構建流程的腳本,都在該目錄下,等待自動構建時調用。
boot/ 目錄存在各種boot軟件的自動構建腳本,不只是u-boot,還有grub等,也可以通過Buildroot來構建。
configs/ 目錄存放這每種方案上層的全局配置文件,之前的make mini2440_defconfig實際上就是調用了該目錄下的mini2440方案的配置。該目錄下的配置文件記錄著該機器平台或者方案使用的工具欄,boot, kernel,各種應用軟件包的配置和是否編譯選擇的狀態,之前所說的某個特殊開發板整個系統的配置文件,就在configs/目錄下。
dl/目錄存在從官網上下載的開源軟件包,第一次下載後,下次就不會再去從官網下載了,而是從dl/目錄下拿開源包,以節約時間。
docs/ 存放相關的參考文檔。
fs/ 存放著各種文件系統的自動構建腳本。
linux/ 存放著Linux kernel的自動構建腳本。
output/是編譯出來的輸出文件夾,裡面的build/目錄存放著解壓後的各種軟件包編譯完後的現場。host/目錄放著制作好的編譯工具鏈,target/ 目錄是用來制作rootfs的,裡面放著Linux系統基本的目錄結構,以及各種編譯好的應用庫和bin可執行文件。Images/目錄下就是最終生成的可燒寫到板子上的各種image。
package/ 目錄存放著各種第三方開源應用軟件包的自動編譯構建腳本,這些構建腳本一般都是經過測試,能夠構建出相應的軟件包的。
support/目錄存放著一些固定的流程腳本,以備構建時調用執行。
system/ 目錄存放著文件系統目錄的和設備節點的模板,這些模板會被拷貝到output/目錄下,用於制作根文件系統rootfs。
toolchain/ 目錄中存放著各種制作工具鏈的腳本,buildroot可以選擇從0開始,用gcc和linux 內核,glibc、uclibc庫等原材料制作一個自己工具鏈,也可以下載第三方制作好的開源工具。
Buildroot構建指南--Overview【转】的更多相关文章
- Buildroot构建指南--Overview
使用Buildroot,让嵌入式Linux系统构建更加便捷.本文以Buildroot-2016.05的版本为基础来讲解,不同版本之间有细节差异,需要根据读者使用的版本自行调整. Buildroot是什 ...
- Win 環境構建調試用TreeWalker
語法 var ppTreeWalker = document.createTreeWalker(pRootNode, ulWhatToShow, pFilter, fEntityReferenceEx ...
- llvm學習(二)————llvm編譯與環境構建
本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17339027) 在2011十月份的时候, ...
- 在Gazebo中使用DEM構建起伏地形環境
所需資料下載地址: 1. https://bitbucket.org/osrf/gazebo_tutorials/raw/default/dem/files/ 数字高程模型(致謝谷歌翻譯)概述数字高程 ...
- <译>Spark Sreaming 编程指南
Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...
- Gazebo機器人仿真學習探索筆記(五)環境模型
環境模型構建可以通過向其中添加模型實現,待之後補充,比較有趣的是建築物模型, 可以編輯多層樓層和房間,加入樓梯,窗戶和牆壁等,具體可以參考附錄,等有空再補充. 起伏地形環境構建可以參考之前內容:在Ga ...
- Gazebo機器人仿真學習探索筆記(四)模型編輯
模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入, 需要注意的導入模型格式有相應要求,否在無法導入成功, COLLADA (dae), STereoLitho ...
- Gazebo機器人仿真學習探索筆記(三)機器人模型
gazebo_models:https://bitbucket.org/osrf/gazebo_models 模型庫下載,可以參考如下命令: ~/Rob_Soft/Gazebo7$ hg clone ...
- Gazebo機器人仿真學習探索筆記(二)基本使用說明
在完成Gazebo7安裝後,需要熟悉Gazebo,方便之後使用. 部分源代碼可以參考:https://bitbucket.org/osrf/gazebo/src/ 如果還沒有安裝請參考之前內容完成安裝 ...
随机推荐
- The 16th Zhejiang University Programming Contest-
Handshakes Time Limit: 2 Seconds Memory Limit: 65536 KB Last week, n students participated in t ...
- 《Docker容器与容器云》读书笔记
云计算平台 云计算是一种资源的服务模式,该模式可以实现随时随地.便捷按需地从可配置计算资源共享池中获取所需资源(如网络.服务器.存储.应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销. ...
- 【模拟】2017 Multi-University Training Contest 1 The Battle of Chibi
acm.hdu.edu.cn/showproblem.php?pid=5542 [Accepted] #include<iostream> #include<cstdio> # ...
- mybatis查询返回null解决方案
mybatis查询返回null解决方案: 问题:查询出的列与javabean中的字段名不一致. 解决方案: 1.将javabean中的字段改为和查询出的列名一致: 2.将sql加入as改变列名,和ja ...
- 2016 Multi-University Training Contest 6 solutions BY UESTC
A Boring Question \[\sum_{0\leq k_{1},k_{2},\cdots k_{m}\leq n}\prod_{1\leq j< m}\binom{k_{j+1}}{ ...
- POJ 1328 Radar Installation【贪心 区间问题】
题目链接: http://poj.org/problem?id=1328 题意: 在x轴上有若干雷达,可以覆盖距离d以内的岛屿. 给定岛屿坐标,问至少需要多少个雷达才能将岛屿全部包含. 分析: 对于每 ...
- poj——2239 Selecting Courses
poj——2239 Selecting Courses Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10656 A ...
- 为Java说句公道话
为Java说句公道话 有些人问我,在现有的语言里面,有什么好的推荐?我说:"Java. " 他们非常吃惊:"什么?Java!" 所以我如今来解释一下. Java ...
- Behavioral模式之Chain of Responsibility模式
1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递改请求,知道有一个对象处理它为止. 2.别名 无 3.动机 考虑一个图形用户界面 ...
- SQL - 创建一个学生表,要求有主键约束和非空约束
CREATE TABLE [dbo].[Student] ( [ID] [int] NOT NULL, [Name] [nchar](10) NOT NULL, [Age] [int] NOT NUL ...