1,准备工作
下载必备软件包,此处我用的为如下包
前置软件包:sudo apt install -y sed make binutils build-essential gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc wget
buildroot版本:https://buildroot.org/downloads/buildroot-2022.05.1.tar.gz
交叉编译器版本:https://mirrors.aliyun.com/armbian-releases/_toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz?spm=a2c6h.25603864.0.0.6e933441kRP7sW
2,配置buildroot
2.1 配置芯片相关内容
Target options配置
- Target Architecture (AArch64):指定目标体系结构为AArch64(也称为ARM64),这是适用于64位ARM处理器的架构,此处配置为小端模式。
- Target Binary Format (ELF): 选择目标二进制文件的格式,ELF(Executable and Linkable
Format)是常见的目标文件格式。 - Target Architecture Variant (Cortex-A55):选择特定的处理器型号,这里是Cortex-A55,适用于rk3568,它是ARM的一个节能处理器内核,适用于移动设备和嵌入式系统。
- Floating point strategy (FP-ARMv8):指定浮点运算的策略,FP-ARMv8代表使用ARMv8架构的浮点单元。
Build options
默认配置即可
Toolchain
- Toolchain type (External toolchain): 选择工具链类型,外部工具链表示使用已经存在的工具链。
- Toolchain origin (Pre-installed toolchain): 选择预装的工具链路径。
- Toolchain prefix: 设置工具链的前缀,指定目标架构工具链的前缀名称。
- External toolchain gcc version: 选择外部工具链的 GCC 版本。
- External toolchain kernel headers series: 选择内核头文件的版本。
- External toolchain C library: 选择使用的 C 库版本,如 glibc。
System configuration
-
在 Buildroot 的 System configuration 中,/dev management 配置为 Dynamic
using devtmpfs + mdev 意味着设备文件管理将采用动态方法。- devtmpfs: 是一个内核提供的临时文件系统,它会自动在 /dev 目录中创建基本的设备文件。
- mdev: 是 busybox 提供的一个轻量级设备管理工具,负责在系统启动时及设备热插拔时动态管理 /dev 中的设备节点。
这种组合适用于轻量级嵌入式系统,减少了对更复杂的设备管理守护程序(如 udev)的依赖。
到此全部配置完成。
2.2 编译
进行编译
make -j8
编译到一定过程中会提示报错,是因为我们RK3568 使用的内核镜像版本为4.19.232版本(查看版本可在开发板输入,uname -r查看),在buildroot中要配置一致,即为4.19.232,转换为16进制为0413E8,对应的十进制为267240
对此我们需要修改编译器下的一个文件,路径为:/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/linux/version.h
#define LINUX_VERSION_CODE 267240
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
即可,然后继续编译,到此编译已经全部完成,在output目录下的images下会生成rootfs.tar压缩包
3,打包文件系统
- 进入到output/images 目录下找到rootfs.tar ,然后创建两个文件夹,分别为sys和rootfs
- 解压rootfs.tar出来到sys文件夹:tar -xvf rootfs.tar -C sys/
- 在制作一个为.img格式的文件输入:dd if=/dev/zero of=rootfs.img bs=1M count=你想要的大小,符和文件系统大小
- 在格式化:mkfs.ext4 rootfs.img
- 在挂载img,sudo mount rootfs.img rootfs
- 复制sys的文件到挂载的文件中:sudo cp -rfpd sys/* ./rootfs
- 取消挂载sudo umount rootfs
- 修复及检测镜像文件系统:sudo e2fsck -p -f rootfs.img
4,下载文件系统
- 删除原来LubanCat_SDK/rockdev下的rootfs.img ,将我们生成的rootfs.img拷贝到该目录
- 在使用./build/sh updateimg 重新打包烧录即可
烧录完成,顺利进入buildroot文件系统