FreeRTOS基础篇(二)——QEMU

前言:
   本篇文章介绍QEMU在linux环境下的使用。

1 介绍

  QEMU(Quick Emulator)是一款开源的硬件虚拟化工具,支持全系统模拟(Full System Emulation)和用户模式模拟(User Mode Emulation)。它能够模拟多种 CPU 架构(如 x86、ARM、RISC-V、MIPS 等),并运行未经修改的操作系统或应用程序,广泛应用于嵌入式开发、系统测试和跨平台软件开发。
  QEMU 的核心功能:

功能 说明
全系统模拟 模拟整个计算机(CPU、内存、外设),可运行完整操作系统(如 Linux、FreeRTOS)。
用户模式模拟 仅模拟 CPU,允许在一种架构(如 x86)上运行另一种架构(如 ARM)的应用程序。
多架构支持 支持 x86、ARM、RISC-V、MIPS、PowerPC、SPARC 等 30+ 种 CPU 架构。
设备模拟 提供虚拟硬盘、网卡、USB、GPU、串口等设备,适用于嵌入式开发调试。
动态二进制翻译(TCG) 将目标架构指令动态翻译成本机指令,提高执行效率。
与 KVM 结合 在 Linux 上利用 KVM(Kernel-based Virtual Machine)加速虚拟化,接近 原生性能。

2 QEMU使用

2.1 linux编译

  FreeRTOS/Demo目录下提供了丰富的例程,在linux下模拟开发,以Demo CORTEX_MPU_M3_MPS2_QEMU_GCC 举例。
  该工程依赖于FreeRTOS内核,需要更新以下子仓库,否则编译报错缺少文件。

1
2
3
[submodule "FreeRTOS/Source"]
path = FreeRTOS/Source
url = https://github.com/FreeRTOS/FreeRTOS-Kernel.git

  安装qemu编译环境,执行以下指令安装。

1
2
3
sudo apt-get update
sudo apt install libncurses5
sudo apt-get install -y qemu qemu-system-arm

  下载和安装Arm工具。

1
2
3
4
cd ~
curl https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -o gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
tar -xjvf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
rm gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2

  添加Arm tools到终端的临时环境变量。

1
export PATH="$HOME/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH"

  编译出二进制文件。

1
2
cd ./FreeRTOS/FreeRTOS/Demo/CORTEX_MPU_M3_MPS2_QEMU_GCC
make

make.png

  如果要编译Debug版本,则使用以下指令。

1
make DEBUG=1

2.2 运行

  编译成功后可看到生成二进制文件 ./build/RTOSDemo.axf
  在qemu虚拟环境中运行二进制文件。

1
sudo qemu-system-arm -machine mps2-an385 -monitor null -semihosting --semihosting-config enable=on,target=native -kernel ./build/RTOSDemo.axf -serial stdio -nographic -s -S

  启用GDB调试则执行指令。

1
arm-none-eabi-gdb -q ./build/RTOSDemo.axf