欢迎光临
我们一直在努力

linux rootfs制作

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):

架构下载链接(Ubuntu 22.04)
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.裁剪技巧

  • 精简语言包:删除不必要的语言文件,减少体积 sudo chroot rootfs
    apt install -y localepurge
    echo "en_US.UTF-8 UTF-8" > /etc/locale.conf
    localepurge # 自动删除非指定语言包
  • 禁用不必要服务:如 avahi、systemd-resolved 等 systemctl disable avahi-daemon.service
    systemctl disable systemd-resolved.service
  • 压缩镜像:使用 e2fsck 和 resize2fs 压缩镜像到实际使用大小 sudo e2fsck -f ubuntu-rootfs.ext4
    sudo resize2fs -M ubuntu-rootfs.ext4 # -M 表示最小化
  • 常见问题与优化

  • 启动失败:No console:确保 dev/console 节点正确,内核参数 console=ttyAMA0 匹配
  • 体积过大:Buildroot 中裁剪不必要包;BusyBox 静态编译
  • 权限问题:所有文件属主应为 root:root,使用 sudo 拷贝
  • initramfs 制作:
  • cd rootfs
    find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz

    工具对比总结

    • BusyBox:适合学习与极简场景,可控性最强
    • Buildroot:嵌入式开发首选,平衡效率与定制
    • Yocto:复杂项目、长期维护,生态完善
    • Ubuntu Base:快速开发、需要完整包管理
    赞(0)
    未经允许不得转载:171主机测评 » linux rootfs制作
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址