【北京迅为】嵌入式Linux基础教程(高清重制版)-第5章Buildroot系统构建
不论是做嵌入式Linux开发,还是学习Linux技术,Linux的基本知识都是要学习的,为此,北京迅为基于嵌入式Linux入门教程上新了《【北京迅为】嵌入式Linux基础教程(高清重制版)》。教程旨在系统性地讲解嵌入式Linux文件系统的构建、定制与移植全流程,为开发者提供从基础入门到高阶定制的完整学习路径
【公众号】迅为电子
【配套视频】 【【北京迅为】嵌入式Linux基础教程(高清重制版)】
第5章Buildroot系统构建
在上一个章节我们学习了使用busybox来构建文件系统,但是busybox构建的文件系统很多东西需要自己交叉编译添加,某些软件需要自己去移植,所以移植过程是非常繁琐的。本章节我们来学习另外一种非常实用的根文件系统构建方法——使用buildroot来构建根文件系统。buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软件,需要什么软件,选择哪个软件就好,buildroot上手门槛低,极大的方便了嵌入式Linux开发人员构建根文件系统。
5.1 buildroot基本介绍
Buildroot是一个可以使用交叉编译简单且自动化地为嵌入式系统构建完整Linux系统的工具。Buildroot可以为你的系统生成交叉编译工具链,根文件系统,Linux内核镜像和引导加载程序。Buildroot可以独立地用于这些选项的任意组合(比如,你可以使用现有的交叉编译工具链,并且仅仅只编译文件系统)。
Buildroot主要用于使用嵌入式系统的开发者,嵌入式系统通常使用的处理器并不是PC电脑上的X86处理器,他们可以是PowerPc处理器,MIPS处理器或者ARM处理器等等。Buildroot支持很多处理器,它还具有一些可用目标板的默认配置。除此之外,许多第三方项目的SDK都是基于buildroot开发。
构建开源软件包工作流程大致如下所示:
1 获取:获取软件包的源码
2 解压:解压软件包源码
3 补丁:针对缺陷修复和增加的功能应用补丁
4 配置:根据环境准备构建过程
5 安装:复制二进制和辅助文件到目标目录
6 打包:为在其他系统上安装而打包二进制和辅助文件
如上所示,我们可以看到构建每个软件包的工作流程几乎是相同的,buildroot主要的功能就是把这些重复操作自动化,用户只需要勾选上所需软件包,便自动完成以上所有操作。Buildroot生成uboot Linux Kernel的编译工作流程是差不多的,只要配置好自定义的参数,在buildroot配置好编译生成即可。
5.2 获取buildroot官方源码
Buildroot每隔三个月发布一次版本,2月 5月 8月 11月各发布一次。版本号格式是YYYY.MM,比如2019.02、2019.08等等。
使用浏览器打开以下网址下载buildroot最新的源码。
https://buildroot.org/download.html

本教程中使用的buildroot版本是Buildroot-2022.05.tar.bz2,建议大家和本教程保持一致。在网盘资料“iTOP-3568开发板\03_【iTOP-RK3568开发板】指南教程\03_文件系统构建配套资料\02_Buildroot文件系统构建配套资料”目录下下载。
点击buildroot-2022.05.tar.bz2 进行下载。下载之后使用SSH拷贝到ubuntu虚拟机中。

输入以下命令解压压缩包:

我们进入buildroot-2022.05目录,如下图所示:

5.3 buildroot目录简介
Buildroot基本上是一组Makefile文件,可以使用正确的选项对所需的软件进行下载,配置和编译。它还包含各种软件包的补丁,主要是那些涉及交叉编译工具链(gcc,bin utils和uClibc)的软件包。每个软件包基本只有一个Makefile文件,它们以.mk扩展名命名。
Buildroot编译之前的目录如下所示:

