itop-3568 开发板文件系统构建学习笔记(5)使用 Buildroot 构建根文件系统

《【北京迅为】itop-3568 开发板文件系统构建手册v1.0.pdf》学习笔记

Buildroot 简介

Buildroot 是一个可以使用交叉编译简单且自动化地为嵌入式系统构建完整 Linux 系统的工具。整个 Buildroot 是由 Makefile 脚本和 Kconfig 配置文件构成的。你可以通过 Buildroot 配置编译出一个完整的可以直接烧写到机器上可运行的 Linux 系统软件。Buildroot 可以为你的系统生成交叉编译工具链,根文件系统,Linux 内核镜像和引导加载程序。Buildroot 可以独立地用于这些选项的任意组合(比如,你可以使用现有的交叉编译工具链,并且仅仅只编译文件系统)

——原文

下载 Buildroot 源码

下载链接:https://buildroot.org/download.html

我选择下载最新的稳定版本,buildroot-2022.11.2

在这里插入图片描述

源码压缩包文件大小只有 6.7 M,

Buildroot 目录简介

将下载的 Buildroot 源码复制到虚拟机开发系统中,解压缩,下图是 Buildroot 源码目录(还未编译),

在这里插入图片描述

如果 Buildroot 被编译后,还会新产生两个文件夹,分别是 dl/ 和 output/

  • arch:存放 CPU 架构相关配置脚本
  • board:存放板级文件,如某些开发板的内核配置、rootfs 制作脚本等
  • boot:存放各种 bootloaders 相关的补丁 *.patch、校验文件 *.hash、构建脚本 *.mk、配置选项 Config.in
  • configs:存放各个单板的 Buildroot 配置文件
  • dl:存放从官网下载的开源软件包
  • docs:存放 Buildroot 详细说明
  • fs:存放各种文件系统源码,fs/skeleton 里存放生成的文件系统的镜像
  • linux:存放 Linux 的构建脚本 *.mk 和配置选项 Config.in
  • package:存放软件包配置文件
  • output:编译输出文件夹,output/build 存放解压后的各种软件包编译完成后的现场
  • support:存放为 Buildroot 提供功能支持的脚本、配置文件
  • system:存放 rootfs 的启动初始化配置等文件
  • toolchain:存放各种交叉工具链构建脚本 *.mk 和配置选项 Config.in
  • utils:存放 Buildroot 脚本和工具

安装编译环境

编译 Buildroot 需要如下软件包,

在这里插入图片描述

在虚拟机 Ubuntu 下使用 sudo apt-get install -y sed make binutils build-essential gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file be wget 进行安装,

在这里插入图片描述

配置 Buildroot

并没有一次成功(包括个人踩坑记录),仅供参考

1. 进入配置菜单

进入 Buildroot 源码根目录,输入 make menuconfig 打开配置菜单,

在这里插入图片描述

在这里插入图片描述

2. 配置 Target options

Target opetions 里主要涉及平台架构相关配置,RK3568 内核型号是 cortex-A55,ARM 64 位(arm CPU 一般为小端系统)

在这里插入图片描述
MMU Page Size 不知道是否要改,先保持默认,

在这里插入图片描述

3. 配置 Toolchain

配置工具链之前,先确认当前使用的交叉编译器路径(第一次配置时我使用了该路径,但失败了,详情见后文),

在这里插入图片描述

Toolchain 配置下主要涉及交叉编译器的选择,下图中我选择了外部交叉编译器(与之对应的是 Buildroot toolchain),使用外部工具链时,还需要选择自定义工具链或网上下载工具链(下图我选择了本地工具链,但失败了,最后使用的是网上下载指定工具链,详情见后文),使用自定义外部工具链时,需要指定 C 库,这里指定为 glibc,另外,Toolchain prefix 指定的路径不需要想环境变量那样包括 bin/ 目录,

在这里插入图片描述

4. 配置 Build options

Build options 选项主要涉及编译的配置,比如 dl 路径,我直接使用默认配置,不对该菜单界面的配置进行修改,

在这里插入图片描述

5. 配置 System configuration

System configuration 配置选项主要涉及根文件系统里的系统配置,如系统主机名、系统登录提示语、系统密码等,

在这里插入图片描述

6. 配置 Target package

该配置选项主要为根文件系统的软件包,可以在菜单下开启或关闭软件包,下图是默认配置,

在这里插入图片描述

7. 其他配置

其他的配置选项(Kernle、Bootloaders、Filesystem images 等)我没有做修改,都使用默认配置,

由于现在我只想通过 Buildroot 来创建根文件系统,所以暂时不在 Buildroot 里添加内核和 Uboot ,

在这里插入图片描述

8. 保存退出

在这里插入图片描述

编译 Buildroot

由于编译 Buildroot 时,需要到官网下载软件包,所以有必要先确保网络畅通,

在这里插入图片描述

在这里插入图片描述


编译并没有一次性通过,下面是遇到的一些坑:

  1. 自定义交叉工具链时,交叉编译器里的内核头文件与刚才 make menuconfig 里配置的不匹配

在这里插入图片描述
解决办法:

修改交叉工具链的 version.h 文件(libc/usr/include/linux/),由于当前所用的内核版本为 4.19.232,转换为 16 进制后,内核版本为 4.13.E8,将小数点去掉后变为 413E8,最后将其转为十进制,即为我们要填的值,

在这里插入图片描述

  1. 出现 *-pcpu 的值 ‘cortex-a55` 未知的报错

前面指定的交叉编译器不能用来编 Buildroot,应该是少了一些库文件,

在这里插入图片描述

所以只能换交叉编译器,在下图的第三个选项里选择一个交叉编译器,

在这里插入图片描述
在这里插入图片描述


编译通过后,在 buildroot/output/images 目录里会新增一个 rootfs.tar 文件,即我们的根文件系统,

在这里插入图片描述

制作文件系统镜像

将 rootfs.tar 解压到一个空文件夹下,然后使用 dd 生成一个 rootfs.img 文件,

在这里插入图片描述

将 rootfs.img 挂载到一个空目录下,然后将刚才解压的文件全部复制到挂载目录,复制完成后取消 rootfs.img 的挂载,

在这里插入图片描述
至此,根文件系统镜像 rootfs.img 制作完成,

在这里插入图片描述

下面是确认镜像的完整性和调整根文件系统镜像的大小(e2fsck 和 resize2fs)

在这里插入图片描述

最后,将上面制作的(rootfs)镜像文件烧录到开发板,下图为运行效果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43772810/article/details/129313874