什么是buildroot

Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架

0.下载buildroot

Buildroot版本每2个月,2月,5月,8月和11月发布一次。版本号的格式为YYYY.MM,例如2013.02、2014.08。

可以从http://buildroot.org/downloads/获得发行包。

也可通过github仓库获取:

git clone git://git.busybox.net/buildroot

buildroot目录结构

解压buildroot源码目录如下:

  • arch: CPU架构相关的配置脚本

  • board: 在构建系统时,board默认的boot和Linux kernel配置文件,以及一些板级相关脚本

  • boot: uboot配置脚本目录

  • configs: 板级配置文件,该目录下的配置文件记录着该机器平台或者方案使用的工具链,boot, kernel,各种应用软件包的配置

  • dl: download的简写,下载一些开源包。第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间

  • docs:

  • fs: 各种文件系统的自动构建脚本

  • linux: 存放Linux kernel的自动构建脚本

  • package: 第三方开源包的自动编译构建脚本,用来配置编译dl目录下载的开源包

  • support:

  • system: 存放文件系统目录的和设备节点的模板,这些模板会被拷贝到output/目录下,用于制作根文件系统rootfs

  • toolchain/ 目录中存放着各种制作工具链的脚本

编译出的output输出目录介绍:

  • images/存储所有映像(内核映像,引导加载程序和根文件系统映像)的位置。这些是您需要放在目标系统上的文件。

  • build/构建所有组件的位置(包括主机上Buildroot所需的工具和针对目标编译的软件包)。该目录为每个组件包含一个子目录。

  • host/包含为主机构建的工具和目标工具链。

  • staging/是到内部目标工具链host/的符号链接

  • target/它几乎包含了目标的完整根文件系统。除了设备文件/dev/(Buildroot无法创建它们,因为Buildroot不能以root身份运行并且不想以root身份运行)之外,所需的一切都存在。

工具链

Buildroot为交叉编译工具链提供了两种解决方案:

  • 内部工具链,称为Buildroot toolchain在配置接口。
  • 外部工具链External toolchain。

    我们这里选择的是外部工具链,工具链的来源可以选择下载也可以选择指定工具链前缀如:/opt/ali/ali-linux/Codescape.GNU.Tools.Package.2017.10-05.for.MIPS.MTI.Linux.CentOS-5.x86_64/usr/bin/mips-mti-linux-gnu-,我这里选择的下载工具链源码。下载完后,同时会对用来编译工具链的原始工具链解压到(BUILD_ROOT)/host/opt/ext-toolchain/目录下,然后会对工具链源码编译安装到$(BUILD_ROOT)/host/usr/bin下,这样我们的工具链就可以使用了。







1.buildroot常用make命令

*make help: 可以看到buildroot下make的使用细节,包括对package、uclibc、busybox、linux以及文档生成等配置。

  • make menuconfig(make linux-menuconfig...):进行图形化配置

  • make:编译

make命令通常将执行以下步骤:

  1. 下载源文件(根据需要);
  2. 配置、构建和安装交叉编译工具链,或仅导入外部工具链;
  3. 配置、构建和安装选定的目标软件包;
  4. 构建内核映像(如果选择);
  5. 构建引导加载程序映像(如果选择);
  6. 以选定的格式创建一个根文件系统
  • make clean:delete all build products (including build directories, host, staging and target trees, the images and the toolchain)

  • make distclean: 等于make clean+删除配置

  • make show-targets:显示出本次配置所要编译所有的目标

  • make pkg-target:单独编译某个pkg模块

  • make pkg-rebuild:重新编译pkg

  • make  pkg-extract:只下载解压pkg,不编译,pkg解压后放在 output/build/对应的pkg-dir目录下

  • make pkg-source:只下载某pkg,然后不做任何事情

2.buildroot框架

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文件,已经帮你自动实现了下载、解压、依赖包下载编译等一系列机械化的流程。

你只要需要按照格式写app_pkg.mk,填充下载地址,链接依赖库的名字等一些特有的构建细节即可。 总而言之,Buildroot本身提供构建流程的框架,开发者按照格式写脚本,提供必要的构建细节,配置整个系统,最后自动构建出你的系统。

