Buildroot构建文件系统

一、Buildroot源码下载

可以通过官网进行下载,网址为:https://buildroot.org/download.html,我这边选择的是 buildroot-2026.05.1.tar.gz版本下载使用。

二、编译预配置

制作默认配置文件,可以从芯片厂商提供的BSP中找到基本配置进行裁剪,也可以自行制作,由于我这边是深度定制,目的是降低文件系统大小,目前自行制作默认配置文件。

1.基本使用方法

复制代码
使用make xxxx_ defconfig 进行生成默认配置(文件xxxx_ defconfig要在configs中) 
使用make  menuconfig     进行设置:
使用make savedefconfig   进行保存最小化并覆盖默认配置文件
使用make clean           执行编译清理,不清理下载好的源码和.config
使用make distclean       执行编译清理,所有输出文件,包括 dl/ 目录、.config、构建日志

2.详细配置

如上图所示,配置主要有以下几大块,Target options、Tollchain、Build options、System configuration、Target packages、Filesystem images五项,由于我这边不涉及Bootloaders和Kernel所以需要手动关闭,下面一一介绍

1)、Target options和主控芯片的架构息息相关,需要根据自己使用的芯片架构进行选择修改:

设置后会在.config 中# Target options部分生成如下配置:

复制代码
#标识当前选定的目标架构是否为 64 位
BR2_ARCH_IS_64=y
#用于指示目标硬件架构是否支持内存管理单元MMU
BR2_USE_MMU=y
#选择 ARM 64位(AArch64/ARMv8)架构作为目标平台的配置选项
BR2_aarch64=y
#该架构具有交叉编译链
BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT=y
BR2_ARCH="aarch64"
BR2_NORMALIZED_ARCH="arm64"
#小端序(Little Endian)
BR2_ENDIAN="LITTLE"
#LP64 模型(Long Pointers 64-bit),即指针和 long 类型为 64 位,int 为 32 位
BR2_GCC_TARGET_ABI="lp64"
#针对 Cortex-A53 核心进行指令调度和优化
BR2_GCC_TARGET_CPU="cortex-a53"
BR2_BINFMT_SUPPORTS_SHARED=y
BR2_READELF_ARCH_NAME="AArch64"
BR2_ARM_CPU_HAS_FPU=y
#配置显示支持从 VFPv2 到 FP-ARMv8 的所有浮点扩展
BR2_ARM_CPU_HAS_VFPV2=y
BR2_ARM_CPU_HAS_VFPV3=y
BR2_ARM_CPU_HAS_VFPV4=y
BR2_ARM_CPU_HAS_FP_ARMV8=y
BR2_ARM_CPU_ARMV8A=y

在armv9.2a cores中也有些配置如下

复制代码
#启用 ARMv8 架构标准的浮点运算支持
BR2_ARM_FPU_FP_ARMV8=y
#将 Linux 内核的内存分页大小设置为 4KB
BR2_ARM64_PAGE_SIZE_4K=y
BR2_ARM64_PAGE_SIZE="4K"
#启用对 ELF (Executable and Linkable Format) 格式二进制文件的支持
BR2_BINFMT_ELF=y

2)、Tollchain是编译时使用的交叉编译器设置,我这边使用已经安装好的交叉编译其,故使用External Toolchain,并对其进行配置,主要如下:

在Toolchain中配置如下

复制代码
# Toolchain
#启用交叉编译工具链支持
BR2_TOOLCHAIN=y
#指定 C 标准库为 glibc
BR2_TOOLCHAIN_USES_GLIBC=y
#使用外部预编译好已安装的交叉编译工具链
BR2_TOOLCHAIN_EXTERNAL=y

在Toolchain External Options中配置如下

