Last active
August 16, 2025 00:02
-
-
Save bitristan/ca830992f132232e9bfc85ea919ece5f to your computer and use it in GitHub Desktop.
Create a simple rootfs img by busybox for linux kernel launch.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
sudo apt install busybox-static
install busybox static first.