3.添加自己的软件包

3.1添加package/Config.in入口

添加如下语句:

menu "myown(fuzidage) package"
source "package/helloworld/Config.in"

为自己的软件包添加入口,这样在make menuconfig的时候就可以找到自己的软件包的Config.in,如果在make menuconfig的时候选中helloworld,那么‘BR2_PACKAGE_HELLOWORLD=y’也会同步到.config中去。

3.2配置APP对应的Config.in和mk文件

在package中新增目录helloworld,并在里面添加Config.in和helloworld.mk

1)Config.in

config BR2_PACKAGE_HELLOWORLD
bool "helloworld"
help
This is a demo to add myown(fuzidage) package.

helloworld/Config.in文件,可以通过make menuconfig可以对helloworld进行选择。只有在BR2_PACKAGE_HELLOWORLD=y条件下,才会调用helloworld.mk进行编译

2)helloworld.mk

################################################################################
#
# helloworld
#
################################################################################ HELLOWORLD_VERSION:= 1.0.0
HELLOWORLD_SITE:= $(CURDIR)/work/helloworld
HELLOWORLD_SITE_METHOD:=local
HELLOWORLD_INSTALL_TARGET:=YES define HELLOWORLD_BUILD_CMDS
$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all
endef define HELLOWORLD_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/helloworld $(TARGET_DIR)/bin
endef define HELLOWORLD_PERMISSIONS
/bin/helloworld f 4755 0 0 - - - - -
endef $(eval $(generic-package))

helloworld.mk包括源码位置、安装目录、权限设置等。

3.3编写APP源码和Makefile

3.4通过make menuconfig选中APP

通过上面对package/Config.in入口的配置, 我们可以通过make menuconfig,进入Target packages可以看见多了一个"myown(fuzidage) package"入口,选中helloworld。

然后make savedefconfig,对helloworld的配置就会保存到xxx_defconfig中.

3.5编译使用APP

可以和整个平台一起编译APP;或者make helloworld单独编译。

这两个文件在选中此APP之后,都会被拷贝到output/build/helloworld-1.0.0文件夹中。

然后生成的bin文件拷贝到output/target/bin/helloworld,这个文件会打包到文件系统中。

如果需要清空相应的源文件,通过make helloworld-dirclean。

4如何重新编译软件包

经过第一次完整编译后,如果我们需要对源码包重新配置,我们不能直接在buildroot上的根目录下直接make,buildroot是不知道你已经对源码进行重新配置,它只会将第一次编译出来的文件,再次打包成根文件系统镜像文件。

那么可以通过以下2种方式重新编译:

  1. 直接删除源码包,然后make all

     例如我们要重新编译helloworld,那么可以直接删除output/build/helloworld目录,那么当你make的时候,就会自动从dl文件夹下,解压缩源码包,并重新安装。这种效率偏低
  2. 进行xxx-rebuild,然后make all

     也是以helloworld为例子,我们直接输入make helloworld-rebuild,即可对build/helloworld/目录进行重新编译,然后还要进行make all(或者make world 或者 make target-post-image)
  3. 如果要重新配置编译安装:

         make <package>-reconfigure; make all

5.单独生成目标(build out of tree)

	make O=/home/lyb/output

效果如下:可以看见编译产生的output目录在/home/lyb下了:

具体的build训练教程点击如下链接.

buildroot官方训练教程

