QEMU/Renode 开发嵌入式程序

2023-12-13 13:52:12

参考链接;

在Ubuntu18.04下安装qemu,搭建u-boot+Linux+NFS学习环境 - 知乎 (zhihu.com)

QEM Install

Sudo apt install qemu-system

xin@xin-dde:~$ qemu-system-arm -cpu help

Available CPUs:

? arm1026

? arm1136

? arm1136-r2

? arm1176

? arm11mpcore

? arm926

? arm946

? cortex-a15

? cortex-a7

? cortex-a8

? cortex-a9

? cortex-m0

? cortex-m3

? cortex-m33

? cortex-m4

? cortex-m55

? cortex-m7

? cortex-r5

? cortex-r5f

? max

? pxa250

? pxa255

? pxa260

? pxa261

? pxa262

? pxa270-a0

? pxa270-a1

? pxa270

? pxa270-b0

? pxa270-b1

? pxa270-c0

? pxa270-c5

? sa1100

? sa1110

? ti925t

qemu-system-arm -M help

虚拟机启动脚本

qemu-system-arm -M vexpress-a9 -m 512M -nographic -dtb ./vexpress-v2p-ca9.dtb -kernel ./zImage -append “root=/dev/mmcblk0 rw console=ttyAMA0” -sd rootfs.ext3

模拟了vexpress-a9这个机器,内存512M,没有图形界面,Linux的kernel是./zImage, 设备树为vexpress-v2p-ca9.dtb文件,还有SD卡为rootfs.ext3文件. 还有一个附加的而启动指令,制定了console输出的端口。

假设模拟一个STM32F4 的开发版,可以参考官方板子netduinoplus2 使用的是STM32F405RGT6

qemu-system-arm -M netduinoplus2 -nographic -kernel ./stm32_prj.elf -gdb tcp::3333 -serial tcp::7777,server

这样就可以直接运行起来一个STM32F05兼容的模拟器了,它的外围IO和端口参考netduinoplus2

-M:指定模拟哪个目标板,这个一定得是qemu支持的,否则会提示错误。RT-Thread的生态里qemu是支持了这个stm32f407-atk-explorer板子的了

-nographic:告诉qemu无界面启动(因为默认有一个类似VMware那样的界面),这个非常重要,这样程序中串口打印信息(printf)才能输出到控制台来,否则不会有任何输出。

qemu help的解释:-nographic????? disable graphical output and redirect serial I/Os to console),所以我们别去调用什么-serial stdio啥的命令,否则也不会输出。

-kernel:指定程序镜像文件,这个可以是bin文件,elf文件(含有调试信息)都可以

-S:代表不自动运行模拟(需要gdb连接之后进行操作)

-s:代表开放tcp1234作为远程调试端口

由于官方版本对board和CPU的支持有限,不能完全支持所有的芯片,所以有两个路子:

  1. 使用第三方版本qemu, 比如RT-Thread IDE自带的。(对STM32F4有官方支持)
  2. xPack QEMU Arm 项目,How to install the xPack QEMU Arm binaries?
  3. 自己定制Board和CPU。(这个难度较高)

然后就可以愉快地玩耍了!!

但是,如果板子上有的硬件和你自己的不符,怎么办???

所以,如果真的做产品级别的开发模拟,就需要走第三个路子,自己完成自己的板子的开发。

对于嵌入式Linux而言,因为大部分是软件内容,一般模拟起来相对比较容易,如果是STM32一类的MCU,如果原生不支持,就一定需要自己定制了。这个时候,可以考虑直接上硬件进行编码测试,因为软件定制成本也不低。

如果是需要模拟一整套x86/arm/risc-v系统,可以考虑使用Visual Box/VMware进行测试。

定制qmeu board

分类: 基于qemu从零开始构建riscv64的嵌入式系统 | TimerのBlog (yanglianoo.github.io)

qemu中注册自定义的板子需要向qemu中添加源码,然后重新编译。

  • 添加板子信息
  • 初始化CPU和ROM信息
  • 构建DTS设备树
  • 中断、Uart、Flash太多了…

建议还是在xPack QEMU的基础上进行修改。

qemu源码二次开发自定义开发板--Apple的学习笔记 - 简书 (jianshu.com)

如何利用qemu搭建SOC protoype:80行代码实现一个Cortex M4 模拟器_qemu模拟soc_MyeDy的博客-CSDN博客

Renode 替代

QEMU虽好,但是对嵌入式支持不是很到位,有一个renode的类似平台,只支持嵌入式开发和board定制,非常不错。

特别是STM32F4等最新的板子支持,都有现成的spec文件。

支持的板子和芯片列表:Supported boards - Renode - documentation

使用教程参考:https://blog.csdn.net/deliapu/category_11364490.html

文章来源:https://blog.csdn.net/bbdxf/article/details/134825080
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。