配置QEMU开发环境
操作提醒:本页是本地实验环境笔记,包含创建网桥、配置 NFS、写
/etc/exports、创建设备节点和启动虚拟机的命令。不要在生产主机直接复制执行;先确认路径、网段、导出目录和权限边界。
如果已经安装了 ncurses 库, 还是提示安装 ncurses 库, 修改类似 kconfig/lxdialog/check-lxdialog.c 的文件
int main() {}改为
int main() { return 0; }编译 x86_64 的内核
make x86_64_defconfigmake编译 busybox 的文件系统
Section titled “编译 busybox 的文件系统”勾选编译成静态文件
make menuconfigmakemake install如果安装了 ncurses 库,还是提示错误,修改 scripts/kconfig/lxdialog/Makefile 注释 always := $(hostprogs-y) dochecklxdialog
如果 networking/tc.c 编译报错,将 networking/tc.c 移出 /networking 目录
影响范围:下面命令会在宿主机创建并启用
br0网桥,还会添加192.168.1.1/24地址。执行前确认该网段没有和现有网络冲突。
sudo ip link add name br0 type bridgesudo ip link set dev br0 upsudo ip addr add 192.168.1.1/24 dev br0安装 nfs
Section titled “安装 nfs”sudo apt install nfs-kernel-server修改 nfs 配置文件
高风险:
no_root_squash会让客户端 root 保留 root 权限写入导出目录,仅适合隔离实验网络。生产环境应限制客户端地址并避免对可写目录使用该选项。
/nfsroot *(rw,sync,no_subtree_check,no_root_squash)重新加载 nfs 配置
sudo exportfs -asudo systemctl restart nfs-kernel-server修改 busybox 的配置
Section titled “修改 busybox 的配置”创建目录
影响范围:以下命令假定当前目录就是 BusyBox 安装后的
nfsroot。如果目录不对,会在错误位置创建系统目录。
mkdir etc dev mnt proc tmp sysmkdir -p etc/init.d/::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::askfirst:-/bin/sh::shutdown:/bin/umount -a -r/bin/mount -amount -o remount,rw /mkdir -p /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -sproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0none /tmp ramfs defaults 0 0sysfs /sys sysfs defaults 0 0mdev /dev ramfs defaults 0 0影响范围:
mknod和chmod会修改 NFS 根文件系统中的设备节点和脚本权限,需要 root 权限;确认/nfsroot是实验根目录。
mknod /nfsroot/dev/console c 5 1mknod /nfsroot/dev/null c 1 3mknod /nfsroot/dev/tty1 c 4 1chmod +x /nfsroot/etc/inittabchmod +x /nfsroot/etc/init.d/rcS启动 QEMU
Section titled “启动 QEMU”允许连接网桥
allow br0前提条件:启动前需要已编译内核、准备好
/nfsroot、配置 NFS 导出、允许 QEMU 使用br0,并确认该虚拟机网络只连接到授权实验网络。
qemu-system-x86_64 \ -kernel ./arch/x86/boot/bzImage \ -append "root=/dev/nfs nfsroot=192.168.1.1:/nfsroot,vers=3,intr,nolock,rsize=1024,wsize=1024,tcp ip=192.168.1.10::192.168.1.1:255.255.255.0:clienthostname:eth0:off rw init=/linuxrc console=tty0 console=ttyS0" \ -nographic -netdev bridge,id=net0,br=br0 -device e1000,netdev=net0创建 resolv.conf 配置文件
nameserver 1.1.1.1内核的起始位置
Section titled “内核的起始位置”x86_64 架构下, 0x100200
- QEMU System Emulation documentation(访问日期:2026-05-31)
- Linux kernel documentation(访问日期:2026-05-31)
- exports(5) Linux man page(访问日期:2026-05-31)
- ip-link(8) Linux man page(访问日期:2026-05-31)