跳转至

QEMU软件在环

NextPilot支持Qemu和Simulation两种软件在环(SITL)测试方式

嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用 QEMU 等类似的虚拟机来模拟开发板。QEMU 是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板。为了方便大家在没有开发板的情况下体验 NextPilot,NextPilot,RT 提供了 QEMU 模拟的 ARM vexpress A9 开发板的板级支持包 (BSP)。

本文主要介绍在 Window 平台使用 QEMU 运行 NextPilot 工程,并介绍了如何使用虚拟网卡连接 QEMU 到网络。

准备工作

请先完成开发环境的安装和配置,尤其是ENV编译环境 + Tap虚拟网卡。

编译和运行工程

使用Env打开$nextpilot/bsp/qemu/qemu-vexpress-a9,并输入以下scons -j8编译工程

scons -j8

编译完成之后在终端继续输入qemu.bat,启动qemu模拟器中,并在模拟器中运行sitl-qemu-default.bin程序,Env 命令行界面显示 Nextpilot 系统启动过程中打印的初始化信息及版本号信息等。

:: qemu.bat 是 Window 批处理文件,主要包括 QEMU 的执行指令,

@echo off
:: 首次运行工程会创建一份空白的 sd.bin 文件,这是虚拟的 sd 卡,大小为 64M。
if exist sd.bin goto run
qemu-img create -f raw sd.bin 64M

:run
:: 用双核vexpress-a9运行sitl-qemu-default.bin程序,网卡为tap
qemu-system-arm -M vexpress-a9 -smp cpus=2
                 -kernel build/sitl-qemu-default.bin
                 -display none -serial stdio -sd sd.bin
                 -net nic -net tap,ifname=tap

注意事项:若电脑安装有 360 安全卫士会有警告,请点击允许程序运行。

运行 Finsh 控制台

Nextpilot 支持 Finsh,用户可以在命令行模式使用命令操作。输入 help 或按 tab 键可以查看所有支持的命令。如下图所示,左边为命令,右边为命令描述。

如下图所示,比如输入list_thread命令可以查看当前运行的线程,以及线程状态和堆栈大小等信息。输入list_timer可以查看定时器的状态。

输入 list_device 可以查看注册到系统的所有设备。

运行网络功能

注意事项

请一定先安装好虚拟网卡Tap,并确定qemu.bat文件中包含 -net nic -net tap,ifname=tap

查询IP地址

在 shell 中输入 ifconfig命令查看网络状态,正常获取到 IP 即表示网络驱动正常,配置工作完成,效果如下图所示:

注意事项

  • 当出现获取不到 IP 地址的情况时,先将以太网的共享关闭,然后再次打开即可。
  • 如果获取到 IP 是 10.0.x,x,是因为没有为 QEMU 添加启动参数 -net nic -net tap,ifname=tap 。
  • 虚拟机刚开始运行的时候并不会立刻获取到 IP 地址,有时需要等待几秒钟才会获取到 IP。
  • 关闭虚拟机可以按 Ctrl + 'C' 来结束程序运行。

运行PING工具

在 shell 中输入 ifconfig命令查看网络状态,正常获取到 IP 即表示网络驱动正常: