码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • qemu的详细资料大全(入门必看!!!)


    qemu介绍

    qemu是一个虚拟机,或者说是模拟器,类似VMware。主要对单片机或者嵌入式常用的一些处理器模拟,嵌入式开发中使用广泛,比如arm,sparc,riscv等架构处理器。

    对于每种架构处理器的模拟,qemu都是一个单独的exe,比如

    arm的:qemu-system-arm.exe(它里面会细分为具体的arm处理器,比如cortex-m内核,cortex-a内核)

    riscv的: qemu-system-riscv.exe

    官网:QEMU

    官网包含了 详细使用文档下载,源码下载(喜欢折腾的自己编译呗,自己编译好像还得依赖很多库,而且都是Linux上的编译教程,windows上的没发现有人搞),或者编译好的安装包下载。支持Linux,windows系统,但是Linux系统中用得最多。这里我要做windows里的IDE,所以只研究qemu在Windows上的使用。

    qemu使用

    qemu的使用方式:

    QEMU的基本使用方法(MIPS)_子曰小玖的博客-CSDN博客_qemu使用教程

    QEMU入门指南_Font Tian的博客-CSDN博客_qemu

    一文读懂QEMU虚拟机_Font Tian的博客-CSDN博客_qemu虚拟机是什么

    qemu教程_QEMU实例教程_cunjiu9486的博客-CSDN博客

    也就是给这些后台运行的qemu-system-xx.exe发命令来使用,类似gcc,gdb,clang这些的使用方式。

    一般使用形式(例如arm):

    qemu-system-arm -M xilinx-zynq-a9 -cpu cortex-a9 -nographic -kernel $BUILD_DIR/mm.elf -m 512M -s -S

    • 使用机器 xilinx-zynq-a9
    • 处理器 cortex-a9
    • 因为这是裸机,所以可执行文件是一个自包含的ELF文件
    • -m 512M 表示平台具有512 MiB的RAM
    • -s 是的快捷方式 -gdb tcp::1234 (也就是说qemu自带了gdbserver,可以让gdb连它)
    • -S 表示在启动时冻结CPU

    除了可以直接命令行操控qemu外,还能用一些通用IDE去可视化操作它,比如eclipse(用QEMU模拟调试裸机ARM64汇编,支持gdb单步调试_科学边界的博客-CSDN博客_qemu单步调试),vscode(https://hkt999.medium.com/nuttx-%E7%9A%84%E7%92%B0%E5%A2%83%E6%9E%B6%E8%A8%AD-qemu-vscode-%E9%96%8B%E7%99%BC-posix-%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1-42a342fbb81b)等

    如果想知道qemu关于arm cortex-a9架构处理器的运行方式,qemu模拟A9,如何一步步写裸机(网上其它的大部分博客都是直接启动uboot和Linux的,参考价值不大),可以看下面这些文章:

    • Alice OS 0-Preparation | SilentMing's Gensokyo (这个人写的比较详细,一步步怎么做,但是写到mmu时候,就没有再写了,有点可惜,但是也可以作为不错的参考)
    • https://descent-incoming.blogspot.com/2017/05/for-qemu-armvexpress-a9-0-hello-world.html (支持a9,但是写了一个好像不是很完善的启动代码)
    • GitHub - umanovskis/baremetal-arm: An ebook about bare-metal programming for ARM (支持a9,写得比较全,里面还给了个对应的pdf,太贴心了,必看!!!)
    • Embedded Programming with the GNU Toolchain (这个也是详细教程,但是不确定是qemu模拟哪款处理器)
    • Qemu Xilinx Zynq A9 baremetal(Xilinx Zynq A9是一款双核a9,最近几年非常火爆,可以看xilinx它官方对qemu的支持情况,裸机编写都有)

    qemu的stm32扩展

    如果觉得官方qemu支持的板子不够多,qemu因为是开源的,所以可以自己修改源码,添加一些驱动代码啥的,重新编译成可执行文件,定制自己要模拟的板子。

    主要是对支持arm的stm32做了定制,其实最新的官方qemu已经支持很多的cortex-m内核的stm32了,自己用,其实就用官方的就行。

    1. 专门对stm32各种板子(Olimex STM32 p103这板子),做了全面的模拟,较大的增强了qemu:

    • qemu的STM32虚拟化环境_南波儿万的博客-CSDN博客_qemu模拟stm32 (使用教程)
    • https://github.com/beckus/qemu_stm32 (魔改的qemu源码)
    • GitHub - beckus/stm32_p103_demos: A suite of demo applications for the Olimex STM32 P103 Development Kit(一些demo程序)

    2. 专门针对stm32,但是便于与eclipse做了集成的一个版本的魔改 qemu-system-gnuarmeclipse.exe (即GNU MCU Eclipse QEMU,完全支持半主机模式,看官方使用教程)(同样支持了 Olimex STM32 p103这个板子),这个提供了编译好的exe下载
    https://github.com/xpack-dev-tools/qemu-arm-xpack/

    这儿讲了这个emu-system-gnuarmeclipse.exe命令行选项的详细使用 (是qemu官方版选项的子集,针对stm32有些特定的选项了)The GNU MCU Eclipse QEMU command line options | The xPack Build Framework

    3. 针对stm32的qemu的博客:如何对基于STM32 Soc的STM32-P103进行QEMU仿真 - STM32 - 电子技术论坛 - 广受欢迎的专业电子论坛!

    总结:利用编译好的exe即可,免得自己折腾。用 emu-system-gnuarmeclipse.exe,板子选择 Olimex STM32 p103,demo也选择上面的Olimex STM32 p103(一些demo程序)

    其它的一些参考博客:

    • qemu最简单的跑stm32程序:qemu上跑stm32 模拟stm32开发板 - 连任 - 博客园
    • 教我们如何编译:https://www.jianshu.com/p/9df79a090663
    • 如果没有在exe中找到自己钟意的板子,那么这样启动qemu吧:qemu-system-arm -cpu cortex-m3 -nographic -monitor null -serial null -semihosting -kernel main.elf,ST Community
    • 详细的介绍qemu运行stm32,使用 QEMU 仿真 STM32 CubeMX 生成的Makefile项目 - - 21ic电子技术开发论坛

    注意:qemu中如果想输出程序打印信息,需要使用半主机模式:半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。 例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。 

  • 相关阅读:
    麒麟v10安装mysql(ARM架构)
    HDU 2602: Bone Collector ← 0-1背包问题
    跨境电商ozon自养号测评有什么优势?
    CDN策略好坏的重要性
    Windows进程间利用管道通信
    SQL LIKE 运算符
    路由缓存问题 | vue-router的导航守卫
    JVM 内存溢出 java heap space
    功能测试:核心原理、挑战以及解决之道
    [杂谈]-快速了解半波和全波整流
  • 原文地址:https://blog.csdn.net/kangkanglhb88008/article/details/126299695
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号