当前位置: 首页 > news >正文

Windows11+WSL2+Ubuntu22.04环境下,5分钟搞定Qemu虚拟VExpress-A9开发板环境配置

Windows 11 + WSL2 + Ubuntu 22.04 极速搭建 QEMU 虚拟开发环境指南

对于嵌入式开发者而言,拥有一套随时可用的开发环境至关重要。本文将带你快速在 Windows 11 系统上,通过 WSL2 和 Ubuntu 22.04 搭建完整的 QEMU 虚拟开发环境,无需实体开发板即可开始嵌入式 Linux 开发之旅。

1. 环境准备与 WSL2 配置

在开始之前,确保你的 Windows 11 系统已启用 WSL2 功能。WSL2 提供了接近原生 Linux 的性能,非常适合开发环境搭建。

检查 WSL 版本

wsl --list --verbose

如果显示版本为 1,可以通过以下命令升级到 WSL2:

wsl --set-version Ubuntu 2

提示:建议将 WSL2 安装在非系统盘,避免占用 C 盘空间。可以使用wsl --exportwsl --import命令进行迁移。

2. Ubuntu 22.04 基础环境配置

启动 WSL2 中的 Ubuntu 22.04 后,首先更新软件源以获得最新的软件包:

sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y

安装基础开发工具链:

sudo apt install -y build-essential git vim net-tools

3. 交叉编译工具链安装

针对 ARM 架构的开发板,我们需要安装交叉编译工具链:

sudo apt install -y gcc-arm-linux-gnueabi g++-arm-linux-gnueabi

验证安装是否成功:

arm-linux-gnueabi-gcc --version

输出应显示类似以下信息:

gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

4. QEMU 安装与配置

QEMU 是一款功能强大的开源模拟器,支持多种架构的开发板模拟。安装 QEMU 及其依赖:

sudo apt install -y qemu-system-arm qemu-utils

安装完成后,验证 QEMU 版本:

qemu-system-arm --version

5. 准备开发板镜像

VExpress-A9 是 QEMU 支持的一款经典 ARM 开发板模型。我们需要准备以下组件:

  • U-Boot:引导加载程序
  • Linux 内核:操作系统核心
  • 根文件系统:包含基本命令和库

获取 Linux 内核

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.186.tar.xz tar xvf linux-5.10.186.tar.xz

编译内核

cd linux-5.10.186 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j$(nproc)

6. 创建根文件系统

使用 BusyBox 创建最小根文件系统:

wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2 tar xvf busybox-1.36.1.tar.bz2 cd busybox-1.36.1 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig

在配置界面中,确保选中以下选项:

Settings -> Build static binary (no shared libs)

然后编译并安装:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j$(nproc) make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install

7. 启动 QEMU 虚拟开发板

准备好所有组件后,可以使用以下命令启动 VExpress-A9 开发板:

qemu-system-arm -M vexpress-a9 -m 512M \ -kernel linux-5.10.186/arch/arm/boot/zImage \ -dtb linux-5.10.186/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \ -append "root=/dev/mmcblk0 console=ttyAMA0" \ -sd rootfs.img \ -nographic

注意:首次运行可能需要等待较长时间初始化系统。成功启动后,你将看到 Linux 登录提示符。

8. 开发环境优化技巧

为了提高开发效率,可以考虑以下优化措施:

  • 共享文件夹:在 WSL2 和 Windows 之间设置共享目录
  • SSH 访问:配置 SSH 服务以便从 Windows 终端访问
  • 自动化脚本:创建启动脚本简化 QEMU 启动流程

设置共享文件夹

sudo mkdir /mnt/wsl/shared sudo mount -t drvfs '\\wsl$\Ubuntu\home' /mnt/wsl/shared

配置 SSH 服务

sudo apt install -y openssh-server sudo service ssh start

9. 常见问题排查

遇到问题时,可以尝试以下解决方案:

  1. QEMU 启动失败

    • 检查内核镜像路径是否正确
    • 确保设备树文件与开发板型号匹配
  2. 文件系统无法挂载

    • 验证 rootfs.img 是否已正确创建
    • 检查内核是否支持对应文件系统类型
  3. 网络连接问题

    • QEMU 默认使用用户模式网络
    • 如需更复杂网络配置,可使用 TAP 设备