buildroot教程的更多相关文章

  1. buildroot 制作Linux文件系统初级使用教程

    buildroot 下载地址:https://buildroot.org/download.html 放在Linux文件下解压出来. 使用make menuconfig 进行配置相关的东西. 在使用这 ...

  2. buildroot使用详解

    为什么要使用buildroot? (文件系统搭建,强烈建议直接用buildroot,官网[http://buildroot.uclibc.org/]上有使用教程非常详细)文件系统通常要包含很多第三方软 ...

  3. openwrt教程 第一章 物联网&amp;openwrt开发概述

    1.1 我们的宗旨 互联网.移动互联网的时代已经过去,物联网的时代已经来临!2014年,是物联网元年,2016年,物联网将达到高潮!为了迎接该潮流,我们工作室(F403科技创意室:http://f40 ...

  4. 使用buildroot搭建linux文件系统【转】

    本文转载自:http://blog.csdn.net/metalseed/article/details/45423061 (文件系统搭建,强烈建议直接用buildroot,官网上有使用教程非常详细b ...

  5. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  6. (六)buildroot使用详解

    为什么要使用buildroot? (文件系统搭建,强烈建议直接用buildroot,官网[http://buildroot.uclibc.org/]上有使用教程非常详细)文件系统通常要包含很多第三方软 ...

  7. 迅为iTop开发板使用buildroot构建opencv文件系统

    这次我们来介绍使用buildroot构建opencv开发环境,buildroot 是 Linux平台上一个构建嵌入式Linux系统的框架.整个buildroot是由 Makefile脚本和Kconfi ...

  8. Buildroot 用户手册 (中文)

    文章目录 I. Getting started 1. About Buildroot 2. System requirements 2.1. Mandatory packages 2.2. Optio ...

  9. 基于全志A40i开发板——Linux-RT内核应用开发教程(1)

    目录 1 Linux-RT内核简介 3 2 Linux系统实时性测试 3 3 rt_gpio_ctrl案例 10 4 rt_input案例 15 本文为Linux-RT内核应用开发教程的第一章节--L ...

随机推荐

  1. Linux下RocketMQ下载安装教程

    一.下载 1.官网下载:下载地址   2.百度网盘下载:下载地址 提取码:0g5a java开发工具下载地址及安装教程大全,点这里. 更多深度技术文章,在这里. 二.安装及启动 1.将zip文件上传到 ...

  2. 分布式监控告警平台Centreon快速使用

    一. Centreon概述 Centreon是一款功能强大的分布式IT监控系统,它通过第三方组件可以实现对网络.操作系统和应用程序的监控:首先,它是开源的,我们可以免费使用它:其次,它的底层采用nag ...

  3. ARTS-S sed替换

    网上有大量替换的例子,比如 sed 's/aaa/bbb/g' a.txt 其实分隔符可以用别的字符,比如#,所以下面的命令也是正确的 sed 's#aaa#bbb#g' a.txt 用#号在用环境变 ...

  4. Python3 面向对象小练习

    定义MySQL类 对象有id.host.port三个属性 定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 提供两种实例化方式,方式一:用户传入host和port 方式二:从 ...

  5. 支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)

    宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理.应用商店.Nginx配置.存储管理.CI/CD.权限管理等,支持100+业务线.3500+的容器运行.伴 ...

  6. 非线性函数的最小二乘拟合及在Jupyter notebook中输入公式 [原创]

    突然有个想法,能否通过学习一阶RC电路的阶跃响应得到RC电路的结构特征——时间常数τ(即R*C).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多的采样点数来降低信号采集噪声对τ估计值的 ...

  7. XML字符串转为Map集合

    public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...

  8. C#中怎样获取默认配置文件App.config中配置的键值对内容

    场景 在新建一个程序后,项目中会有一个默认配置文件App.config 一般会将一些配置文件信息,比如连接数据库的字符串等信息存在此配置文件中. 怎样在代码中获取自己配置的键值对信息. 注: 博客主页 ...

  9. Bash脚本编程之字符串处理

    简介 其实这里说得字符串处理,对应的是bash官网中的[Shell Parameter Expansion],不过直接去看这部分内容实在是太难以理解了.就按照马哥所说的字符串处理会比较好理解,平常使用 ...

  10. 推荐一种非常好的新版DSP库源码移植方式,含V7,V6和V5的IAR以及MDK5的AC5和AC6版本

    说明: 1.新版CMSIS V5.6里面的DSP库比以前的版本人性化了好多. 2.本帖为大家分享一种源码的添加方式,之前一直是用的库方便,不方便查看源码部分. 3.DSP教程可以还看第1版的,在我们的 ...