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的支持有限,不能完全支持所有的芯片,所以有两个路子:
- 使用第三方版本qemu, 比如RT-Thread IDE自带的。(对STM32F4有官方支持)
- xPack QEMU Arm 项目,How to install the xPack QEMU Arm binaries?
- 自己定制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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!