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库等原材料制作一个自己工具链,也可以下载第三方制作好的开源工具。
原文链接:http://blog.csdn.net/zhou_chenz/article/details/52346134
Buildroot构建指南--Overview的更多相关文章
- Buildroot构建指南——根文件系统(Rootfs)【转】
本文转载自; 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Buildroot构建指南——根文件系统(Rootfs) Buildroot的Rootfs构建流程有一个大 ...
- Buildroot构建指南——工具链
Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件.一般大家默认工具链等于gcc或者arm-linux-gcc,但是实际上,gcc只是工具链的编译器部分,不是全部,制作一个工 ...
- Buildroot构建指南--快速上手与实用技巧
Buildroot官方全英文使用手册的链接是https://buildroot.org/downloads/manual/manual.html,需要知道每一个细节的朋友,可以仔细查阅,这篇文章只是我 ...
- Buildroot构建指南--快速上手与实用技巧【转】
本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52335634 Buildroot官方全英文使用手册的链接是https://buildro ...
- Buildroot构建指南——工具链【转】
本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52346134 Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软 ...
- Buildroot構建指南--Overview【转】
本文转载自:http://www.unixlinux.online/unixlinux/linuxjc/gylinux/201703/65218.html Buildroot構建指南--Overvie ...
- 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
作者:阿里云用户mr_wid ,z)NKt# @I6A9do 如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV RsfTUb)< 投票标题: 28.[阿里云 ...
- 迅为iTop开发板使用buildroot构建opencv文件系统
这次我们来介绍使用buildroot构建opencv开发环境,buildroot 是 Linux平台上一个构建嵌入式Linux系统的框架.整个buildroot是由 Makefile脚本和Kconfi ...
- buildroot构建项目(一)---buildroot介绍
1.1 什么是buildroot Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Li ...
随机推荐
- asp.net操作GridView添删改查的两种方法 及 光棒效果
这部份小内容很想写下来了,因为是基础中的基础,但是近来用的比较少,又温习了一篇,发现有点陌生了,所以,还是写一下吧. 方法一:使用Gridview本身自带的事件处理,代码如下(注意:每次操作完都得重新 ...
- du df 磁盘命令
du命令是检查硬盘使用情况,统计文件或目录及子目录使用硬盘的空间大小.参数的不同组合,可以更快的提高工作效率,以下仅列出了经常使用到的参数,如需更详细的信息,请用man du命令来获得. 说明 - ...
- Vue中使用百度地图——根据输入框输入的内容,获取详细地址
知识点:在Vue.js项目中调用百度地图API,实现input框,输入地址,在百度地图上定位到准确地址,获得到经纬度 参考博客: 百度地图的引用,初步了解参考博客:http://blog.csdn. ...
- Lucene 的 Scoring 评分机制
转自: http://www.oschina.net/question/5189_7707 Lucene 评分体系/机制(lucene scoring)是 Lucene 出名的一核心部分.它对用户来 ...
- JAVA小工具打包
D: cd D:\xxx\IPOSpider javac -d bin/ src/com/xxx/IPOSpider.java src/com/xxx/ConfigProperties.java -c ...
- dijkstra算法理解+模板
2017-09-17 21:10:45 writer:pprp 看了看dijkstra算法,用自己语言总结一下主要过程吧, 首先,明确这个算法用处是在于计算单源最短路径问题并且边权非负,给出一个起点可 ...
- hdu 1241 搬寝室 水dp
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...
- NoSQL&&Redis介绍
再说Redis之前,想先说一下NoSQL.在最早的单机时代,随着数据的增加一台机器可能放不下了.同时索引占用的内存空间也会越来越大.对请求的读写操作影响很大.于是就在数据库之前增加了一层保护层 — 缓 ...
- HDU - 59562016ACM/ICPC亚洲区沈阳站I - The Elder 树上斜率优化dp
题意:给定上一棵树,然后每条边有一个权值,然后每个点到 1 的距离有两种,第一种是直接回到1,花费是 dist(1, i)^2,还有另一种是先到另一个点 j,然后两从 j 向1走,当然 j 也可以再向 ...
- 第六天 vim编辑的使用和Xmanager远程工具的使用
1.1 vim主要模式介绍,vim命令模式 使用命令 vim [file name] 有三种主要模式:命令模式.编辑模式.命令行模式 在vim中主要使用快捷键进行操作,详见:http://www.cn ...