Buildroot编译之后会多出来俩个文件夹,一个是dl文件夹,一个是output目录文件夹,最终生成的板子镜像在output/images目录下。
buildroot/arch:目录存放CPU架构相关的配置脚本,如arm/mips/x86 ,这些CPU相关的配置,在制作工具链,编译boot和内核时很关键。
buildroot/board:存放某个具体单板紧密相关的文件,比如内核配置文件、sd卡制作脚本、rootfs覆盖文件等。
buildroot/boot:存放各种Bootloaders相关的的补丁*.patch、校验文件*.hash、构建脚本*.mk、配置选项Config.in
buildroot/configs: 存放各个单板的buildroot配置文件
buildroot/dl:目录存放从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间。本身下载通常都是很慢的,你可以手动找到相关包下载后放到这里就OK了,make时会自动检测这个目录.
buildroot/docs: 存放pdf,html格式的buildroot详细说明。
buildroot/fs:放各种文件系统的源代码
buildroot/fs/skeleton:放生成文件系统镜像的地方,及板子里面的系统
buildroot/linux:存放Linux的构建脚本*.mk和配置选项Config.in
buildroot/package/: 此目录下放着应用软件的配置文件,每个应用软件的配置文件有Config.in和软件包名字.mk。软件包名字.mk文件可以下载应用软件包,是Makefile脚本的自动构建脚本。
buildroot/output/: 是编译的输出文件夹,里面的build/目录存放着解压后的各种软件包编译完后的现场。
build:所有源码包解压出来的文件存放地和编译的发生地
staging:包含了根文件系统的层次结构,编译生成的所有头文件和库,以及其他开发文件,体积较大;
target:目录是用来制作rootfs的,里面放着Linux系统基本的目录结构,以及各种编译好的应用库和bin可执行文件。
Images:目录下就是最终生成的可烧写到板子上的各种image。
host:是由各类源码编译后在你主机上运行的工具的安装目录,如arm-linux-gcc就是安装在这里;编译出来的主机工具在host/usr下;根目录所需要的库及一些基本目录就在host/<tuple>/sysroot/或host/usr/<tuple>/sysroot/里
buildroot/support:存放一些为bulidroot提供功能支持的脚本、配置文件
buildroot/system:这里就是根目录的主要骨架了和相关的启动初始化配置,当制作根目录时就是将此处的文件cp到output里去.然后再安装toolchain的动态库和你勾选的package的可执行文件之类的.
buildroot/toolchain:存放制作各种交叉编译工具链的构建脚本*.mk和配置选项Config.in
buildroot/utils:存放一些buildroot的实用脚本和工具。
buildroot/CHANGES:buildroot的修改日志。
buildroot/.config:make menuconfig后生成的最终配置文件。
buildroot/Config.in :所有Config.in的入口,也是Build options的提供者
buildroot/Config.in.legacy :Legacy config options的提供者
buildroot/DEVELOPERS :开发人员列表,N后面是开发人员名字,F后面是开发的软件
buildroot/Makefile :顶层Makefile
buildroot/Makefile.legacy :旧的Makefile,为了支持向后兼容
buildroot/README :buildroot简单说明。
5.4 buildroot帮助命令
在buildroot根目录执行make help,即可获得buildroot常用命令的提示信息,内容如下:
root@ubuntu:/home/topeet/Linux/buildroot-2022.05# make help
Cleaning: #清理
clean - 删除编译产生的文件
distclean - 删除所有非源码文件(包括.config)
Build: #编译
all - 编译所有
toolchain - 编译工具链
sdk - 编译sdk
Configuration: #配置
menuconfig - 基于curses的buildroot配置界面(常用)
nconfig - 基于ncursesbuildroot配置界面
xconfig - 基于Qt的buildroot配置界面
gconfig - 基于GTK的buildroot配置界面
oldconfig - 解决所有.config中未解决的符号问题(symbols)
syncconfig - 和oldconfig类似,但会额外更新依赖
olddefconfig - 和syncconfig类似,但会将新的symbols设为默认值
randconfig - 所有选项随机配置
defconfig - 所有选项都询问,如果设置有BR2_DEFCONFIG,则使用它的配置
savedefconfig - 把当前配置保存到BR2_DEFCONFIG
update-defconfig - 类似savedefconfig
allyesconfig - 所有配置选项都选择yes
allnoconfig - 所有配置选项都选择no
alldefconfig - 所有配置选项都选择default
randpackageconfig - 软件包选项都选择随机
allyespackageconfig - 软件包选项都选择yes
allnopackageconfig - 软件包选项都选择no
Package-specific: #具体的包操作
<pkg> -编译、安装该pkg以及其依赖
<pkg>-source -下载该pkg所有文件
<pkg>-extract -解压该pkg(解压后放在output/build/pkg名字目录下)
<pkg>-patch - 给该pkg打补丁
<pkg>-depends - 编译pkg的依赖
<pkg>-configure - 编译pkg到配置这一步
<pkg>-build - 编译pkg到构造这一步
<pkg>-show-info - 显示该pkg信息
<pkg>-show-depends - 显示该pkg的所有依赖
<pkg>-show-rdepends - 显示依赖该pkg的所有包
<pkg>-show-recursive-depends - 递归显示该pkg的所有依赖
<pkg>-show-recursive-rdepends - 递归显示依赖该pkg的所有包
<pkg>-graph-depends - 图形化显示该pkg的所有依赖
<pkg>-graph-rdepends - 图形化显示依赖该pkg的所有包
<pkg>-dirclean - 清除该pkg目录(清除解压目录output/build/pkg名字)
<pkg>-reconfigure - 从配置这一步开始重新编译pkg
<pkg>-rebuild - 从构造这一步开始重新编译pkg
<pkg>-reinstall - 从安装这一步开始重新编译pkg
Documentation: -文档
manual -生成各种格式的帮助手册
manual-html - 生成HTML格式的帮助手册
manual-split-html - 生成split HTML格式的帮助手册
manual-pdf - 生成PDF格式的帮助手册
manual-text - 生成text格式的帮助手册
manual-epub - 生成ePub格式的帮助手册
graph-build -生成图形化查看编译时间文件
graph-depends - 生成图形化查看所有依赖文件
graph-size -生成图形化查看文件系统大小文件
list-defconfigs - 显示拥有的默认配置的单板列表
Miscellaneous: - 杂项
source - 下载所有要离线编译的源码到dl路径
external-deps - 列出使用的所有外部包(make show-targets的详细版)
legal-info - 显示所有包的license合规性
show-info - generate info about packages, as a JSON blurb
pkg-stats - generate info about packages as JSON and HTML
missing-cpe - generate XML snippets for missing CPE identifiers
printvars - 打印所有内部指定的变量值
show-vars - dump all internal variables as a JSON blurb; use VARS=...
to limit the list to variables names matching that pattern
make V=0|1 - 设置编译打印信息(0:安装编译 1:打印编译信息)
make O=dir - 指定所有文件(包括.config)输出目录
For further details, see README, generate the Buildroot manual, or consult
it on-line at http://buildroot.org/docs.html
root@ubuntu:/home/topeet/Linux/buildroot-2022.05# ^C
root@ubuntu:/home/topeet/Linux/buildroot-2022.05#
5.5 安装编译环境
通过查看官方手册可知构建系统需要的工具有如下图所示, 这些工具需要我们在 ubuntu 虚拟机上安装。官方手册地址可以点击以下网址:
https://buildroot.org/downloads/manual/manual.html#requirement

我们需要安装这些编译必须工具,不然编译过程会出错。
我们可以使用以下命令来安装这些工具, 安装过程如下图所示:
sudo apt install -y sed make binutils build-essential gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc wget
5.6 Buildroot配置
Buildroot可以和配置内核一样,使用menuconfig进行图形化配置。输入“make menuconfig”命令可以打开图形化配置界面,如下所示:

由上图可知,在每条选项的前面可以看到[]、<>、()三种表示方式
[]有俩种状态,[*]代表选中,[]代表没有选中。选中的意思是选择对应的功能选项编译进内核镜像文件中;<>有三种状态,<*>代表选中,<>代表没有选中,<M>代表选为模块
()存放十进制或十六进制或字符串
make *config 中的所有配置选项都有一个帮助文本,它能够提供有关该选项的详细信息。按↑或者↓将光标移动到某个配置选项,然后按←或→将光标移动到<Help>,然后点击回车,可以看到帮助信息。如下所示:


make *config 命令还提供了搜索工具。在不同的前台菜单中来查看帮助消息,以了解如何使用它。在 menuconfig 中, 按“/”调用搜索工具。搜索结果将显示匹配目标的帮助信息。在 menuconfig 中,左栏中的数字提供了相应条目的快捷方式。只需输入该数字即可直接跳转至该条目,或者在因缺少依赖而无法选择该条目的情况下跳转至包含该条目的菜单。比如按下“/”打开搜索框,并输入“pppd”,如下图所示:

