Buildroot构建指南--Overview

 

使用Buildroot,让嵌入式Linux系统构建更加便捷。本文以Buildroot-2016.05的版本为基础来说解,不一样版本之间有细节差别,须要根据读者使用的版本自行调整。html

Buildroot是什么

Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你能够和编译Linux内核同样,经过buildroot配置,menuconfig修改,编译出一个完整的能够直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各类库和应用程序)。python

Buildroot使用演示

以Buildroot官方开源社区维护的经典mini2440开发板的项目为例,演示其使用方法。linux

1)     先从Buildroot官网: https://buildroot.org/download.html下载最新的稳定版Buildroot-2016.05压缩包,放到Ubuntu系统下解压web

2)     进入解压后的Buildroot主目录,其目录结构图以下redis

 

Figure1 Buildroot-2016.05 解压后主目录架构

3)     make  mini2440_defconfigapp

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

相关文章
相关标签/搜索