buildroot
http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
简介
buildroot是一个Makefiles和patches的命令集,它可以非常简单的为你的目标系统产生一个交叉编译工具链和根文件系统。除了buildroot本身外,它还可以用来配置编译linux, busybox, u-boot以及uClibc库。(uclibc库比GNU libc库小,适合于嵌入式系统)
buildroot拥有内嵌的编译工具链,也可以通过配置指定外部的编译工具链。通过指定linux的源码路径和内核配置选项,调用交叉编译器编译内核镜像(可以指定内核镜像的存放路径、文件名、压缩格式等);同时,编译busybox用来生成根文件系统,可以指定根文件系统的格式(cramfs/squashfs/ubifs/jffs2/ext2等)和压缩格式(gzip/bzip2/lzma等),最后生成rootfs.tar文件。
编译
make menuconfig 配置buildroot以及其他组建的配置选项,在根目录生成.config配置文件

make 编译
make BR2_JLEVEL=N 编译每个单独的package时启用多线程编译 (不能用make -jN命令)
编译生成的文件位于output目录下,其中output/images目录存放最终的镜像文件,比如内核镜像、bootloader镜像以及根文件系统镜像等;output/build目录是编译目录; output/staging目录包含了根文件系统的层次结构,但是它不是真正的根文件系统;output/target目录存放了几乎完整的根文件系统文件,除了/dev下的设备节点,同时也没有正确的读写权限,真正的根文件系统镜像位于output/images下; output/host下包含了主机需要的工具。
常用命令
make help 查看帮助信息
make show-targets 查看全部编译目标
make V=1 <target> 显示编译时执行的所有命令
make <pkg-target> 编译指定目标
make <pkg-target>-rebuild 重新编译指定目标
make O=/tmp/build 指定输出目录
make UCLIBC_CONFIG_FILE=/my/uClibc.config 指定uClibc配置
make BUSYBOX_CONFIG_FILE=/my/busybox.config 指定busybox配置
make list-defconfigs 显示拥有默认配置的单板列表
make busybox-menuconfig
make linux-menuconfig
make uclibc-menuconfig
make barebox-menuconfig
make uboot-menuconfig
make clean
make distclean 同时清除配置文件
make clean all 完整的重新编译
生成帮助手册,当前在docs/manual下,编译生成的在output/dosc/manual下
make manual-clean
make manual
make -s printvars 显示内部编译变量
make graph-depends 图形化查看依赖关系
make <pkg>-graph-depends 查看某个package的依赖关系
init进程
init进程是内核加载的第一个用户空间的进程,PID为1,负责加载用户空间的服务和程序。Buildroot提供了三种init的解决方案:
1) Busybox 使能BR2_INIT_BUSYBOX选项,启动时读取/etc/inittab(默认inittab文件位于buildroot/system/skeleton/etc/inittab),inittab除了做一些简单的任务和文件系统挂载之外,还负责加载/etc/init.d/rcS脚本(主要的任务都在该脚本中实现),此外,还负责加载getty程序(提供login功能)
Busybox
通过设置BR2_PACKAGE_BUSYBOX_CONFIG可以指定busybox配置文件(在busybox源码包下通过make menuconfig可以生成自定义配置文件,也可以在buildroot根目录执行make busybox-menuconfig命令创建配置文件)
uClibc
同busybox配置一样,也可以通过BR2_UCLIBC_CONFIG指定uClibc配置,或者通过make uclibc-menuconfig生成
Linux Kernel
通过BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG指定默认内核配置文件,可以通过在buildroot根目录执行make linux-menuconfig命令或者在linux内核源码根目录执行make menuconfig生成配置文件
U-Boot
通过BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG指定uboot默认配置文件,在buildroot根目录执行make uboot-menuconfig或者在uboot源码根目录执行make menuconfig生成配置文件
Package
make <package>-<target>
Buildroot对单个package的处理过程通常包括:下载tarball,解压,配置,编译,安装。源码解压到output/build/<package>-<version>目录,这是个临时目录,当执行make clean命令时,该目录会被删除,下一次执行make时重新创建。
但是,如果我们希望自己指定源代码,比如内核源码,上述方式就不适用,因为我们无法实现代码的修改和修改记录的保存。针对这种情况,buildroot给我们提供了<pkg>_OVERRIDE_SRCDIR机制,buildroot首先读取override文件,如果用户指定了特定package的代码路径,就不去执行下载tarball和解压的操作。该override文件默认为buildroot根目录的local.mk文件,也可以通过BR2_PACKAGE_OVERRIDE_FILE指定override文件。
在override文件中,buildroot希望找到如下的行:
<pkg1>_OVERRIDE_SRCDIR = /path/to/pkg1/sources
<pkg2>_OVERRIDE_SRCDIR = /path/to/pkg2/sources
比如
LINUX_OVERRIDE_SRCDIR=/home/bob/linux/
BUSYBOX_OVERRIDE_SRCDIR=/home/bob/busybox/
编译的时候,buildroot会用rsync命令从<pkg>_OVERRIDE_SRCDIR目录拷贝源码到output/build/<package>-custom目录,可以使用make <pkg>-rebuild和make <pkg>-reconfigure命令,或者make <pkg>-rebuild all。
根文件系统定制
buildroot最常用的功能是创建根文件系统,所以重点记录根文件系统的定制,包括:
1) 添加或者覆盖文件(BR2_ROOTFS_OVERLAY)
2) 修改或者删除文件(BR2_ROOTFS_POST_BUILD_SCRIPT)
3) 在创建根文件系统之前执行特定的命令(BR2_ROOTFS_POST_BUILD_SCRIPT)
4) 设置权限和属组关系(BR2_ROOTFS_DEVICE_TABLE)
5) 添加指定的设备节点(BR2_ROOTFS_STATIC_DEVICE_TABLE)
6) 添加用户账户(BR2_ROOTFS_USERS_TABLES)
7) 生成文件系统之后执行特定的命令(BR2_ROOTFS_POST_IMAGE_SCRIPT)
8) 给指定的package打补丁(BR2_GLOBAL_PATCH_DIR)
9) 添加工程指定的packages
buildroot的更多相关文章
- buildroot使用详解
为什么要使用buildroot? (文件系统搭建,强烈建议直接用buildroot,官网[http://buildroot.uclibc.org/]上有使用教程非常详细)文件系统通常要包含很多第三方软 ...
- buildroot 添加ssh,以及使用stftp 服务
上一篇水了一下关于buildroot的基本操作,这一章水一下开启SSH服务以及配置sftp服务,以及静态IP的设置. 配置: make menuconfig Target packages ---& ...
- buildroot 制作Linux文件系统初级使用教程
buildroot 下载地址:https://buildroot.org/download.html 放在Linux文件下解压出来. 使用make menuconfig 进行配置相关的东西. 在使用这 ...
- iOS Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:7962
Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Cac ...
- buildroot 使用小记 - 2 源文件目录结构
官方下载下来的buildroot源码包在解压后,是一个名为buildroot的文件夹,它下面的目录/文件结构如下: Makefile - 顶级makefile,编译总入口 Config.in - 顶级 ...
- buildroot ntp 网络时钟同步
/********************************************************************** * buildroot ntp 网络时钟同步 * 说明: ...
- buildroot httpd php
/******************************************************************** * buildroot httpd php * 说明: * ...
- buildroot mysql
/******************************************************************** * buildroot mysql * 说明: * 这两天要 ...
- 使用buildroot编译bind DNS服务器
用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以直接添加到文件系统里边,如常用的udhcpc,tftp,apache,ligh ...
- buildroot linux filesystem 初探
/****************************************************************************** * buildroot linux fi ...
随机推荐
- easy-mock的运用
一.概念 Easy Mock 是杭州大搜车无线团队出品的一个极其简单.高效.可视化.并且能快速生成模拟数据的 在线 mock 服务 .以项目管理的方式组织 Mock List,能帮助我们更好的管理 ...
- offsetWidth clientWidth scrollWidth 的区别
了解 offsetWidth clientWidth scrollWidth 的区别 最近需要清除区分开元素的width,height及相应的坐标等,当前这篇用来区分offsetWidth clien ...
- Redis---Redis与Memcached
4.Redis与Memcached 两者都是非关系型内存键值,主要有以下不同: 数据类型 Memcached仅支持字符串类型,而Redis支持五种不同的数据类型,可以更灵活地解决问题. 数据持 ...
- AFNetworking2.0源码解析<二>
本篇我们继续来看看AFNetworking的下一个模块 — AFURLRequestSerialization. AFURLRequestSerialization用于帮助构建NSURLReque ...
- mysql的innodb 引擎 表锁与行锁
innodb 引擎 行锁与表锁 行锁与表锁是基于索引来说的(且索引要生效) 不带索引 (表锁)要全表扫描 1. 执行select @@autocommit; 查看结果 0是不自动提交事务,1是自动提交 ...
- fpga ip
原文地址:altera FIR ip核 license破解作者:王永刚Aether 在证书文件中添加一段: FEATURE 6AF7_0012 alterad 2035.12 permanent un ...
- MFC学习笔记2---简单计算器
前言 学习了鸡啄米网页的前三部分后,我们就可以做一个小软件出来了,我选择先做一个计算器. 这是Win7系统自带的计算器: 为了提升成就感,我将计算器的大部分内容去除,于是就变成这样: 这样就只剩下了1 ...
- Netty学习--第二章 BIO的模型详解
一.什么是阻塞.非阻塞.同步.异步 我们以A线程调用B线程的过程例子来讲解这四个概念 在一个程序里,A调用B了,此时如果是 同步: A必须等待B返回结果后,才能继续执行,但是在这期间A会一直监控B的返 ...
- postman(二):详解在Pre-request Script中如何执行请求
一.这里以Pre-request Script标签来介绍 postman提供了postman提供了一个"Send a request"代码段,他是已经封装好的发送请求的方法 一个& ...
- 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)
其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用核心就是用localStorage存.取数据,这样 ...