qemu虛化第二輪學習環(huán)境搭建--Apple的學習筆記

一笛求,前言

無意間看到了qemu的文章柱宦,就想到qemu我之前玩過的,還定制了自己的虛擬開發(fā)板扶歪。當時主要學習了glib事件驅(qū)動模型及做了一個led顯示,用了sdl2顯示框架及API。而實際的kvm仿真連接到真實的io功能并沒有使用善镰,僅了解了通過io會觸發(fā)中斷通知妹萨,然后在執(zhí)行io處理函數(shù)進行轉(zhuǎn)換到實際io,就完成了虛擬io炫欺。所以還有kvm這個東東吸引我去探秘乎完,我的小暑假接近尾聲了,那么就kick off第二輪qemu學習吧品洛。

二树姨,需求

大總結(jié):Qemu虛化源碼二次開發(fā)--Apple的學習筆記 - 簡書 (jianshu.com)
先復習及參考之前的環(huán)境搭建,然后確認新的工具鏈桥状。我本來想升級ubuntu版本帽揪,結(jié)果2.8stm特制板的編譯依賴庫差距太大,ubuntu16.04又無法和windows交互copy命令辅斟,所以不想用原來的環(huán)境了转晰,那么就降級到ubunut14.04,進行了重新安裝士飒。至于自定義開發(fā)板我準備選擇我熟悉且簡單的stm32查邢,目的是有利于快速學習添加自定義開發(fā)板的方法。

三酵幕,qemu2.8 stm特制版編譯及調(diào)試環(huán)境搭建

a. 編譯qemu

1. copy stm特制版源碼到/work目錄下
2. 先安裝基本庫侠坎,否則配置或編譯過程會報錯誤
sudo apt-get install libsdl2-2.0
sudo apt-get install libsdl2-dev
sudo apt-get install libsdl2-image-dev
sudo apt-get install libpixman-1-dev
sudo apt-get install libfdt-dev
3. 主目錄下進行配置
./configure --target-list=gnuarmeclipse-softmmu --enable-debug
注:若提示python版本錯誤,添加--python=/usr/bin/python2.7即可
4. 主目錄下編譯
make
5. 不用install安裝裙盾,做成臨時的應用文件实胸。所以使用前先創(chuàng)建環(huán)境變量。
export PATH=/work/qemu-gnuarmeclipse-dev/gnuarmeclipse-softmmu:$PATH
6. 查看版本及支持的開發(fā)板
qemu-system-gnuarmeclipse --version
qemu-system-gnuarmeclipse -M help
7. 若編譯器換了番官,或過程中有其他error可以嘗試重新配置和重新編譯
make defconfig
make clean

b. 使用stm32的elf進行仿真庐完,驗證qemu正確性

1. Copy STM32F429_Discovery_FreeRTOS_9壓縮包到/work文件夾并且解壓
2. 將3個文件夾復制到/usr/local/share/qemu,避免報錯缺少jpg徘熔。
先在/usr/local/share下創(chuàng)建qemu文件夾门躯,然后copy總工3個文件夾。
cp -R /mnt/hgfs/sharevm/qemu/devices
cp -R /mnt/hgfs/sharevm/qemu/graphics
cp -R /mnt/hgfs/sharevm/qemu/keymaps
3. cd /work/STM32F429_Discovery_FreeRTOS_9/Projects/LED
4. qemu-system-gnuarmeclipse --verbose --verbose --board STM32F429I-Discovery 
--mcu STM32F429ZI -d unimp,guest_errors --image led.elf --semihosting-config enable

c. gdb調(diào)試qemu源碼酷师,便于之后自定義開發(fā)板

Gdb其實是調(diào)試qemu-system-gnuarmeclipse的c代碼讶凉。而led.elf僅僅是這個c代碼的輸入?yún)?shù)或數(shù)據(jù)文件。
1.  在LED文件夾下山孔,主機(通過gdb來調(diào)試qemu啟動的elf)
gdbserver localhost:2345 
/work/qemu-gnuarmeclipse-dev/gnuarmeclipse-softmmu/qemu-system-gnuarmeclipse 
--board STM32F429I-Discovery --mcu STM32F429ZI --image led.elf
注:若不在LED文件夾
--image后需要/work/STM32F429_Discovery_FreeRTOS_9/Projects/LED/led.elf
2.再開一個cmd窗口做客戶機
運行
gdb /work/qemu-gnuarmeclipse-dev/gnuarmeclipse-softmmu/qemu-system-gnuarmeclipse
輸入target remote localhost:2345

四懂讯,qemu2.8仿真stm32仿真環(huán)境搭建

