12.Buildroot根文件系统的构建¶
12.3. Buildroot构建¶
本教程使用的是buildroot版本为: buildroot-2021.02.3
可以访问资料网盘/8-SDK源码压缩包/buildroot-2021.02.3.tar.gz,进行下载。
如果需要使用新版本可以到官网地址下载:https://buildroot.org/ 打开后如图
选择DOWNLOAD
选择长期支持版本(LTS),两个压缩格式,选择其中一个即可
或者访问buildroot官方的gitlab仓库进行下载: buildroot仓库
注意
如果使用新版本一些配置项可能发生改变,如果没有特殊需求建议使用教程相同版本。
12.3.1. 解压源码包和交叉编译工具链¶
以buildroot-2021.02.3版本为例,构建根文件系统。
1
2#解压buildroot源码包
tar -vxf buildroot-2021.02.3.tar.gz
交叉编译工具链使用资料网盘/6-开发软件/交叉编译工具链/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
将gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz解压到buildroot源码根目录。
1
2
3
4
5
6
7
8
9#解压交叉编译工具链到buildroot源码根目录
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C buildroot-2021.02.3/
#查看buildroot源码根目录
ls buildroot-2021.02.3/
arch Config.in DEVELOPERS gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf output system
board Config.in.legacy linux package toolchain
boot configs docs Makefile README utils
CHANGES COPYING fs Makefile.legacy support
其中gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf目录就是我们要使用的交叉编译工具链目录。
12.3.2. 打开配置界面¶
1
2
3 #进入源码目录并打开配置界面
cd buildroot-2021.02.3
make menuconfig
配置界面如下:
12.3.3. 配置Target options¶
进入Target options配置项,修改为以下配置:
1
2
3
4
5
6
7Target options
-> Target Architecture = ARM (little endian)
-> Target Binary Format = ELF
-> Target Architecture Variant = cortex-A7
-> Target ABI = EABIhf
-> Floating point strategy = NEON/VFPv4
-> ARM instruction set = ARM
设置完如下图所示:
12.3.4. 配置Toolchain¶
进入Toolchain配置项,修改为以下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13Toolchain
-> Toolchain type = External toolchain
-> Toolchain = Custom toolchain //选择用户的交叉编译器
-> Toolchain origin = Pre-installed toolchain
-> Toolchain path = $(TOPDIR)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf //这里填入交叉编译器路径,$(TOPDIR)是buildroot源码根目录
-> Toolchain prefix = arm-linux-gnueabihf //交叉编译链前缀
-> External toolchain gcc version = 8.x //交叉编译链版本
-> External toolchain kernel headers series = 4.19.x //交叉编译链LINUX_VERSION_CODE版本
-> External toolchain C library = glibc/eglibc
-> [*] Toolchain has SSP support? (NEW) //选中
-> [*] Toolchain has RPC support? (NEW) //选中
-> [*] Toolchain has C++ support? //选中
-> [*] Enable MMU support (NEW) //选中
设置完如下图所示:
12.3.5. 配置System configuration¶
进入System configuration配置项,修改为以下配置:
1
2
3
4
5
6
7System configuration
-> (buildroot) System hostname = buildroot //主机名字
-> (Welcome to Buildroot) System banner = Welcome to Buildroot //欢迎语
-> Init system (BusyBox) = BusyBox //使用 busybox
-> /dev management = Dynamic using devtmpfs + mdev //使用mdev
-> [*] Enable root login with password //使能root密码登录
-> () Root password //可设置登录密码
设置完如下图所示:
以上Root password选项可设置root密码,如果需要使用密码进行登录,可自行设置,如果密码为空则root登录时不需要输入密码。
12.3.6. 配置Filesystem images¶
进入Filesystem images配置项,这个选项是配置将编译生成什么格式的根文件系统,可以做如下配置:
1
2
3
4
5-> Filesystem images
-> [*] ext2/3/4 root filesystem //EMMC或SD卡使用ext3/ext4格式
-> ext2/3/4 variant = ext4 //选择ext4格式
-> (300M)exact size //设置文件系统大小
-> [*] ubi image containing an ubifs root filesystem //NAND使用ubi格式
设置完如下图所示:
12.3.7. 关闭kernel和uboot的编译¶
Buildroot不仅能构建根文件系统,还可以编译kernel和uboot,但是这些源码是从官网下载的,很可能是没包含各芯片厂商的驱动文件,所以我们关闭kernel和uboot编译即可。
进入Kernel配置项,确认没有使能Linux Kernel配置项。
1
2-> Kernel
-> [ ] Linux Kernel
进入Bootloaders配置项,确认没有使能U-Boot配置项。
1
2-> Bootloaders
-> [ ] U-Boot
12.3.8. 保存配置文件¶
修改完成后选择右下角
因为默认保存的不是精简配置文件,而是包含全部配置项的文件,不利于后续观察和配置,因此需要生成精简的配置文件,并保存到configs/目录下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#根据.config生成defconfig精简配置
make savedefconfig
#保存到configs目录下
cp -f defconfig configs/imx6ullfire_defconfig
#查看生成的配置
cat configs/imx6ullfire_defconfig
#信息输出如下
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_PATH="$(TOPDIR)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-linux-gnueabihf"
BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="300M"
BR2_TARGET_ROOTFS_UBI=y
imx6ullfire_defconfig中的内容就是我们前面的修改,当加载配置文件时会加载默认配置文件,然后再根据我们的配置文件覆盖默认配置生成.config。
12.3.9. 下载dl源码包¶
因为Buildroot编译时会拉取软件包源码存放到dl/目录下,如果访问外网困难则拉取的时间将会十分漫长,因此可以使用野火编译时拉取好的。
访问资料网盘/8-SDK源码压缩包/dl.tar.gz,进行下载。
将dl.tar.gz压缩包传到buildroot源码根目录,然后解压:
1
2
3
4
5
6
7
8#进入源码根目录
cd buildroot-2021.02.3
#解压
tar xvf dl.tar.gz
#查看源码包
ls dl/
以上压缩包仅适用于buildroot-2021.02.3版本,如果是其他版本则需编译时自行拉取。
12.3.10. 编译Buildroot¶
1
2
3
4
5
6
7
8
9
10
11#加载配置文件
make imx6ullfire_defconfig
#编译,使用16线程,根据自己的电脑性能而定
make -j16
#如果遇到编译错误,使用单线程编译,并添加编译详细输出
make -j1 V=s
#解决报错后再使用多线程编译
编译完成后文件在 buildroot源码/output/images 文件夹中,其中 rootfs.tar 为本教程需要的文件。
1
2
3#查看编译输出
ls output/images/
rootfs.ext2 rootfs.ext4 rootfs.tar rootfs.ubi rootfs.ubifs