复制代码
# Toolchain External Options
#外部工具链为自定义(Custom)
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
#工具链已经解压并存在于本地文件系统
BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED=y
#工具链路径为/xxxxxxxxxxxxx/xxxxx-aarch64-none-linux-gnu/
BR2_TOOLCHAIN_EXTERNAL_PATH="/xxxxxxxxxxxxx/xxxxx-aarch64-none-linux-gnu/"
#确认工具链使用 glibc
BR2_TOOLCHAIN_EXTERNAL_GLIBC=y
#使用预安装外部工具链
BR2_PACKAGE_HAS_TOOLCHAIN_EXTERNAL=y
#外部工具链为自定义(Custom)
BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL="toolchain-external-custom"
#编译器命令前缀
BR2_TOOLCHAIN_EXTERNAL_PREFIX="aarch64-none-linux-gnu"
#表示当前选定的 AArch64 架构兼容 Bootlin 外部工具链
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARCH_SUPPORTS=y
#编译器命令前缀
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="aarch64-none-linux-gnu"
#声明外部工具链的 GCC 版本为 10.x
BR2_TOOLCHAIN_EXTERNAL_GCC_10=y
#声明外部工具链携带的内核头文件版本对应 Linux 4.20
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20=y
#自定义模式下,进一步指定 C 库为 glibc
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
#支持栈保护(Stack Smashing Protection)
BR2_TOOLCHAIN_EXTERNAL_HAS_SSP=y
#支持栈保护增强模式
BR2_TOOLCHAIN_EXTERNAL_HAS_SSP_STRONG=y
#支持 C++ 编译
BR2_TOOLCHAIN_EXTERNAL_CXX=y
#外部工具链支持 Fortran 编译器和 OpenMP 支持
BR2_TOOLCHAIN_EXTERNAL_FORTRAN=y
#外部工具链支持 OpenMP 支持
BR2_TOOLCHAIN_EXTERNAL_OPENMP=y
#目标架构支持被主机端 GDB(Host GDB)
BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS=y

其他的还有# Host GDB Options和# Toolchain Generic Options在此不再一一列取。

3)、Build options是对编译过程中如文件系统配置等进行修改和预处理如下:

在此列出几个重要的配置:

复制代码
# Mirrors and Download locations
#使用strip对二进制文件移除符号表和调试信息。
BR2_STRIP_strip=y
#指定不被 strip 的文件
BR2_STRIP_EXCLUDE_FILES=""
#指定不被 strip 的目录
BR2_STRIP_EXCLUDE_DIRS=""

4)、System configuration是对系统关键进行配置,包括系统名、提示语、root密码以及格式、启动getty终端调试、时间,如下:

在此列出几个重要的配置:

复制代码
# System configuration
#设置目标系统的主机名
BR2_TARGET_GENERIC_HOSTNAME="XXXXX"
#设置登录前的欢迎信息
BR2_TARGET_GENERIC_ISSUE="Welcome to XXXXX Buildroot"
#指定 root 密码在 /etc/shadow 中的加密哈希算法SHA256
BR2_TARGET_GENERIC_PASSWD_SHA256=y
BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256"

# General purpose
#选择 BusyBox 作为系统的 init 进程
BR2_INIT_BUSYBOX=y

# Special purpose (read help)
#启用 eudev 进行动态设备节点管理
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
#启用"合并 /usr"布局(传统布局:/bin, /sbin, /lib 与 /usr/bin, /usr/sbin, /usr/lib 是分开的目录; 合并布局:/bin 是指向 /usr/bin 的符号链接,/sbin 指向 /usr/sbin,/lib 指向 /usr/lib)
BR2_ROOTFS_MERGED_USR=y
#是否允许 root 用户直接登录
BR2_TARGET_ENABLE_ROOT_LOGIN=y
#设置 root 用户的密码明文
BR2_TARGET_GENERIC_ROOT_PASSWD="123456"
#指定 /bin/sh 指向 BusyBox 的 ash shell
BR2_SYSTEM_BIN_SH_BUSYBOX=y
#启用通用的 getty 服务
BR2_TARGET_GENERIC_GETTY=y
#指定 getty 监听的端口ttyFIQ0(瑞星微调试串口名)
BR2_TARGET_GENERIC_GETTY_PORT="ttyFIQ0"
BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP=y
#设置串口的波特率
BR2_TARGET_GENERIC_GETTY_BAUDRATE="0"
#设置终端类型环境变量 $TERM
BR2_TARGET_GENERIC_GETTY_TERM="vt100"
#传递给 getty 程序的额外命令行参数
BR2_TARGET_GENERIC_GETTY_OPTIONS=""
#在启动时自动将根文件系统重新挂载为读写模式(RW)
BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y
#指定在启动时通过 DHCP 获取 IP 地址的网络接口
BR2_SYSTEM_DHCP=""
#设置系统默认的 $PATH 环境变量
BR2_SYSTEM_DEFAULT_PATH="/usr/bin:/usr/sbin"
#启用 locale 清理功能(在构建根文件系统时,删除未使用的语言翻译文件(.mo 文件)和本地化数据,显著减小根文件系统体积。)
BR2_ENABLE_LOCALE_PURGE=y
保留en_US zh_CN的语言环境,其他全部删除
BR2_ENABLE_LOCALE_WHITELIST="C en_US zh_CN"
#指定需要生成的 locale 数据
BR2_GENERATE_LOCALE=""
#在根文件系统中包含时区信息数据库
BR2_TARGET_TZ_INFO=y
#只包含需要的区域(如 Asia/Shanghai, UTC)
BR2_TARGET_TZ_ZONELIST="default"
#设置系统的默认时区
BR2_TARGET_LOCALTIME="Etc/UTC"
#指定一个或多个用户表文件路径,定义了需要在根文件系统中创建的用户和组,以及他们的 UID/GID、主目录、shell 和权限
BR2_ROOTFS_USERS_TABLES=""
#指定一个目录,其内容将在构建结束时直接复制到根文件系统中
BR2_ROOTFS_OVERLAY=""
#在开始构建任何目标包之前执行的脚本,准备外部源、打补丁、或设置环境变量
BR2_ROOTFS_PRE_BUILD_SCRIPT=""
#在所有包编译完成,但尚未生成最终文件系统镜像(如 tar, ext4)之前执行的脚本,用于修改目标文件系统中的文件、删除不需要的文件、生成自定义配置文件
BR2_ROOTFS_POST_BUILD_SCRIPT="configfiles/postrootfs/post-build.sh"
#在 fakeroot 环境中执行的脚本,fakeroot 模拟 root 权限,用于设置文件所有者、权限位(setuid/setgid)等,而无需真正以 root 身份运行构建过程。此脚本在生成文件系统镜像前、post-build 后执行
BR2_ROOTFS_POST_FAKEROOT_SCRIPT=""
#在最终文件系统镜像(如 rootfs.tar, rootfs.ext4)生成之后执行的脚本
BR2_ROOTFS_POST_IMAGE_SCRIPT=""
#传递给 BR2_ROOTFS_POST_SCRIPT 指定脚本的命令行参数
BR2_ROOTFS_POST_SCRIPT_ARGS=""
#传递给 BR2_ROOTFS_POST_BUILD_SCRIPT 指定脚本的命令行参数
BR2_ROOTFS_POST_BUILD_SCRIPT_ARGS=""

5)、Target packages,主要是对系统组件如目标busybox、音视频、flash、安全、系统工具和其他编译目标进行配置,或者增加系统工具组件,如下。

在此列出几个重要的配置:

复制代码
# Target packages
#启用BusyBox 软件包
BR2_PACKAGE_BUSYBOX=y
#指定用于编译 BusyBox 的默认配置文件(.config)路径
BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config"
#指定额外的配置片段文件(Fragment Files),用于覆盖或追加默认配置
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="configfiles/busybox/busybox.fragment"
#在 menuconfig 中显示那些与 BusyBox 功能冲突或重复的其他独立软件包
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
#启用根文件系统骨架包根文件系统的基础目录结构和初始配置文件
BR2_PACKAGE_SKELETON=y
#内部依赖检查变量,表示当前配置中是否存在可用的 skeleton 提供者
BR2_PACKAGE_HAS_SKELETON=y
#内部变量,记录当前实际提供 skeleton 功能的具体包名称
BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv"
#启用与 init 系统无关的通用骨架文件
BR2_PACKAGE_SKELETON_INIT_COMMON=y
#选择基于 SysVinit 风格的骨架文件
BR2_PACKAGE_SKELETON_INIT_SYSV=y

# dacapo needs OpenJDK
#检查当前架构是否支持Go 语言的原生调试器 Delve。
BR2_PACKAGE_DELVE_ARCH_SUPPORTS=y
#检查当前目标架构是否支持 FWTS (Firmware Test Suite)
BR2_PACKAGE_FWTS_ARCH_SUPPORTS=y
#检查当前目标架构是否被 GDB (GNU Debugger) 支持
BR2_PACKAGE_GDB_ARCH_SUPPORTS=y
#在目标根文件系统中安装 GDB 调试器。
BR2_PACKAGE_GDB=y
#在目标根文件系统中安装 GDB Server 
BR2_PACKAGE_GDB_SERVER=y
#检查当前目标架构是否支持 Google Breakpad。
BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y
#检查当前目标架构是否支持 Kexec
BR2_PACKAGE_KEXEC_ARCH_SUPPORTS=y
#检查当前目标架构是否支持 KVM Unit Tests
BR2_PACKAGE_KVM_UNIT_TESTS_ARCH_SUPPORTS=y
#安装 Lsof (List Open Files) 工具
BR2_PACKAGE_LSOF=y
#检查当前目标架构是否支持 LTP (Linux Test Project)
BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y
#检查当前目标架构是否支持 Ltrace。
BR2_PACKAGE_LTRACE_ARCH_SUPPORTS=y

# Filesystem and flash utilities
#启用 dosfstools 软件包总开关
BR2_PACKAGE_DOSFSTOOLS=y
#安装 fatlabel 工具
BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
#安装 fsck.fat (也称为 dosfsck) 工具
BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
#安装 mkfs.fat (也称为 mkdosfs) 工具
BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
#启用 e2fsprogs 软件包总开关。
BR2_PACKAGE_E2FSPROGS=y
#安装 e2fsck 工具用于检查及修复 ext2/3/4 文件系统
BR2_PACKAGE_E2FSPROGS_FSCK=y
#安装 resize2fs 工具用于嵌入式设备首次启动时,将根文件系统扩展至整个 SD 卡或 eMMC 分区
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y

# esp-hosted needs a Linux kernel to be built# BR2_PACKAGE_ESPFLASH is not set
#启用 eudev 软件包
BR2_PACKAGE_EUDEV=y
#内部依赖变量,表示当前系统由 eudev 提供 udev 功能
BR2_PACKAGE_PROVIDES_UDEV="eudev"
#启用 eudev 的内核模块自动加载功能
BR2_PACKAGE_EUDEV_MODULE_LOADING=y
#启用硬件数据库 (hwdb) 支持。
BR2_PACKAGE_EUDEV_ENABLE_HWDB=y
#内部依赖检查变量,判断当前目标架构是否支持 flashrom
BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y
#启用 input-event-daemon
BR2_PACKAGE_INPUT_EVENT_DAEMON=y

# nxp-mwifiex needs a Linux kernel to be built
#启用 GNU Parted 工具
BR2_PACKAGE_PARTED=y

# tio needs lua (but not luajit)
#使用udev 兼容的设备管理服务
BR2_PACKAGE_HAS_UDEV=y
#启用 usbmount 工具检测到 USB 存储设备插入时,它会自动将其挂载到指定目录(如 /media/usb);拔出时自动卸载
BR2_PACKAGE_USBMOUNT=y

# cryptodev-linux needs a Linux kernel to be built
#启用 GnuTLS 库
BR2_PACKAGE_GNUTLS=y
#启用完整的 OpenSSL 软件包
BR2_PACKAGE_OPENSSL=y
#启用 OpenSSL 的库文件部分
BR2_PACKAGE_LIBOPENSSL=y
#针对目标架构优化 OpenSSL 汇编代码
BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH="linux-aarch64"
#提供了 OpenSSL API 兼容库
BR2_PACKAGE_HAS_OPENSSL=y
#供 OpenSSL 功能的库包名
BR2_PACKAGE_PROVIDES_OPENSSL="libopenssl"
#提供的 OpenSSL 实现
BR2_PACKAGE_PROVIDES_HOST_OPENSSL="host-libopenssl"

# sqlcipher conflicts with sqlite
#启用 SQLite 数据库引擎
BR2_PACKAGE_SQLITE=y

# Filesystem
#启用 liblockfile 库提供 NFS 安全的文件锁定机制
BR2_PACKAGE_LIBLOCKFILE=y

# cfm needs a toolchain w/ threads, kernel headers >= 5.0
#启用 Dhcpcd
BR2_PACKAGE_DHCPCD=y
#启用 Dhcpcd 的特权分离(Privilege Separation)功能
BR2_PACKAGE_DHCPCD_ENABLE_PRIVSEP=y

# ejabberd needs erlang, toolchain w/ C++
#启用 ethtool 工具
BR2_PACKAGE_ETHTOOL=y
#启用 ethtool 的人类可读格式化输出支持
BR2_PACKAGE_ETHTOOL_PRETTY_PRINT=y

# gupnp-tools needs libgtk3
#启用 ifupdown 工具集(包含 ifup, ifdown, ifquery)
BR2_PACKAGE_IFUPDOWN=y
#安装 ifupdown 的默认示例脚本和目录
BR2_PACKAGE_IFUPDOWN_SCRIPTS=y

# igh-ethercat needs a Linux kernel to be built
#启用 iptables 用户空间工具
BR2_PACKAGE_IPTABLES=y
#启用 iptables 对 BPF (Berkeley Packet Filter) 和 NFS (Network File System) 匹配扩展的支持
BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y
#启用 iptables-nft 兼容层支持
BR2_PACKAGE_IPTABLES_NFTABLES=y
#启用 iputils 软件包总开关
BR2_PACKAGE_IPUTILS=y
#安装 arping 工具
BR2_PACKAGE_IPUTILS_ARPING=y
#安装 clockdiff 工具利用 ICMP 时间戳请求/回复报文来计算远程主机的时间与本地时间的差异
BR2_PACKAGE_IPUTILS_CLOCKDIFF=y
#安装 ping 工具
BR2_PACKAGE_IPUTILS_PING=y
#安装 tracepath (或 traceroute) 工具
BR2_PACKAGE_IPUTILS_TRACEPATH=y

# NetworkManager needs udev /dev management and a glibc or musl toolchain w/ headers >= 5.4, dynamic library, wchar, threads, gcc >= 4.9
#启用 OpenSSH 软件包总开关。
BR2_PACKAGE_OPENSSH=y
#安装 OpenSSH 客户端工具 (ssh, scp, sftp)。
BR2_PACKAGE_OPENSSH_CLIENT=y
#安装 OpenSSH 服务端守护进程 (sshd)
BR2_PACKAGE_OPENSSH_SERVER=y
#安装 ssh-keygen 工具,用于生成、管理和转换认证密钥
BR2_PACKAGE_OPENSSH_KEY_UTILS=y
#启用 OpenSSH 的沙箱(Sandbox)安全机制
BR2_PACKAGE_OPENSSH_SANDBOX=y

# passt needs a toolchain w/ headers >= 5.9
#启用 PPP 守护进程 (pppd)
BR2_PACKAGE_PPPD=y

# prosody needs the lua interpreter, dynamic library
#启用 tcpdump 网络抓包工具。
BR2_PACKAGE_TCPDUMP=y
#启用 vsftpd (Very Secure FTP Daemon)。一个轻量级、安全的 FTP 服务器
BR2_PACKAGE_VSFTPD=y

# Shells
#启用 GNU Bash (Bourne Again SHell)。
BR2_PACKAGE_BASH=y

# Utilities
#启用 Bash 命令行自动补全脚本。
BR2_PACKAGE_BASH_COMPLETION=y
#安装 file 命令及魔术数数据库 用于识别文件类型(不依赖扩展名,而是分析文件头内容)
BR2_PACKAGE_FILE=y
#GnuPG2 依赖多个库(如 libgcrypt, libgpg-error, zlib 等)
BR2_PACKAGE_GNUPG2_DEPENDS=y
#安装 lockfile-create, lockfile-remove, lockfile-touch 等工具
BR2_PACKAGE_LOCKFILE_PROGS=y

# lowdown needs a toolchain w/ wchar and shared library support
#启用 sudo
BR2_PACKAGE_SUDO=y
#安装 GNU time 工具用于测量命令执行的资源使用情况(CPU 时间、内存占用、I/O 等待等)
BR2_PACKAGE_TIME=y

# System tools
#判断当前架构是否支持 Linux Audit 子系统
BR2_PACKAGE_AUDIT_ARCH_SUPPORTS=y
#启用 GNU Coreutils 全套工具(包含 ls, cp, mv, rm, cat, chmod, chown, dd, sort 等基础命令的完整 GNU 版)
BR2_PACKAGE_COREUTILS=y

# pamtester depends on linux-pam
#启用 procs 工具(这是一个用 Rust 编写的现代 ps 替代工具彩色输出、智能搜索、树状显示、更友好的界面)
BR2_PACKAGE_PROCS=y
#启用 psmisc 工具集(包含 killall (按名称杀进程), fuser (查找占用文件的进程), pstree (进程树), peekfd 等)
BR2_PACKAGE_PSMISC=y
#启用 procps-ng(包含标准的 ps, top, free, vmstat, slabtop, pidof 等工具这是 Linux 系统中查看进程状态和系统资源的标准工具集,比 BusyBox 的 ps/top 功能更丰富、格式更标准)
BR2_PACKAGE_PROCPS_NG=y

# supervisor needs a python interpreter
#判断当前选定的目标 CPU 架构是否支持 systemd init 系统
BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y
#判断当前目标架构是否支持 systemd-bootchart 工具
BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y
#启用 GNU tar
BR2_PACKAGE_TAR=y
#启用 util-linux 软件包总开关
BR2_PACKAGE_UTIL_LINUX=y
#安装 util-linux 的核心共享库(包括 libblkid, libmount, libuuid 等)
BR2_PACKAGE_UTIL_LINUX_LIBS=y
#单独启用 libblkid 库
BR2_PACKAGE_UTIL_LINUX_LIBBLKID=y
#单独启用 libmount 库
BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y
#单独启用 libuuid 库
BR2_PACKAGE_UTIL_LINUX_LIBUUID=y
#安装 hwclock 工具(用于读取和设置硬件实时时钟 (RTC))
BR2_PACKAGE_UTIL_LINUX_HWCLOCK=y
#安装 mount 和 umount 工具
BR2_PACKAGE_UTIL_LINUX_MOUNT=y

6)、Filesystem images是对即将要构建的rootfs的格式,大小等进行配置,如下:

在此列出几个重要的配置:

复制代码
# Filesystem images
#启用 ext2/ext3/ext4 根文件系统镜像生成的总开关
BR2_TARGET_ROOTFS_EXT2=y
#指定生成 ext4格式的文件系统
BR2_TARGET_ROOTFS_EXT2_4=y
#手动指定文件系统的代数(Generation),即 ext2, ext3, 或 ext4
BR2_TARGET_ROOTFS_EXT2_GEN=4
#设置文件系统的卷标
BR2_TARGET_ROOTFS_EXT2_LABEL="rootfs"
#设置生成的文件系统镜像的总大小(单位通常为 KB 或 MB,具体视 Buildroot 版本提示而定,通常为 KB)。
BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
#设置文件系统中 inode(索引节点)的总数
BR2_TARGET_ROOTFS_EXT2_INODES=0
#设置每个 inode 占用的字节数
BR2_TARGET_ROOTFS_EXT2_INODE_SIZE=256
#设置保留块(Reserved Blocks)的百分比或数量
BR2_TARGET_ROOTFS_EXT2_RESBLKS=5
#传递给 genext2fs 或 mkfs.ext4 的额外自定义参数
BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit"

7)、其他手动检查关闭功能Bootloaders和Kernel

三、编译

使用make -jx 进行x线程同时编译

编译报错,可以通过grep 或者报错名字进行修改去除某些功能,或者另外自行交叉编译

四、调试使用

对编译输出的文件系统路径为output\images\ rootfs.ext4

可以使用mount rootfs.ext4 rootfs 将rootfs.ext4,挂载到rootfs上进行文件查看,也可以直接烧录到设备上进行测试。

五、事例默认配置文件

如下,其中以?开头的部分请根据自己实际配置修改

