Skip to content

Instantly share code, notes, and snippets.

@bitristan
Last active August 16, 2025 00:02
Show Gist options
  • Save bitristan/ca830992f132232e9bfc85ea919ece5f to your computer and use it in GitHub Desktop.
Save bitristan/ca830992f132232e9bfc85ea919ece5f to your computer and use it in GitHub Desktop.
Create a simple rootfs img by busybox for linux kernel launch.
#!/bin/bash
set -e
# 配置参数
ROOTFS_DIR="./rootfs" # 根文件系统目录
OUTPUT_IMG="rootfs.img" # 输出镜像文件名
IMG_SIZE="64M" # 镜像大小
ARCH="aarch64" # 目标架构 (x86_64/arm/aarch64)
KERNEL_PATH="./bzImage" # 内核路径
# 清理旧文件
sudo umount -q "${ROOTFS_DIR}/mnt" 2>/dev/null || true
rm -rf "${ROOTFS_DIR}" "${OUTPUT_IMG}"
# 创建根文件系统目录结构
mkdir -p "${ROOTFS_DIR}"/{bin,dev,etc/init.d,lib,proc,sys,tmp,root,usr/{bin,lib},mnt}
# 复制 BusyBox 并创建符号链接
sudo cp /usr/bin/busybox "${ROOTFS_DIR}/bin/"
sudo chroot "${ROOTFS_DIR}" /bin/busybox --install /bin
# 生成启动脚本 /etc/init.d/rcS
cat > "${ROOTFS_DIR}/etc/init.d/rcS" <<EOF
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
exec /bin/sh
EOF
sudo chmod +x "${ROOTFS_DIR}/etc/init.d/rcS"
# 创建磁盘镜像
dd if=/dev/zero of="${OUTPUT_IMG}" bs=${IMG_SIZE} count=1
mkfs.ext4 -F "${OUTPUT_IMG}"
# 挂载镜像并复制文件系统
MOUNT_DIR="./mnt"
mkdir -p "${MOUNT_DIR}"
sudo mount -o loop "${OUTPUT_IMG}" "${MOUNT_DIR}"
sudo cp -ra "${ROOTFS_DIR}/"* "${MOUNT_DIR}/"
sudo umount "${MOUNT_DIR}"
rm -rf "${MOUNT_DIR}"
# 清理临时目录
rm -rf "${ROOTFS_DIR}"
echo "--------------------------------------------------"
echo "rootfs.img 生成成功!使用以下命令启动 QEMU:"
echo "--------------------------------------------------"
# # QEMU 启动命令
# if [ "$ARCH" = "x86_64" ]; then
# echo "qemu-system-x86_64 \\
# -kernel \"${KERNEL_PATH}\" \\
# -append \"console=ttyS0 root=/dev/sda rw init=/sbin/init\" \\
# -drive \"file=${OUTPUT_IMG},format=raw\" \\
# -nographic"
# elif [ "$ARCH" = "aarch64" ]; then
# echo "qemu-system-aarch64 \\
# -M virt \\
# -cpu cortex-a53 \\
# -kernel \"${KERNEL_PATH}\" \\
# -append \"console=ttyAMA0 root=/dev/vda rw init=/sbin/init\" \\
# -drive \"file=${OUTPUT_IMG},format=raw\" \\
# -nographic"
# fi
@bitristan
Copy link
Author

sudo apt install busybox-static
install busybox static first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment