【调试记录】Ubuntu下QEMU模拟运行FreeRTOS
本文详细介绍了在Ubuntu 22.04环境下使用QEMU模拟器运行和调试FreeRTOS实时操作系统的完整流程。主要内容包括:1) QEMU的编译安装及常见问题解决方法;2) FreeRTOS源码获取与ARM Cortex-M3示例编译;3) 通过QEMU运行FreeRTOS的基本命令及效果展示;4) 利用GDB进行内核调试的方法。该指南为开发者提供了无需硬件即可验证RTOS应用的便捷方案,特别
前言
FreeRTOS 是嵌入式领域广泛使用的实时操作系统,QEMU 则是一款强大的开源模拟器,无需硬件即可运行目标代码。将二者结合,开发者可在 PC 上快速验证 RTOS 应用并进行源码级调试。本文基于 Ubuntu 22.04,记录了 QEMU 编译安装、FreeRTOS 源码获取、ARM Cortex‑M3 示例的编译与运行,并附常见问题解决方法,方便后续查看。
环境安装
安装基础依赖包
打开终端,执行以下命令安装编译QEMU所需的基础工具:
sudo apt update
sudo apt install build-essential git libglib2.0-dev libpixman-1-dev flex bison
- build-essential:包含gcc、make等编译工具
- git:用于下载源码
- libglib2.0-dev、libpixman-1-dev:QEMU依赖的库
- flex、bison:词法/语法分析器
编译安装QEMU
下载QEMU源码
建议从QEMU官网下载最新的稳定版,或者直接clone官方仓库(选择稳定分支)。
cd ~
mkdir -p study/qemu
cd study/qemu
git clone https://gitlab.com/qemu-project/qemu.git --branch stable-8.2 --depth 1
cd qemu
这里选择8.2稳定分支(可根据需要选择其他版本)。
配置QEMU
运行配置脚本:
./configure
错误1:Python ensurepip模块缺失
*** Ouch! *** Python's ensurepip module is not found.
解决方案:安装python3-venv包。
sudo apt install python3-venv
错误2:tomli库缺失
found no usable tomli, please install it
解决方案:安装python3-tomli。
sudo apt install python3-tomli
错误3:Ninja构建工具未找到
ERROR: Cannot find Ninja
解决方案:安装ninja-build。
sudo apt install ninja-build
编译安装QEMU
make -j$(nproc)
make install
安装完成后,验证QEMU是否可用:
qemu-system-arm --version
如果显示版本信息,则安装成功。
FreeRTOS下载编译
获取FreeRTOS源码
FreeRTOS托管在GitHub上,使用git clone下载(包含子模块,注意–recurse-submodules)。
cd ~/study/freertos
git clone https://github.com/FreeRTOS/FreeRTOS.git --recurse-submodules --depth 1
这里使用–depth 1只下载最新版本,减少下载时间。
编译FreeRTOS示例(MPS2 + ARM Cortex-M3)
进入针对QEMU的MPS2开发板示例目录,执行make编译。
cd FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/build/gcc/
make
编译成功后,生成的可执行文件位于output/RTOSDemo.out。
使用QEMU运行FreeRTOS
基本运行命令
在output目录下执行以下命令:
cd output
qemu-system-arm -machine mps2-an385 -cpu cortex-m3 -kernel RTOSDemo.out -nographic
- -machine mps2-an385:指定模拟MPS2开发板(AN385型号)
- -cpu cortex-m3:指定CPU为Cortex-M3
- -kernel RTOSDemo.out:加载编译好的内核镜像
- -nographic:不使用图形界面,所有输出到终端
如果希望将串口输出重定向到终端,可加上-serial stdio,但需要注意可能和-nographic冲突。推荐使用-serial mon:stdio,既能看串口输出,又能进入QEMU监视器(Ctrl+A C)。
qemu-system-arm -machine mps2-an385 -cpu cortex-m3 -kernel RTOSDemo.out -nographic -serial mon:stdio
运行效果
Message received from task
Message received from task
Message received from task
Message received from task
Message received from task
Message received from task
Message received from task
Message received from software timer
Message received from task
Message received from task
Message received from task
...
使用GDB调试FreeRTOS
QEMU内置了GDB服务器,可以方便地调试内核。
启动带GDB服务的QEMU
qemu-system-arm -machine mps2-an385 -cpu cortex-m3 -kernel RTOSDemo.out -nographic -s -S
- -s: shorthand for -gdb tcp::1234,启动GDB服务监听1234端口
- -S: 启动时暂停CPU,等待GDB连接
连接GDB
另开一个终端,使用交叉编译工具链中的GDB(需要安装gdb-multiarch或arm-none-eabi-gdb)。
安装GDB:
sudo apt install gdb-multiarch
连接:
gdb-multiarch RTOSDemo.out
(gdb) target remote localhost:1234
(gdb) continue
现在可以设置断点、单步执行、查看变量等。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)