Linux rootfs(根文件系统)制作有手动(BusyBox)、自动化(Buildroot/Yocto)、发行版裁剪(Ubuntu/Debian Base) 三种主流方案;
方案选型与适用场景
| BusyBox 手动 | 最小化、高度可控、体积小 | 嵌入式裸机、极简系统、学习底层 | 中高 |
| Buildroot | 自动化、一键生成、支持多架构 | 快速定制嵌入式 rootfs、量产 | 中 |
| Yocto Project | 高度定制、完整生态、支持复杂依赖 | 工业级、复杂嵌入式、长期维护 | 高 |
| Ubuntu/Debian Base | 基于发行版、软件丰富、apt 可用 | 开发板、边缘计算、需要完整包管理 | 低 |
BusyBox 手动制作(最小 rootfs)
1. 下载与编译 BusyBox
# 下载(官网:https://busybox.net/downloads/)
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar xvf busybox-1.36.1.tar.bz2
cd busybox-1.36.1
# 配置(静态编译 + 交叉编译)
make menuconfig
# 关键配置:
# Busybox Settings → Build Options → [*] Build static binary (no shared libs)
# Busybox Settings → Build Options → Cross Compiler prefix → aarch64-linux-gnu-
# Installation Options → Don't use /usr → [*]
# Installation Options → Busybox Installation Prefix → ../rootfs
# 编译安装
make -j$(nproc)
make install
2. 构建 rootfs 目录骨架
cd ../rootfs
mkdir -p dev etc/init.d lib lib64 home mnt proc root sys tmp var usr/{bin,sbin,lib}
3. 创建设备节点(最小集)
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3
4. 配置系统文件
(1)/etc/inittab(init 进程配置)
cat > etc/inittab <<EOF
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/umount -a -r
EOF
(2)/etc/init.d/rcS(启动脚本)
cat > etc/init.d/rcS <<EOF
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev
EOF
chmod +x etc/init.d/rcS
(3)/etc/fstab(文件系统挂载)
cat > etc/fstab <<EOF
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devtmpfs /dev devtmpfs defaults 0 0
EOF
(4)/etc/passwd(用户)
cat > etc/passwd <<EOF
root:x:0:0:root:/root:/bin/sh
EOF
5. 安装内核模块(可选)
# 在内核源码目录执行
make modules_install ARCH=arm64 INSTALL_MOD_PATH=$(pwd)/../rootfs
6. 生成 ext4 镜像
# 创建空镜像(128MB)
dd if=/dev/zero of=rootfs.ext4 bs=1M count=128
mkfs.ext4 -F rootfs.ext4
# 挂载并拷贝文件
mkdir -p mnt
sudo mount -o loop rootfs.ext4 mnt
sudo cp -ra rootfs/* mnt/
sudo umount mnt
Buildroot 自动化制作(推荐)
1. 下载与配置
git clone https://github.com/buildroot/buildroot.git
cd buildroot
make menuconfig
关键配置项
- Target options:选择架构(ARM64/AArch64)
- Toolchain:选择外部工具链或 Buildroot 自建
- Filesystem images:勾选 ext4、squashfs 等
- Target packages:添加 ssh、python 等应用
2. 一键编译
make -j$(nproc)
3. 输出镜像
- 路径:output/images/rootfs.ext4、rootfs.squashfs
- 可直接用于 QEMU 或烧录到 SD 卡
Ubuntu Base 裁剪(快速可用)
1. 下载 Ubuntu Base 镜像
根据架构和版本下载,推荐 LTS 版本(如 22.04 jammy):
| ARM64 | http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-arm64.tar.gz |
| x86_64 | http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-amd64.tar.gz |
# ARM64
wget http://cdimage.ubuntu.com/ubuntu-base/releases/jammy/release/ubuntu-base-22.04-base-arm64.tar.gz
2. 解压并配置
mkdir rootfs
sudo tar xvf ubuntu-base-22.04-base-arm64.tar.gz -C rootfs
# 挂载虚拟文件系统
sudo mount -o bind /dev rootfs/dev
sudo mount -o bind /proc rootfs/proc
sudo mount -o bind /sys rootfs/sys
# chroot 进入并配置
sudo chroot rootfs /bin/bash
apt update
apt install sudo ssh net-tools iproute2
passwd root # 设置 root 密码
exit
# 卸载
sudo umount rootfs/{dev,proc,sys}
3. chroot 进入 rootfs 并裁剪配置
这一步是核心,你可以按需安装 / 删除软件包,精简系统体积:
# 进入 chroot 环境
sudo chroot rootfs /bin/bash
# 1. 配置软件源(关键!否则 apt 无法更新)
# 替换为国内源(如阿里云),提升速度
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
EOF
# 2. 更新包列表并安装基础工具(按需裁剪)
apt update
# 必装基础工具(最小集)
apt install -y sudo passwd net-tools iproute2 openssh-server vim
# 可选:删除不必要的包(精简)
apt remove -y apt-listchanges # 移除更新时的交互式提示
apt autoremove -y # 自动删除依赖残留
# 3. 配置系统基础参数
passwd root # 设置 root 密码(必须!否则无法登录)
echo "ubuntu-rootfs" > /etc/hostname # 设置主机名
echo "127.0.0.1 localhost" > /etc/hosts
echo "127.0.0.1 ubuntu-rootfs" >> /etc/hosts
# 4. 配置 SSH(可选,方便远程登录)
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
mkdir -p /var/run/sshd # 修复 SSH 启动报错
# 5. 清理缓存(关键!减少 rootfs 体积)
apt clean # 删除 apt 下载的包缓存
rm -rf /var/lib/apt/lists/* # 删除包列表缓存
# 退出 chroot 环境
exit
4. 卸载虚拟文件系统
完成配置后,必须卸载挂载的目录,否则会损坏文件:
sudo umount rootfs/dev/pts
sudo umount rootfs/dev
sudo umount rootfs/proc
sudo umount rootfs/sys
sudo umount rootfs/run # 若挂载了则卸载
# 移除 QEMU 静态文件(可选,减少体积)
sudo rm rootfs/usr/bin/qemu-aarch64-static
5.生成可直接使用的镜像文件
将裁剪后的 rootfs 打包为 ext4 镜像(可直接烧录到 SD 卡 / EMMC):
# 1. 创建空镜像文件(大小按需设置,如 1GB)
sudo dd if=/dev/zero of=ubuntu-rootfs.ext4 bs=1M count=1024
# 2. 格式化为 ext4 文件系统
sudo mkfs.ext4 -F ubuntu-rootfs.ext4
# 3. 挂载镜像并拷贝 rootfs 文件
mkdir -p mnt
sudo mount -o loop ubuntu-rootfs.ext4 mnt
sudo cp -ra rootfs/* mnt/
sudo chown -R root:root mnt/ # 确保所有文件属主为 root
# 4. 卸载镜像
sudo umount mnt
rm -rf mnt # 清理临时目录
6.裁剪技巧
apt install -y localepurge
echo "en_US.UTF-8 UTF-8" > /etc/locale.conf
localepurge # 自动删除非指定语言包
systemctl disable systemd-resolved.service
sudo resize2fs -M ubuntu-rootfs.ext4 # -M 表示最小化
常见问题与优化
cd rootfs
find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
工具对比总结
- BusyBox:适合学习与极简场景,可控性最强
- Buildroot:嵌入式开发首选,平衡效率与定制
- Yocto:复杂项目、长期维护,生态完善
- Ubuntu Base:快速开发、需要完整包管理