启用 QEMU 网络

qemu-system-arm -M vexpress-a9 -m 512M \ -kernel zImage -dtb vexpress-v2p-ca9.dtb \ -append "root=/dev/mmcblk0 console=ttyAMA0" \ -sd rootfs.img \ -net nic -net user,hostfwd=tcp::2222-:22 \ -nographic

10. 进阶开发建议

掌握了基础环境搭建后,可以进一步探索:

  • 调试内核:使用 GDB 进行内核调试
  • 设备驱动开发:为虚拟开发板添加自定义设备
  • 系统性能分析:使用 QEMU 内置监控接口

内核调试示例

qemu-system-arm -M vexpress-a9 -m 512M \ -kernel zImage -dtb vexpress-v2p-ca9.dtb \ -append "root=/dev/mmcblk0 console=ttyAMA0 kgdboc=ttyAMA0,115200" \ -sd rootfs.img \ -nographic -S -s

在另一个终端中启动 GDB:

arm-linux-gnueabi-gdb linux-5.10.186/vmlinux (gdb) target remote :1234
http://www.jsqmd.com/news/519160/

相关文章:

  • 开源AI神器OpenClaw(小龙虾)保姆级部署全解析:零付费、零代码,人人可上手的本地AI助手
  • [ZJCTF 2019]EasyHeap
  • Ubuntu14.04 Samba共享文件夹Windows访问失败的5个常见原因及解决方案
  • CC2530 ZigBee无线组网实战:从ZStack协议栈到智能农业应用
  • 从路径遍历到RCE:深度剖析Ollama CVE-2024-37032漏洞原理与利用链
  • Wireshark网卡列表消失?5分钟搞定NPCAP驱动加载问题
  • 探索A*、JPS+算法在多机器人与单机器人场景下结合DWA的改进与对比
  • 基于三次多项式的机械臂轨迹优化与MATLAB实现
  • Win10蓝屏CRITICAL_PROCESS_DIED:从错误诊断到系统修复全流程解析
  • 【银河麒麟高级服务器操作系统】安全配置基线实战:从问题定位到参数调优的深度解析
  • Vue3 + Element Plus 表格查询规范:条件管理、分页联动 + 避坑,标准化写法|表单与表格规范篇
  • 基于MBD的电动汽车VCU应用层软件:从模型到实车的V流程实践
  • 三菱SLMP通讯协议在工业自动化中的高效数据交换实践
  • ESXi 7.0 + Ubuntu 22.04 保姆级配置:从虚拟机创建到SSH内网穿透全流程
  • simulink模型燃料电池空气路建模与控制 包括:燃料电池电堆模型(阴极,阳极,水传递
  • 图像检索技术选型实战指南:从理论到落地的全景解析
  • AGV-WCS调度系统参考源码 功能比较全面的AGV调度系统,源码+数据库+讲义; C#语言
  • 突破“黑盒”与数据瓶颈:物理信息神经网络(PINN)重构科学计算新范式
  • 嵌入式内存管理“潜规则”:从.data/.bss段搬运,看ld脚本如何影响启动速度和功耗
  • 20-基于模型预测控制的海洋机器人协同路径跟踪控制:多智能体一致性及事件触发通信(ETC)的M...
  • 【笔试真题】- 美团-2026.03.21-算法岗
  • 手机也能做PCB设计?这款Droid PCB APP让你随时随地搞定电路板布局
  • php方案 io_uring 与 PHP 读文件
  • 致命疏漏:CVE-2026-27944撕开Nginx UI防线,未授权泄露背后的安全警示
  • 论文降AI后怎么检查专业术语有没有被改?逐项检查清单分享 - 还在做实验的师兄
  • 智赋金融 筑路未来——AI银行的中国实践、全球格局与进化路径
  • 永磁同步电机滑模观测器的无感控制仿真探索
  • 操作系统——程序、进程、线程
  • php方案 Direct I/O(O_DIRECT)应用场景如何在 PHP 中通过 FFI 实现并处理扇区对齐限制?
  • 自动驾驶避坑指南:开放空间规划算法在自主泊车中的5大常见问题