buildroot教程
什么是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命令通常将执行以下步骤:
- 下载源文件(根据需要);
- 配置、构建和安装交叉编译工具链,或仅导入外部工具链;
- 配置、构建和安装选定的目标软件包;
- 构建内核映像(如果选择);
- 构建引导加载程序映像(如果选择);
- 以选定的格式创建一个根文件系统
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"
helpThis 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:=YESdefine HELLOWORLD_BUILD_CMDS$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all
endefdefine HELLOWORLD_INSTALL_TARGET_CMDS$(INSTALL) -D -m 0755 $(@D)/helloworld $(TARGET_DIR)/bin
endefdefine 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种方式重新编译:
直接删除源码包,然后make all
例如我们要重新编译helloworld,那么可以直接删除output/build/helloworld目录,那么当你make的时候,就会自动从dl文件夹下,解压缩源码包,并重新安装。这种效率偏低
进行xxx-rebuild,然后make all
也是以helloworld为例子,我们直接输入make helloworld-rebuild,即可对build/helloworld/目录进行重新编译,然后还要进行make all(或者make world 或者 make target-post-image)
如果要重新配置编译安装:
make <package>-reconfigure; make all
5.单独生成目标(build out of tree)
make O=/home/lyb/output
效果如下:可以看见编译产生的output目录在/home/lyb下了:
具体的build训练教程点击如下链接.
buildroot官方训练教程
buildroot教程相关推荐
- 【转载】buildroot教程
buildroot教程 什么是buildroot Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架. 0.下载buildroot Buildroot版本每2个月,2月,5 ...
- linux内核打印前有buildroot,[教程]使用buildroot完全自定义自己的embedded linux系统(nand)...
编译环境: ubuntu 12.04(x86_64) 目标环境: 1) linux-3.4内核 2) buildroot 2013-02 3)系统运行在nand上 固件制作步骤说明: 步骤一:创建自己 ...
- linux添加一个nand设备,[教程]使用buildroot完全自定义自己的embedded linux系统(nand)...
编译环境: ubuntu 12.04(x86_64) 目标环境: 1) linux-3.4内核 2) buildroot 2013-02 3)系统运行在nand上 固件制作步骤说明: 步骤一:创建自己 ...
- Buildroot编译树莓派教程
下载源码 wget https://buildroot.uclibc.org/downloads/buildroot-2016.11.2.tar.gz 解压 tar -xvf buildroot-20 ...
- 根文件系统构建(Buildroot 方式)
目录 何为buildroot? buildroot 简介 buildroot 下载 buildroot 构建根文件系统 配置buildroot 编译buildroot buildroot 根文件系统测 ...
- FD.io VPP环境下运行用户应用程序教程
FD.io VPP环境下运行用户应用程序教程 RToax 2020年9月 相关文章:<FD.io VPP利用iperf3进行UDP灌包测试-英特尔X520万兆网卡> 1. VPP简介 VP ...
- Buildroot根文件系统构建
前面我们学习了如何使用 busybox 来构建根文件系统,但是 busybox 构建的根文件系统不其全,很多东西需要我们自行添加,比如 lib 库文件.在我们后面的驱动开发中很多第三方软件也需要我们自 ...
- sdk开发包怎么使用_怎么使用 Buildroot 构建根文件系统?
1. Buildroot 简介 制作根文件系统有归多种方法: ① 使用Busybox手工制作 Busybox本身包含了很了Linux命令,但是要编译其他程序的话需要手工下载.编译,如果它需要某些依赖库 ...
- buildroot制作树莓派CM3的系统
之前我写过一篇文章讲如何通过buildroot制作树莓派CM3的系统镜像文件,整个的编译过程按照之前的文章进行可以顺利的得到一个镜像文件(sdcard.img).但是这个文件烧录到sd卡后可以在树莓派 ...
最新文章
- 「AI白身境」究竟谁是paper之王,全球前10的计算机科学家
- MySQL中group_concat()函数用法总结
- kettle 脚本 java_Kettle 执行SQL脚本
- linux内核之旅ppt_一起玩转 Linux 内核之旅开源社区吧
- 涨姿势,图文带你了解 8 大排序算法
- c语言%m,C语言中rand()%m是啥意思?
- Ubuntu Linux创建Hadoop用户
- 博主带你两个月入门自然语言处理~
- 理解list和vector的区别
- 软件研发管理体系建设
- php 中文日期转时间戳,php日期转时间戳,指定日期转换成时间戳
- 如何测试电脑网速情况
- Python抓取必应搜索背景图片
- 电脑出现“由于该设备有问题,Windows 已将其停止(代码 43)”的提示,该怎么解决?
- 自学平面设计,不能不知道的基础知识点是什么?
- 三面蚂蚁金服成功拿到offer,成功收获美团,小米offer
- 了解常见的模拟器及交换机的基本配置
- DVWA靶场通关(SQL注入)
- 快手2020校园招聘秋招笔试--工程A试卷
- 2017第十八届成都家具展 (中国西部国际博览城)会刊(参展商名录)