然后点击回车,搜索的信息如下所示:

5.7 Buildroot构建
5.7.1 配置Target option
接下来我们来一步步配置buildroot,使用“make menuconfig”命令打开配置界面。首先我们来配置Target option选项,如下所示:

Target options参数与芯片架构相关。如下图所示,Rk3568 Rk3399 imx6ull芯片信息如下所示:
|
参数/芯片 |
Rk3568 |
Rk3399 |
imx6ull |
|
架构 |
aarch64 |
aarch64 |
arm |
|
变体架构 |
四核A55 |
四核A53+两核A72大小核 |
单核A7 |
|
大小端 |
小端模式 |
小端模式 |
小端模式 |
在menuconfig中需要配置的项目和对应的内容如下所示,如果配置的是RK3568开发板,配置项目如下所示,此项配置需要根据芯片架构进行修改。
Target Architecture (AArch64(little endian)) ---> #设置架构和大小端
Target Binary Format(ELF)--> #设置二进制格式
Target Architecture Variant(cortex-A55)--> #设置芯片架构
Floating point strategy(FP-ARMv8)--> #设置浮点数的策略

5.7.2 Build options 选项
Build options选项主要是一些编译时用到的选项,比如dl的路径,下载代码包使用的路径,同时运行多个编译的上限,是否使能编译器缓冲区等等,这里按照默认就行了,此配置极少需要改动。Build options选项具体含义如下所示:
Commands --->
│ │ ($(CONFIG_DIR)/defconfig) Location to save buildroot config #保存buildroot config
│ │ ($(TOPDIR)/dl) Download dir #下载目录-buildroot/dl(通常使用默认配置)
│ │ ($(BASE_DIR)/host) Host dir #主机目录-buildroot/output/host(通常使用默认配置)
│ │ Mirrors and Download locations ---> #镜像和下载位置
│ │ (0) Number of jobs to run simultaneously (0 for auto) #同时要运行的作业数,0代表自动
│ │ [ ] Enable compiler cache #启用编译器缓存-可以加快编译速度
│ │ [ ] build packages with debugging symbols #使用调试符号生成包
│ │ [ ] build packages with runtime debugging info
│ │ [*] strip target binaries #剥离目标二进制文件,会使文件变小
│ │ () executables that should not be stripped #应该剥离的可执行文件
│ │ () directories that should be skipped when stripping #剥离时应跳过的目录
│ │ gcc optimization level (optimize for size) ---> #gcc优化级别
│ │ libraries (shared only) --->
│ │ ($(CONFIG_DIR)/local.mk) location of a package override file #包覆盖文件的位置
│ │ () global patch directories #全局修补程序目录
│ │ Advanced --->
│ │ *** Security Hardening Options *** #安全强化选项
│ │ -*- Build code with PIC/PIE #使用PIC/PIE构建代码
│ │ *** Stack Smashing Protection needs a toolchain w/ SSP *** #堆叠粉碎保护需要一个带有SSP的工具链
│ │ RELRO Protection (Full) --->
│ │ *** Fortify Source needs a glibc toolchain and optimization *
5.7.3配置 Toolchain
Toolchain主要介绍如何使用buildroot配置内部交叉编译工具链以及外部交叉编译工具链还有如何添加自己的交叉编译工具链
配置工具链
Toolchain type (Buildroot toolchain) --->
( ) Buildroot toolchain //内部交叉编译工具链
( ) External toolchain //外部交叉编译工具链
如上所示,Toolchain type有俩个选项,选择 Buildroot toolchain则是使用buildroot默认的自动化脚本从零开始制作交叉编译工具链,如果是选择External toolchain则是使用外部制作好的工具链。
接下来我们以设置外部交叉编译器进行演示,交叉编译器在网盘资料“iTOP-3568开发板\03_【iTOP-RK3568开发板】指南教程\03_文件系统构建配套资料\02_Buildroot文件系统构建配套资料”目录下下载。将配套资料里面的交叉编译器压缩包拷贝到Ubuntu的usr/local目录下,解压缩后如下图所示:

iTOP-RK3568 使用的内核镜像是4.19.232版本,在buildroot中要配置一致,即为4.19.232,转换为16进制为413E8,对应的十进制为267240。我们进入到/usr/local/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu目录下,修改aarch64-linux-gnu/libc/usr/include/linux/version.h 文件,修改为如下图所示,然后保存修改。
需要配置的项目和对应的内容如下所示:
Toolchain type (External toolchain) ---> #设置交叉编译器的类型为外部交叉编译器
*** Toolchain External Options ***
Toolchain (Custom toolchain) ---> #设置为Custom toolchain,使用用户自己的交叉编译器
Toolchain origin (Pre-installed toolchain) ---> # 设置为Pre-installed toolchain,使用预装的交叉编译器
(/usr/local/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu) Toolchain path (NEW)#设置外部交叉编译的路径,注意这里要写绝对路径,根据实际编译器的路径进行修改
(aarch64-none-linux-gnu) Toolchain prefix (NEW) #设置toolchain的前缀,在编译器/usr/local/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin目录下查看
External toolchain gcc version (9.x) ---> # 设置外部编译器GCC版本选择为 gcc9.x
External toolchain kernel headers series (4.19.x) ---> # 内核头文件 Linux 4.19.x kernel headers
External toolchain C library (glibc/eglibc) ---> # C库选择 选择glibc
[ ] Toolchain has WCHAR support? (NEW)
[ ] Toolchain has locale support? (NEW)
[*] Toolchain has threads support? (NEW)
[*] Toolchain has threads debugging support? (NEW)
[*] Toolchain has NPTL threads support? (NEW)
[ *] Toolchain has SSP support? (NEW)
[ *] Toolchain has RPC support? (NEW)
[ *] Toolchain has C++ support? (NEW)
[ ] Toolchain has D support? (NEW)
[ ] Toolchain has Fortran support? (NEW)
[ ] Toolchain has OpenMP support? (NEW)
[ ] Copy gdb server to the Target (NEW)
*** Host GDB Options ***
[ ] Build cross gdb for the host
*** Toolchain Generic Options ***
() Extra toolchain libraries to be copied to target
() Target Optimizations 不选
() Target linker options 不选
[ ] Register toolchain within Eclipse Buildroot plug-in #eclipse插件支持,不选
5.7.4 配置System configuration
System configuration页面主要是配置系统主机名,登录欢迎信息root密码,以及构建系统镜像版本,根文件系统覆盖。需要配置的项目和对应的内容如下所示:
Root FS skeleton (default target skeleton) --->
(iTOP-RK3568) System hostname # 系统主机名,写iTOP-RK3568
(Welcome to Buildroot) System banner #系统欢迎语
Passwords encoding (sha-256) ---> # 密码编码方式sha-256
Init system (BusyBox) ---> #系统初始化,选择BusyBox
#设备文件管理,选择Dynamic using devtmpfs + mdev,即使用mdev动态加载设备节点的方式
/dev management (Dynamic using devtmpfs + mdev) --->
#设备节点的配置表设置,一定要选择system/device_table.txt,否则后面在dev目录下就不会生成各种设备节点。当然我们也可以手动配置该文件,添加必要的节点或删除不需要的节点。
(system/device_table.txt) Path to the permission tables
[ ] support extended attributes in device tables
[ ] Use symlinks to /usr for /bin, /sbin and /lib
[*] Enable root login with password
() Root password # 进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root,密码为空。
/bin/sh (busybox' default shell) --->
[*] Run a getty (login prompt) after boot ---> #保持默认,默认为选中
[*] remount root filesystem read-write during boot
() Network interface to configure through DHCP
(/bin:/sbin:/usr/bin:/usr/sbin) Set the system's default PATH
[*] Purge unwanted locales
(C en_US) Locales to keep
() Generate locale data (NEW)
[ ] Enable Native Language Support (NLS) (NEW)
[ ] Install timezone info
() Path to the users tables
() Root filesystem overlay directories
() Custom scripts to run before commencing the build
() Custom scripts to run before creating filesystem images
() Custom scripts to run inside the fakeroot environment
() Custom scripts to run after creating filesystem images
5.7.5 Kernel选项
Kernel选项主要介绍了在线下载内核源码并自动编译到根文件系统的方法,
[*] Linux Kernel
Kernel version (Latest version (5.17)) ---> #内核版本,选择用户自定义
() Custom kernel patches (NEW) # 自定义的内核补丁
Kernel configuration (Using an in-tree defconfig file) #内核配置
() Defconfig name (NEW) #defconfig文件名字
() Additional configuration fragment files (NEW)
() Custom boot logo file path (NEW)
Kernel binary format (Image) ---> # 内核二进制文件格式
Kernel compression format (gzip compression) ---> # 内核压缩格式
[ ] Build a Device Tree Blob (DTB) (NEW)
[ ] Install kernel image to /boot in target (NEW)
[ ] Needs host OpenSSL (NEW)
[ ] Needs host libelf (NEW)
[ ] Needs host pahole (NEW)
Linux Kernel Extensions ---> #内核扩展,默认不选择
Linux Kernel Tools ---> #内核工具,默认不选择
5.7.6 buildroot编译
在上面的小节中,我们配置了build root的基础功能,然后我们输入make命令进行编译,注意编译过程中需要保证虚拟机ubuntu是联网状态。如下图所示:

编译完之后,如下所示:

我们使用命令“ls output/images/”即可看到编译出来的文件系统。此时编译出来的文件系统是最精简的文件系统。接下来将教大家如何添加软件包。
5.8配置Target packages 选项
Target packages选项主要介绍在目标开发板上使用根文件系统所需要的软件包的添加方法,以及配置方法,大家可以根据需求来自行添加。如下图所示


详细的选项介绍如下所示:
Audio and video applications ---> # 主要介绍buildtroot支持的音频和视频应用功能介绍以及如何配置使用
Compressors and decompressors ---> # 主要介绍buildtroot支持的压缩和解压应用简介以及如何配置使用
Debugging, profiling and benchmark ---> # 主要介绍buildroot 调试、分析和基准测试应用的简介以及如何配置使用。
Development tools ---> # 主要介绍buildroot支持在目标系统上的开发工具应用的简介以及如何配置使用。
Filesystem and flash utilities ---> #主要介绍buildroot支持在目标系统上的文件系统和闪存实用程序的简介以及如何配置使用。
Fonts, cursors, icons, sounds and themes ---> #主要介绍buildroot支持在目标系统上的字体,游标,图标,声音和主题的简介以及如何配置使用。
Games ---> # 主要介绍buildroot支持在目标系统上的游戏以及如何配置使用。
Graphic libraries and applications (graphic/text) ---> #主要介绍buildroot支持在目标系统上的图形库和应用程序(图形/文本)的简介以及如何配置使用。
Hardware handling ---> # 主要介绍buildroot支持在目标系统上的硬件处理应用/工具的简介以及如何配置使用。
Interpreter languages and scripting ---># 主要介绍buildroot支持在目标系统上的编程语言和脚本的简介以及如何配置使用。
Libraries ---> #主要介绍buildroot支持在目标系统上的库的简介以及如何配置使用。
Mail ---> #主要介绍buildroot支持在目标系统上的邮箱应用的简介以及如何配置使用。
Miscellaneous --->#主要介绍buildroot支持在目标系统上的一些杂项应用的简介以及如何配置使用。
Networking applications ---> #主要介绍buildroot支持在目标系统上的网络应用程序的简介以及如何配置使用。
Package managers ---> #主要介绍buildroot支持在目标系统上的包管理应用的简介以及如何配置使用。
Real-Time ---> #主要介绍buildroot支持在目标系统上的实时时钟的简介以及如何配置使用。
Security ---> #
Shell and utilities ---> #主要介绍buildroot支持在目标系统上的 Shell和程序的简介以及如何配置使用。
System tools ---> # 主要介绍buildroot支持在目标系统上的系统工具的简介以及如何配置使用。
Text editors and viewers --->#主要介绍buildroot支持在目标系统上的 文版编辑和浏览工具 的简介以及如何配置使用。
以上了解了target packages的基本功能,接下来我们就为文件系统添加一些基本的软件包,进一步增强文件系统的功能。
5.8.1 支持 linux 磁盘工具
如果读者,想要的文件系统支持FAT32 格式的分区,则需要参考下述操作进行配置 dosfstools 工具包。
依次选择如下配置项:
-> Target packages
-> Filesystem and flash utilities
->dosfstools
配置后如下图所示:

如果读者,想要的文件系统支持ext2 ext3 ext4 文件系统分区,请参考下图配置增加 e2fsprogs 工具包。
依次选择如下配置项:
-> Target packages
-> Filesystem and flash utilities
-> e2fsprogs
配置后如下图所示:

如果读者,想要格式化 spi nandflash norflash 等块设备,就参考下述配置增加 mtd tools。
依次选择如下配置项:
-> Target packages
-> Filesystem and flash utilities
配置后如下图所示:

5.8.2 支持 nfs挂载工具
如果读者想要使用nfs挂载工具,依次选择如下配置项:
-> Target packages
-> Filesystem and flash utilities
配置后如下图所示:

5.8.3 支持 v4l2 框架工具
如果读者想要使用摄像头等设备,需要查看摄像头数据或者设置摄像头的配置,则需要安装 v4l-utils 工具,请参考如下述配置路径来进行增加相应的包。
-> Target packages
-> Audio and video applications
配置后如下图所示:

依次选择如下配置项:
-> Target packages
-> Libraries
-> Hardware handling
配置后如下图所示:

5.8.4 支持 can 工具
如果读者,想要测试 can 设备,参考下述配置进行安装 can-utils 来进行 can 数据的发送和读写,测试can之前还需要安装 iproute2 命令来初始化配置 can 设备。
依次选择如下配置项:
-> Target packages
-> Networking applications
进入后如下图所示:

5.8.5 支持 ssh 访问工具
如果读者,想通过 ssh 工具来远程登录开发板,或者使用开发板远程登录其他ssh,则需要安装 openssh 工具包,配置过程如下:
依次选择如下配置项:
-> Target packages
-> Networking applications
进入后如下图所示:

5.8.6 支持 4G 拨号上网工具
我们的RK 3568开发板可以直接安装配套的 pcie 接口 4G 上网模块,可以通过 ppp 协议进行拨号上网,如果需要使用 ppp 协议则需要安装 pppd 工具包,配置方式参考下图。
-> Target packages
-> Networking applications

5.8.7 支持 hci 蓝牙工具
由于我们的开发板上蓝牙模块,如果使用蓝牙模块功能则要安装对应的工具包才可以,参考下述配置进行配置安装 bluez-utils 5.x 以及 bluez-tools 。
-> Target packages
-> Networking applications

5.8.8 支持 alsa 声卡工具
ALSA 是 Advanced Linux Sound Architecture,高级 Linux 声音架构的简称,它在 Linux 操作系统上提供了音频和 MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA 已经成为默认的声音子系统,用来替换2.4系列内核中的 OSS(Open Sound System,开放声音系统)。
ALSA 的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计, 支持对称多处理(SMP)和线程安全,对 OSS 的向后兼容,以及提供了用户空间的 alsa-lib 库来简化应用程序的开发。需要使用 aplay等命令,请参考如下配置进行配置。
依次选择如下配置项:
Target packages
---> Audio and video applications
---> [*] alsa-utils --->
进入后如下图所示:

依次选择如下配置项:
Target packages
-> Libraries
-> Audio/Sound
-> -*- alsa-lib ---> 此配置项下的文件全部选中
进入后如下图所示:

5.8.9支持 wpa WIFI 工具
如果需要使用开发板上的wifi模块进行上网等相关测试,则需要安装iw 包来获取无线路由设备信息,并通过 wpa_supplicant 进行网络链接。
-> Target packages
-> Networking applications

-> Target packages
-> Networking applications

5.8.10 支持Qt配置
5.8.10.1支持 multimedia
凭借GStreamer,程序员可以很容易地创建各种多媒体功能组件,包括简单的音频回放,音频和视频播放,录音,流媒体和音频编辑。基于流水线设计,可以创建诸如视频编辑器、流媒体广播和媒体播放器等等的很多多媒体应用,我们需要参考如下配置目录进行配置
依次选择如下配置项:
-> Target packages
-> Audio and video applications
进入后如下图所示:

5.8.10.2支持 tslib触摸
Tslib是嵌入式经常使用的第三方库,可以优化触摸识别,如果读者需要,可以按下图配置:
依次选择如下配置项:
-> Target packages
-> Libraries
-> Hardware handling
进入后如下图所示:

5.8.10.3 支持qt5
我们可以直接使用buildroot来制作一个具有qt环境的文件系统,配置如下图:
依次选择如下配置项:
-> Target packages
-> Graphic libraries and applications (graphic/text)
-> Qt5

下面的勾选只是举一个例子请根据个人需求进行配置:

支持虚拟键盘:

支持SQLite:
-> Target packages
-> Graphic libraries and applications (graphic/text)
-> Qt5
->SQLoite 3 support (QT SQLite) ---->
如下图所示:

5.8.11其他配置
5.8.11.1 支持 python3
Python 是一种面向对象的解释型语言,读者可以根据自己的需求选择编译安装python的模块,配置过程如下:
依次选择如下配置项:
-> Target packages
-> Interpreter languages and scripting
进入后如下图:

5.8.11.2 支持MQTT库
Mosqitto 是一款实现了消息推送协议 MQTT v1.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。读者可以根据需求是否需要来选择安装,其配置过程如下:
依次选择如下配置项:
-> Target packages
-> Networking applications
进入后如下图所示:

5.8.11.3 支持opencv
读者想要支持opencv就依次选择如下配置项:
-> Target packages
Libraries --->
Graphics --->
[*] opencv4 --->
进入后如下图所示:

5.8.12 Buildroot下配置Busybox
busybox也是基于buildroot制作的文件系统,所以我们buildroot里的busybox也可以进行配置。首先我们在buildroot源码目录下,使用命令“make busybox-menuconfig”,如下图所示:

在这里我们可以看到busybox版本是1.35.0,然后就是我们之前看到过的busybox配置界面了,用户可根据自己需要配置,这里的配置方法同使用busybox构建文件系统方法一致,可以参考第二章节。如下图所示:

然后我们使用命令“make busybox”即可单独编译busybox。如下图所示:

最后编译完成以后使用命令“make”重新编译 buildroot,主要是对其进行打包,如下图所示:

重新编译完成以后查看output/images 目录下 rootfs.tar 的创建时间是否为刚刚编译的,如果不是的话就删除掉 rootfs.tar,然后重新执行“make”重新编译一下即可。
5.8.13 Buildroot编译
在上面的章节中,我们已经选择配置了buildroot的功能,接下来我们来编译buildroot。
接着我们使用命令“make”编译buildroot,期间他会自行下载一些软件源码,请保证网络可用。如下图所示:

最后编译完成,如图所示:

我们使用命令“ls output/images/”即可看到编译出来的文件系统。

如果想要下载默认支持的源码包,输入以下命令:
make source
5.9 制作文件系统镜像
在上面的章节中我们已经编译出了rootfs.tar文件系统,接下来我们就需要将文件系统源码打包成可以烧写到开发板的镜像。这里以RK3568开发板为例,我们将rootfs.tar拷贝到123文件夹中,然后输入以下命令“tar -vxf rootfs.tar ”解压缩,如下图所示:

解压完毕,如下所示:

删除rootfs.tar,如下所示,这样123文件夹里面包含了文件系统。
rm -rf rootfs.tar

然后在123文件夹的同级目录,输入以下命令。制作自己的根文件系统,大小依据自己的根文件系统而定,注意依据 文件夹的大小来修改 count 值,:
mkdir rootfs
dd if=/dev/zero of=rootfs.img bs=1M count=1024
mkfs.ext4 rootfs.img
mount rootfs.img rootfs/
cp -rfp 123/* rootfs/
umount rootfs/
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img
如下图所示:



这样rootfs.img 就是最终的根文件系统映像文件了。
5.10 Buildroot系统测试
根文件系统已经制作完成了,接下来就是烧写测试了。
5.10.1单独烧写buildroot镜像
首先下载对应屏幕的buildroot镜像,开发板烧写buildroot镜像的update.img。然后参考《06_【北京迅为】itop-3568开发板快速烧写手册》手册中4.2 单独烧写Linux固件小节,单独烧写文件系统镜像rootfs.img。
5.10.2 烧写测试
烧写完毕,系统启动之后如下所示:

因为默认的buildroot 配置没有配置桌面,所以桌面不显示。
(完整学习资料和视频,欢迎关注我的B站【北京迅为电子】,回复关键词「Linux基础」,
领取全部配套资料!你的关注是我更新的最大动力~)
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)