Buildroot
1.1、Buildroot简介
是什么 ?:a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation.
开发语言:C
官方主页:https://buildroot.org
源码仓库:https://github.com/buildroot
1.2、Buildroot使用示例
step1、确定需求

一个rootfs可以很大,也可以很小。很小的时候,只要能通过chroot进入即可。 大的时候,可以制作可启动文件,这时候就涉及到initSystemBootLoaderLinux kernel等东西了。

step2、安装依赖
下载时cURL
解压时tarbzip2
编译时makegcc
step3、使用curl命令下载Buildroot源码包 (
curl -LO https://buildroot.org/downloads/buildroot-2019.02.7.tar.bz2
step4、使用tar解压Buildroot源码包
tar vxf buildroot-2019.02.7.tar.bz2
step5、进入解压后的目录,并查看它的内容

Buildroot源码结构与Linux kernelBusyBox完全一样。

Buildroot源码是由MakefileKconfig配置文件构成的。

Buildroot的所有操作都是通过maketarget提供的。

make help

查看使用帮助。

make list-defconfigs

列出预定义配置

Buildroot预先配置好了很多种情形的配置文件,存放在configs目录中,如下:

这些配置文件的文件名都是以_defconfig为结尾。

我们可以在某个预定义配置的基础上进行简单的修改,可以大大降低工作量。

make <xx_defconfig>

使用某个预定义配置

make aarch64_efi_defconfig
make <menuconfig | nconfig | xconfig | gconfig>

Buildroot提供了4种配置界面:

配置命令依赖
make menuconfigncurses5
make nconfigncurses5
make xconfigqt4
make gconfiggtk2

强烈推荐使用make menuconfig配置界面,效果如下:

详细的配置,在后面讲解。

make show-targets

列出当前配置中需要安装的软件包。

make <target>[-action]

单独对某个软件包的操作。

action作用
source只下载源码包
extract只解压源码包
patch只给源码打上补丁
patch只给源码打上补丁
depends构建所有的依赖包
graph-depends生成依赖关系图
configure配置过程
build编译过程
dirclean删除build目录
reconfigure重新配置
rebuild重新编译

示例:

make busybox
make busybox-source
make busybox-menuconfig

单独配置BusyBox

make linux-menuconfig

单独配置Linux

make source

下载所有的软件包。

make <manual-html | manual-split-html | manual-pdf | manual-text | manual-epub | manual>

生成帮助手册。

make clean

清理build过程产生的文件。

make distclean

不仅清理build过程产生的文件,同时也删除了.config

make all

这是默认的target

make toolchain

构建toolchain

step6、配置

启动配置界面:

make menuconfig
config1 : Target options --->

这里是选择目标运行在哪个CPU架构之上。

config2 : Build options --->

这里可以全部默认。

config3 : Toolchain ---> Toolchain type

Toolchain就是编译后面要安装的软件包的一系列相关的工具。

Toolchain type2个选择:

Buildroot Toolchain需要哪个工具,他会自动下载、编译、安装
External Toolchain我们自己下载、编译、安装需要的工具

Buildroot Toolchain是最方便的,它也是默认被选择的。

config4 : Toolchain ---> C library

这是选择用哪个libc进行编译。有3个选择:

glibc庞大
uClibc-ng精简
musl精简

uClibc-ng是默认被选中的,因为Buildroot这个工具本来就是uClibc团队开发的。

config5 : Toolchain ---> Kernel headers

这是选择用哪个版本的Linux API,你可以选择一些版本,也可以手动输入。

config6 : Toolchain ---> Enable WCHAR support

一定要选中此选项,后面的很多包在编译的时候都需要此特性。

config7 : Toolchain ---> Enable C++ support

最好选中此选项,后面的某些包在编译的时候都需要此特性。

config8 : System configuration ---> System hostname

这里是生成/etc/hostname文件的内容。默认是buildroot,可以修改成你自己的。

config9 : System configuration ---> System banner

这里是生成/etc/issue文件的内容。默认是Welcome to Buildroot,可以修改成你自己的。

config10 : System configuration ---> Init system

这里默认选中的是BusyBox。如果仅仅是为了chroot,而不是为了可启动,那么就没必须要使用Init system

config11 : Target packages → Networking applications

这里是选择目标中需要包含哪些网络管理工具。建议选中下面这些:

config12 : Target packages ---> System tool

这里是选择目标中需要包含哪些系统管理工具。建议选中下面这些:

config13 : Target packages ---> Shell and utilities

这里是选择目标中需要包含哪些Shell和工具。建议选中下面这些:

config14 : Target packages ---> Text editors and viewers

这里是选择目标中需要包含哪些文本编辑器文本查看器。建议选中下面这些:

config15 : Filesystem images --->

选择生成的文件系统格式,默认即可。

config16 : Bootloaders images --->

选择使用哪个Bootloader,默认没有任何一个被选中。

保存配置

使用Tab键切换到Save按钮,回车,出现如下界面:

回车,保存。会产生一个.config文件,包含了所有我们配置的信息,该文件在编译的时候使用。

step7、编译、安装
make && make install
step8、查看编译后的产物

编译、安装完成之后,多出了dloutput 2个目录。

dl目录存放的是下载的软件包:

output/images/rootfs.tar就是我们的rootfs

step9、解压rootfs.tar
cd output/images
mkdir rootfs
tar vxf rootfs.tar -C rootfs
step10、chroot进入rootfs
sudo chroot rootfs /bin/zsh

运行效果如下: