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的支持情況,裸機編寫都有)
 
(對了順便說一下,這個官方的qume雖然支持幾個stm32板子,但是串口stm32程序輸出不到控制臺的。想輸出到控制臺,可以看我別的qemu文章,你一定會有收獲的)
qemu的stm32擴展
如果覺得官方qemu支持的板子不夠多,qemu因為是開源的,所以可以自己修改源碼,添加一些驅動代碼啥的,重新編譯成可執行文件,定制自己要模擬的板子。
主要是對支持arm的stm32做了定制,其實最新的官方qemu已經支持很多的cortex-m內核的stm32了,自己用,其實就用官方的就行。
1. 專門對stm32各種板子(Olimex STM32 p103這板子),做了全面的模擬,較大的增強了qemu:(對了順便說一下,這個的qume的串口輸出不到控制臺,原作者自己也說了不知道為什么,而且多個博客也看到有人說printf無效的。想輸出到控制臺,可以看我別的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. rtthread的qemu,增加了幾個stm32f4的板子的支持(主要是stm32程序的串口在控制臺輸出了),做得不錯,看我這個博客?關于windows上使用qemu分別仿真stm32和a9以及串口輸出_標biao的博客-CSDN博客
RT-Thread-Studio-Mirror/sdk-debugger-qemu?
針對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(),來使用主機的屏幕和鍵盤,而不是在目標系統上配備屏幕和鍵盤。?
總結
以上是生活随笔為你收集整理的qemu的详细资料大全(入门必看!!!)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 20190503(cmake安装,利用l
 - 下一篇: 评估方法提高深度学习模型泛化能力