使用 QEMU 启动 OpenWrt 系统

准备工作

创建工作目录并下载必要的文件:

# 创建工作目录
mkdir -p openwrt_qemu
cd openwrt_qemu

# 下载 OpenWrt 镜像
wget https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-x86-64-generic-rootfs.tar.gz
wget https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-x86-64-generic-kernel.bin

# 解压根文件系统
mkdir -p openwrt_rootfs
tar -xzf openwrt-x86-64-generic-rootfs.tar.gz -C openwrt_rootfs

创建磁盘镜像

创建并配置磁盘镜像:

# 创建空的磁盘镜像文件(1GB)
dd if=/dev/zero of=rootfs.ext3 bs=1M count=1024

# 格式化为 ext3 文件系统
mkfs.ext3 rootfs.ext3

# 挂载并复制文件
mkdir -p fs
sudo mount -o loop rootfs.ext3 fs
sudo cp -rf openwrt_rootfs/* fs/
sudo umount fs

# 压缩镜像(可选)
gzip --best -c rootfs.ext3 > rootfs.img.gz

启动 QEMU

使用 QEMU 启动 OpenWrt:

# 使用未压缩的镜像启动
qemu-system-x86_64 \
    -enable-kvm \
    -kernel openwrt-x86-64-generic-kernel.bin \
    -drive file=rootfs.ext3,format=raw \
    -append "root=/dev/sda console=ttyS0" \
    -nographic \
    -m 512M \
    -net nic,model=virtio \
    -net user

# 或者直接使用压缩的镜像启动
qemu-system-x86_64 \
    -enable-kvm \
    -kernel openwrt-x86-64-generic-kernel.bin \
    -drive file=rootfs.img.gz,format=raw \
    -append "root=/dev/sda console=ttyS0" \
    -nographic \
    -m 512M \
    -net nic,model=virtio \
    -net user

登录和配置

启动完成后,进行以下配置:

  1. 使用默认用户名 root 登录(初始无密码)

  2. 设置 root 密码:

    passwd
    
  3. 配置网络:

    # 查看网络接口
    ifconfig
    
    # 配置网络(如果需要)
    uci set network.lan.ipaddr='192.168.1.1'
    uci commit
    /etc/init.d/network restart
    

注意事项

  1. 确保有足够的磁盘空间(示例中创建了 1GB 的镜像)

  2. 如果启动失败,可以添加 -d int 参数查看详细日志:

    qemu-system-x86_64 -d int ...
    
  3. 网络配置:

    • 默认使用用户模式网络(-net user)

    • 可以通过 -net nic,model=virtio 指定网卡类型

    • 如果需要桥接网络,可以使用 -net bridge 选项

  4. 性能优化:

    • 可以增加内存大小(-m 参数)

    • 可以启用 KVM 加速(如果支持):

      qemu-system-x86_64 -enable-kvm ...
      
  5. 调试技巧:

    • 使用 -serial stdio 替代 -nographic 可以在终端中看到串口输出

    • 添加 -S -s 参数可以启动调试模式,配合 gdb 进行调试