a. 在ubuntu下交叉編譯stm32

1.  復制gcc-arm-none-eabi-5_4-2016q3-20160926-linux,-d-,tar.bz2到/work/tools目錄下,然后tar –xvjf解壓bz2台颠。
2.  設置臨時環(huán)境變量
export PATH=/work/tools/gcc-arm-none-eabi-5_4-2016q3/bin:$PATH
3.  進入LED文件進行make即可褐望。

b. 通過qemu來調(diào)試仿真stm32
Qemu用自帶的gcc編譯的,所以調(diào)試用對應的gdb。
STM32用交叉編譯的瘫里,所以調(diào)試用對應的arm-none-eabi-gdb实蔽。
而啟動STM需要用到qemu的bin文件通過tcp端口1234來實現(xiàn)蓬衡。
對應qemu的參數(shù)-gdb則是啟動qemu的內(nèi)嵌gdbserver,監(jiān)聽的是本地tcp端口1234—如果這樣寫: -gdb tcp:192.168.1.100:1234 ,似乎也是沒問題的庭瑰。 -S 就是掛起gdbserver,讓gdb remote connect it。
Semihosting 參數(shù)夠讓 bare-metal 的 ARM 設備通過攔截指定的 SVC 指令摩幔,在連操作系統(tǒng)都沒有的環(huán)境中實現(xiàn) POSIX 中的許多標準函數(shù)劳殖,比如 printf铐尚、scanf、open闷尿、read塑径、write 等等女坑。這些 IO 操作將被 Semihosting 協(xié)議轉(zhuǎn)發(fā)到 Host 主機上填具,然后由主機代為執(zhí)行,所以在 ARM 模擬器中執(zhí)行一個 printf 可以直接打印到 Host 主機上的終端窗口中匆骗;在 ARM 模擬器中寫一個文件可以直接寫到 Host 主機的當前目錄下

1.  前提條件環(huán)境變量需要設置
export PATH=/work/tools/gcc-arm-none-eabi-5_4-2016q3/bin:$PATH
export PATH=/work/qemu-gnuarmeclipse-dev/gnuarmeclipse-softmmu:$PATH
2.  在要調(diào)試的elf所在的文件夾下劳景,比如LED文件下執(zhí)行qemu命令
qemu-system-gnuarmeclipse --verbose --verbose 
--board STM32F429I-Discovery --mcu STM32F429ZI --gdb tcp::1234 -S 
-d unimp,guest_errors  --image led.elf --semihosting-config enable=on,target=native
3.  再開一個cmd窗口啟動客戶端
4.  輸入arm-none-eabi-gdb /work/STM32F429_Discovery_FreeRTOS_9/Projects/LED/led.elf
啟動交叉編譯調(diào)試后輸入target remote localhost:1234

五,小結(jié)

由于我換了ubuntu環(huán)境碉就,過程和2年前稍微有不同盟广,編譯及調(diào)試過程中遇到一些新的坑,所以我還是把基于ubuntu14.04的正確環(huán)境搭建過程記錄下來瓮钥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筋量,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碉熄,更是在濱河造成了極大的恐慌桨武,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锈津,死亡現(xiàn)場離奇詭異呀酸,居然都是意外死亡,警方通過查閱死者的電腦和手機琼梆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門性誉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茎杂,你說我怎么就攤上這事错览。” “怎么了煌往?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵蝗砾,是天一觀的道長。 經(jīng)常有香客問我,道長悼粮,這世上最難降的妖魔是什么闲勺? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扣猫,結(jié)果婚禮上菜循,老公的妹妹穿的比我還像新娘。我一直安慰自己申尤,他們只是感情好癌幕,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昧穿,像睡著了一般勺远。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上时鸵,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天胶逢,我揣著相機與錄音,去河邊找鬼饰潜。 笑死初坠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的彭雾。 我是一名探鬼主播碟刺,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薯酝!你這毒婦竟也來了半沽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤吴菠,失蹤者是張志新(化名)和其女友劉穎者填,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橄务,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡幔托,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜂挪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片重挑。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棠涮,靈堂內(nèi)的尸體忽然破棺而出谬哀,到底是詐尸還是另有隱情,我是刑警寧澤严肪,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布史煎,位于F島的核電站谦屑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篇梭。R本人自食惡果不足惜氢橙,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恬偷。 院中可真熱鬧悍手,春花似錦、人聲如沸袍患。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡延。三九已至滞欠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肆良,已是汗流浹背筛璧。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妖滔,地道東北人隧哮。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓桶良,卻偏偏與公主長得像座舍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陨帆,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353