是什么 ? | : | a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. |
开发语言 | : | C |
官方主页 | : | https://buildroot.org |
源码仓库 | : | https://github.com/buildroot |
一个rootfs
可以很大,也可以很小。很小的时候,只要能通过chroot进入即可。 大的时候,可以制作可启动文件,这时候就涉及到initSystem、BootLoader、Linux kernel等东西了。
所有时 | Terminal + Shell + GNU CoreUtils |
下载时 | cURL |
解压时 | tar + bzip2 |
编译时 | gmake、gcc / GCC | Clang / LLVM |
curl -LO https://buildroot.org/downloads/buildroot-2019.02.7.tar.bz2
tar vxf buildroot-2019.02.7.tar.bz2
Buildroot
源码结构与Linux kernel和BusyBox完全一样。
Buildroot
源码是由Makefile和Kconfig
配置文件构成的。
Buildroot
的所有操作都是通过gmake的target
提供的。
查看使用帮助。
列出预定义配置
。
Buildroot
预先配置好了很多种情形的配置文件,存放在configs
目录中,如下:
这些配置文件的文件名都是以_defconfig
为结尾。
我们可以在某个预定义配置
的基础上进行简单的修改,可以大大降低工作量。
使用某个预定义配置
:
make aarch64_efi_defconfig
Buildroot
提供了4
种配置界面:
配置命令 | 依赖 |
---|---|
make menuconfig | ncurses5 |
make nconfig | ncurses5 |
make xconfig | qt4 |
make gconfig | gtk2 |
强烈推荐使用make menuconfig
配置界面,效果如下:
详细的配置,在后面讲解。
列出当前配置中需要安装的软件包。
单独对某个软件包的操作。
action | 作用 |
---|---|
source | 只下载源码包 |
extract | 只解压源码包 |
patch | 只给源码打上补丁 |
patch | 只给源码打上补丁 |
depends | 构建所有的依赖包 |
graph-depends | 生成依赖关系图 |
configure | 配置过程 |
build | 编译过程 |
dirclean | 删除build目录 |
reconfigure | 重新配置 |
rebuild | 重新编译 |
示例:
make busybox
make busybox-source
单独配置BusyBox。
单独配置Linux。
下载所有的软件包。
生成帮助手册。
清理build
过程产生的文件。
不仅清理build
过程产生的文件,同时也删除了.config
。
这是默认的target
。
构建toolchain
。
启动配置界面:
make menuconfig
这里是选择目标运行在哪个CPU
架构之上。
这里可以全部默认。
Toolchain
就是编译后面要安装的软件包的一系列相关的工具。
Toolchain type
有2
个选择:
Buildroot Toolchain | 需要哪个工具,他会自动下载、编译、安装 |
External Toolchain | 我们自己下载、编译、安装需要的工具 |
Buildroot Toolchain
是最方便的,它也是默认被选择的。
这是选择用哪个libc进行编译。有3
个选择:
glibc | 庞大 |
uClibc-ng | 精简 |
musl | 精简 |
uClibc-ng
是默认被选中的,因为Buildroot
这个工具本来就是uClibc
团队开发的。
这是选择用哪个版本的Linux API,你可以选择一些版本,也可以手动输入。
一定要选中此选项,后面的很多包在编译的时候都需要此特性。
最好选中此选项,后面的某些包在编译的时候都需要此特性。
这里是生成/etc/hostname
文件的内容。默认是buildroot
,可以修改成你自己的。
这里是生成/etc/issue
文件的内容。默认是Welcome to Buildroot
,可以修改成你自己的。
这里默认选中的是BusyBox。如果仅仅是为了chroot,而不是为了可启动,那么就没必须要使用Init system。
这里是选择目标中需要包含哪些网络管理工具
。建议选中下面这些:
这里是选择目标中需要包含哪些系统管理工具
。建议选中下面这些:
这里是选择目标中需要包含哪些Shell和工具。建议选中下面这些:
这里是选择目标中需要包含哪些文本编辑器
和文本查看器
。建议选中下面这些:
选择生成的文件系统
格式,默认即可。
选择使用哪个Bootloader,默认没有任何一个被选中。
使用Tab
键切换到Save
按钮,回车,出现如下界面:
回车,保存。会产生一个.config
文件,包含了所有我们配置的信息,该文件在编译的时候使用。
make && make install
编译、安装完成之后,多出了dl
和output
2
个目录。
dl
目录存放的是下载的软件包:
output/images/rootfs.tar
就是我们的rootfs
。
rootfs.tar
cd output/images
mkdir rootfs
tar vxf rootfs.tar -C rootfs
rootfs
sudo chroot rootfs /bin/zsh
运行效果如下: