Windows11+WSL2+Ubuntu22.04环境下Qemu虚拟VExpress-A9开发板搭建全流程(含避坑指南)

发布时间:2026/5/22 4:53:08

Windows11+WSL2+Ubuntu22.04环境下Qemu虚拟VExpress-A9开发板搭建全流程(含避坑指南) Windows11WSL2Ubuntu22.04环境下Qemu虚拟VExpress-A9开发板搭建全流程含避坑指南在嵌入式开发领域拥有一块真实的开发板固然理想但受限于成本、空间或实验灵活性越来越多的开发者开始转向虚拟化解决方案。本文将手把手带你完成从零开始搭建Qemu虚拟开发环境的全过程特别针对Windows11平台结合WSL2和Ubuntu22.04子系统打造一个高效、稳定的嵌入式开发沙盒。1. 环境准备与基础配置1.1 WSL2安装与优化微软的WSL2Windows Subsystem for Linux已经成为了开发者在Windows环境下使用Linux工具链的首选方案。相比传统虚拟机它提供了近乎原生的性能体验。以下是关键步骤启用WSL功能dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行后重启系统然后在PowerShell中设置WSL2为默认版本wsl --set-default-version 2安装Ubuntu22.04通过Microsoft Store获取Ubuntu22.04 LTS版本首次启动会提示创建用户名和密码磁盘空间优化 默认安装位置在C盘可能导致空间紧张迁移到其他分区的操作如下wsl --shutdown wsl --export Ubuntu D:\ubuntu_backup.tar wsl --unregister Ubuntu mkdir D:\wsl_ubuntu wsl --import Ubuntu D:\wsl_ubuntu D:\ubuntu_backup.tar --version 2提示迁移完成后需要手动设置默认用户执行ubuntu config --default-user 你的用户名1.2 Ubuntu系统调优进入Ubuntu环境后首先进行基础配置更换软件源sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i shttp://.*archive.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo sed -i shttp://.*security.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo apt update sudo apt upgrade -y安装基础工具sudo apt install -y build-essential git vim net-tools openssh-server2. 交叉编译工具链配置嵌入式开发离不开交叉编译环境针对ARM架构的VExpress-A9开发板我们需要准备对应的工具链。2.1 安装ARM工具链Ubuntu官方仓库提供了多个版本的ARM工具链我们选择稳定版本sudo apt install -y gcc-arm-linux-gnueabi g-arm-linux-gnueabi验证安装是否成功arm-linux-gnueabi-gcc -v预期输出应显示gcc版本信息类似gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)2.2 补充开发工具嵌入式开发还需要一系列辅助工具sudo apt install -y flex bison libncurses-dev libssl-dev u-boot-tools device-tree-compiler3. Qemu环境搭建3.1 安装Qemu及其依赖Qemu是本次环境的核心组件安装前需要确保所有依赖就位sudo apt install -y zlib1g-dev libglib2.0-dev libtool libsdl1.2-dev \ libpixman-1-dev autoconf ninja-build pkg-config然后安装Qemu本体sudo apt install -y qemu-system-arm qemu-utils验证Qemu安装qemu-system-arm --version正常应输出类似QEMU emulator version 6.2.0 (Debian 1:6.2dfsg-2ubuntu6.12)3.2 编译定制版Qemu可选虽然可以直接使用仓库版本但有时我们需要特定功能的Qemugit clone https://git.qemu.org/git/qemu.git cd qemu git checkout v6.2.0 ./configure --target-listarm-softmmu --enable-debug make -j$(nproc) sudo make install4. VExpress-A9开发板环境配置4.1 准备系统组件VExpress-A9是ARM提供的参考开发板我们需要准备三个关键组件U-Bootgit clone https://github.com/u-boot/u-boot.git cd u-boot git checkout v2022.07 make ARCHarm CROSS_COMPILEarm-linux-gnueabi- vexpress_ca9x4_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabi- -j$(nproc)Linux内核git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git cd linux git checkout v5.10.186 make ARCHarm CROSS_COMPILEarm-linux-gnueabi- vexpress_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabi- -j$(nproc)根文件系统基于BusyBoxwget https://busybox.net/downloads/busybox-1.36.1.tar.bz2 tar xf busybox-1.36.1.tar.bz2 cd busybox-1.36.1 make ARCHarm CROSS_COMPILEarm-linux-gnueabi- defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabi- menuconfig # 在配置界面中选择Build static binary (no shared libs) make ARCHarm CROSS_COMPILEarm-linux-gnueabi- -j$(nproc) make ARCHarm CROSS_COMPILEarm-linux-gnueabi- install4.2 构建根文件系统创建基本的根文件系统结构mkdir -p rootfs/{bin,sbin,etc,proc,sys,usr/{bin,sbin},dev} cp -a busybox-1.36.1/_install/* rootfs/创建初始脚本cat rootfs/init EOF #!/bin/sh mount -t proc none /proc mount -t sysfs none /sys echo -e \nWelcome to VExpress-A9 Virtual Machine\n exec /bin/sh EOF chmod x rootfs/init制作initramfscd rootfs find . | cpio -H newc -ov --owner root:root ../initramfs.cpio cd .. gzip initramfs.cpio5. 整合运行与调试5.1 启动Qemu虚拟机现在可以启动我们的虚拟开发板了qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot/u-boot \ -nographic -sd ubuntu.img -append root/dev/mmcblk0 rw consolettyAMA0 \ -initrd initramfs.cpio.gz常用参数说明参数说明-M vexpress-a9指定机器类型为VExpress-A9-m 512M设置内存大小为512MB-kernel指定U-Boot或内核镜像路径-nographic不使用图形界面-sd指定虚拟SD卡镜像-append传递给内核的启动参数-initrd指定初始内存文件系统5.2 常见问题解决网络连接问题 如果需要在Qemu中使用网络添加以下参数-net nic -net tap,ifnametap0,scriptno,downscriptno同时需要在主机上配置TAP设备。性能优化 启用KVM加速需主机CPU支持-enable-kvm -cpu host调试支持 如果需要调试内核添加-S -s然后通过gdb连接1234端口进行调试。6. 进阶配置与开发技巧6.1 持久化存储配置创建虚拟磁盘并格式化为ext4qemu-img create -f raw ubuntu.img 4G mkfs.ext4 ubuntu.img挂载虚拟磁盘到主机sudo mount -o loop ubuntu.img /mnt # 复制文件系统内容到/mnt sudo umount /mnt6.2 自动化脚本示例创建启动脚本run_vexpress.sh#!/bin/bash KERNELlinux/arch/arm/boot/zImage DTBlinux/arch/arm/boot/dts/vexpress-v2p-ca9.dtb ROOTFSrootfs.cpio.gz qemu-system-arm -M vexpress-a9 -m 512M -kernel $KERNEL \ -dtb $DTB -initrd $ROOTFS -append consolettyAMA0 \ -serial stdio -net nic -net user6.3 图形界面支持如果需要显示开发板的图形输出移除-nographic参数并添加-display gtk,glon7. 开发工作流建议代码编辑在Windows端使用VS Code通过Remote-WSL扩展连接到WSL环境版本控制在WSL中配置git与GitHub/GitLab等平台交互构建系统使用makefile管理项目构建流程调试工具gdb进行程序调试Qemu内置的监视器CtrlA C进入串口输出调试信息在实际项目中我发现将Qemu启动参数保存在单独的脚本文件中最为方便可以快速切换不同的配置。对于频繁修改的内核模块开发建议使用NFS挂载根文件系统避免反复制作镜像。

相关新闻