QEMU/Renode 开发嵌入式程序

参考链接;

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值