复制代码
BR2_aarch64=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
?BR2_TOOLCHAIN_EXTERNAL_PATH="/xxxxxx/xxx-aarch64-none-linux-gnu/"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="aarch64-none-linux-gnu"
BR2_TOOLCHAIN_EXTERNAL_GCC_10=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
# BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_TOOLCHAIN_EXTERNAL_FORTRAN=y
BR2_TOOLCHAIN_EXTERNAL_OPENMP=y
BR2_PRIMARY_SITE="http://sources.buildroot.net"
BR2_BACKUP_SITE=""
?BR2_TARGET_GENERIC_HOSTNAME="xxxxxx"
?BR2_TARGET_GENERIC_ISSUE="xxxxxx"
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_MERGED_USR=y
?BR2_TARGET_GENERIC_ROOT_PASSWD="xxxxxx"
?BR2_TARGET_GENERIC_GETTY_PORT=" xxxxxx "
?BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin"
?BR2_ENABLE_LOCALE_WHITELIST="C en_US zh_CN"
BR2_TARGET_TZ_INFO=y
BR2_TARGET_LOCALTIME="Asia/Shanghai"
?BR2_ROOTFS_OVERLAY="xxxxxx"
?BR2_ROOTFS_POST_BUILD_SCRIPT="xxxxxx/post-build.sh"
?BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES=" xxxxxx /busybox.fragment"
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_GDB=y
BR2_PACKAGE_LSOF=y
BR2_PACKAGE_GREP=y
BR2_PACKAGE_SED=y
BR2_PACKAGE_TREE=y
BR2_PACKAGE_DOSFSTOOLS=y
BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_WQY_ZENHEI=y
BR2_PACKAGE_INPUT_EVENT_DAEMON=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_USBMOUNT=y
BR2_PACKAGE_GNUTLS=y
BR2_PACKAGE_SQLITE=y
BR2_PACKAGE_FONTCONFIG=y
BR2_PACKAGE_LIBNL=y
BR2_PACKAGE_LIBTIRPC=y
BR2_PACKAGE_POPT=y
BR2_PACKAGE_DHCPCD=y
BR2_PACKAGE_ETHTOOL=y
BR2_PACKAGE_IFUPDOWN=y
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y
BR2_PACKAGE_IPTABLES_NFTABLES=y
BR2_PACKAGE_IPUTILS=y
BR2_PACKAGE_LRZSZ=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_PPPD=y
BR2_PACKAGE_TCPDUMP=y
BR2_PACKAGE_VSFTPD=y
BR2_PACKAGE_BASH=y
BR2_PACKAGE_BASH_COMPLETION=y
BR2_PACKAGE_FILE=y
BR2_PACKAGE_SUDO=y
BR2_PACKAGE_TIME=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_PROCS=y
BR2_PACKAGE_PSMISC=y
BR2_PACKAGE_TAR=y
BR2_PACKAGE_UTIL_LINUX_HWCLOCK=y
BR2_PACKAGE_UTIL_LINUX_MOUNT=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
# BR2_TARGET_ROOTFS_TAR is not set
BR2_PACKAGE_HOST_ENVIRONMENT_SETUP=y
BR2_PACKAGE_HOST_PYTHON3=y
BR2_PACKAGE_HOST_PYTHON3_SSL=y
BR2_PACKAGE_HOST_QEMU=y
相关推荐
herinspace1 小时前
管家婆财贸ERP如何进行基本信息批量搬移
服务器·数据库·管家婆软件·财务软件
深念Y1 小时前
AI Agent 时代运维安全:rm 防误删方案对比
linux·运维·人工智能·安全·自动化·agent
hkNaruto2 小时前
【Linux】Ubuntu 22.04 LTS GNOME 原生远程桌面配置:告别vnc、nomachine
linux·运维·ubuntu
Turboex邮件分享2 小时前
MX记录与邮件路由:一封邮件如何找到正确的服务器
服务器·网络协议·安全
那年窗外下的雪.2 小时前
VXLAN EVPN 分层排障:从 VTEP 可达、ARP/MAC 到 MAC Mobility
服务器·前端·网络·数据库·spine
崇子嵘2 小时前
基于zynqMPsoc15eg的linux端axi dma教训总结
linux·运维·服务器
ZJU_统一阿萨姆2 小时前
【算子开发】全局内存访问与合并访存
java·服务器·网络·人工智能·语言模型
动力 continue3 小时前
Linux 基础篇 · Vim 三种模式与常用指令
linux·运维·vim
7177773 小时前
不止工具集成:基于 Gitee 软件工厂构建 DevSecOps 研发治理底座
java·服务器·gitee