天天看點

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

qemu是github開源的,是以有興趣的可以自己去改造它增加新的仿真功能,比如支援更多的處理器,更多的外設等。由于windows上自己編譯源碼,好像有點麻煩,這裡就直接找現成的exe。主要3個地方有這樣的exe。它們都是修改了官方qemu的源碼編譯而來。

官方提供了qemu的exe安裝包

直接去官網下載下傳即可。Download QEMU - QEMU

優點:最穩定,各種體系的處理器的仿真都支援,但是主要為了支援能跑Linux這樣的高性能處理器的模拟仿真

缺點:對于單片機這樣的低性能處理器支援得不好,型号支援較少

為eclipse做插件的qemu的exe檔案

去這兒下載下傳 ​​https://github.com/xpack-dev-tools/qemu-arm-xpack/releases/​​

優點:由于官方qemu對stm32這些單片機型号支援太少了,這個就是特地對stm32等單片機大量支援了

缺點:把官方qemu閹割得隻支援stm32了,而且有些指令是獨有的,和官方qemu不相容了,比如--board

國産開源嵌入式系統RT-Thread的生态裡的exe檔案

官網 RT-Thread, RTOS, 物聯網作業系統 - RT-Thread物聯網作業系統

下載下傳它們的內建開發環境 RT-Thread Studio(這個IDE做得真不錯),該IDE會以sdk形式包含qemu.exe。支援arm a9闆子的qemu仿真,和stm32f4晶片的qemu仿真。而這個qemu.exe就是它們修改了官方qemu的源碼,支援了幾款stm32f4晶片後編譯得到的exe。不通過IDE,那麼這個exe單獨下載下傳位址在這兒 RT-Thread-Studio-Mirror/sdk-debugger-qemu

優點:由于官方qemu對stm32這些單片機型号支援太少了,這個就是增加了對stm32f4幾款單片機(不是闆級,而是晶片級,建立工程時候千萬注意别搞錯了)的支援

缺點:隻增加支援了stm32f4幾款闆子,希望以後進一步增加對stm32f1等的支援

如下圖,确實增加了這幾款常用的stm32:

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

總結:

由于官方提供的qemu對stm32支援不好,而eclipse插件版的qemu隻支援stm32,都不是很好的選擇,是以我們這裡選擇RT-Thread的生态裡qemu。

建立a9或者stm32f4的一個程式,且控制台輸出程式中的列印字元串的方法如下:

1. 打開RT-Thread Studio,看看SDK管理器,安裝如下幾個:

  • 安裝QEMU-VEXPRESS-A9(其實就是下載下傳一個模闆例程)
  • 關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出
  • 安裝晶片支援包STM32F4(這裡不用安裝針對闆級的stm32f4,因為這裡的qemu對stm32f4隻實作了晶片級仿真)
  • 關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出
  • 安裝仿真支援包QEMU(也就是說QEMU和J-Link硬體調試器同等地位,也就是cpu的仿真,不能對闆子仿真)
  • 關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

1. stm32f4程式仿真

建立一個通用項目(這個就是裸機工程),一定要選擇基于晶片(否則仿真時候控制台輸出不了程式中的列印資訊,而且時不時啟動失敗(f407能qemu成功調試,但是輸出不了資訊,f407根本就不能qemu成功啟動和調試))(雖然基于開發闆也能選擇f401闆子對應的qemu仿真,但是這個确實仿真不了,别被誤導了,能闆級仿真的隻有a9),下面的調試器選擇QEMU,模拟器會自動選擇正點原子的stm32f407-atk-explore闆子(這裡模拟器為什麼能自動選擇這個呢,因為我們剛剛下載下傳的RT-Thread的生态裡qemu就是支援了這幾款闆子,是以IDE會找最比對的直接給填上了)。我直接把這個工程編譯出來的elf檔案通過stlink下載下傳到我實際闆子上,序列槽完全正常的輸出的,這也說明這個qemu把stm32f407晶片核心模拟跟真實晶片一緻的了,和真實晶片的底層代碼完全相通的。

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

 建立完工程後,就得到了stm32f407ZG這個單片機的最簡單的裸機程式(main函數僅僅包含了列印)(是以,以此類推,我們想要獲得其它單片機的裸機程式,也是通過RT-Thread Studio這樣即可,是以這個IDE做得還真不錯,省得自己到處去找這些裸機程式了),直接點選建構,預設項目配置如下,不用任何修改

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

然後點選下載下傳,即可看到qemu中運作的這個程式,控制台輸出了程式中的列印資訊。 

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

其實認真看,我們會發現IDE其實就是給qemu發送了指令,實作的運作仿真:

C:/RT-ThreadStudio//repo/Extract/Debugger_Support_Packages/RealThread/QEMU/4.2.0.4/qemu-system-arm.exe -M stm32f407-atk-explorer -nographic  -kernel Debug/rtthread.bin

  -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檔案(含有調試資訊)都可以

如果是調試仿真,則指令如下:

C:/RT-ThreadStudio//repo/Extract/Debugger_Support_Packages/RealThread/QEMU/4.2.0.4/qemu-system-arm.exe -M stm32

f407-atk-explorer -nographic -S -s -kernel Debug/rtthread.elf

-S:代表不自動運作模拟(需要gdb連接配接之後進行操作)

-s:代表開放tcp1234作為遠端調試端口

這些選項的解釋,我們可以輸入qemu-system-arm.exe -help進行檢視,如下(全部選項都有解釋,如果沒有,說明該選項不存在,使用了就會報錯的):

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

此外,其實我們不用IDE,自己通過指令行視窗,其實也可以實作這樣下載下傳運作,如下(按crtl+c可以結束qemu仿真):

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

 這裡我把整個工程包含qemu-system-arm.exe這個打成一個壓縮包上傳了(因為裡面有makefile的,是以不需要IDE,也能自己編譯和運作了)

2. arm cortex-a9程式仿真

我們發現這個IDE裡不能建立a9的裸機工程,隻有帶了rtthread這個OS的工程,這也沒關系,因為OS的代碼不多,簡單易懂,自己認真看一下就能知道啟動過程,是以跟裸機工程也差不多。

這裡我們建立RT-Thread項目,這裡要選擇基于開發闆,因為rtthread的qemu支援這塊a9闆子的闆級仿真(官方qemu本身就支援這個的),而前面的stm32都是不能闆級仿真的(隻能基于晶片)。

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

然後,與上面步驟一樣,配置工程保持預設,建構,下載下傳即可運作

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出
關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

 其實,通過指令的話,下載下傳運作指令如下:

C:/RT-ThreadStudio/repo/Extract/Debugger_Support_Packages/RealThread/QEMU/4.2.0.4/qemu-system-arm.exe -M vexpresress-a9 --kernel Debug/rtthread.bin -nographic -show-cursor

關于windows上使用qemu分别仿真stm32和a9以及序列槽輸出

-show-cursor:顯示光标

 調試運作指令如下:

C:/RT-ThreadStudio/repo/Extract/Debugger_Support_Packages/RealThread/QEMU/4.2.0.4/qemu-system-arm.exe -M vexp

ress-a9 --kernel Debug/rtthread.elf -nographic -show-cursor -S -s

 這裡我把整個工程包含qemu-system-arm.exe(這個exe換成qemu官方的也是ok的,因為官方qemu原本就支援這個闆子了)這個打成一個壓縮包上傳了(因為裡面有makefile的,是以不需要IDE,也能自己編譯和運作了),大家可以去這裡下載下傳 ​​​​