在qemu上搭建開發(fā)aarch64 rtos環(huán)境
掃描二維碼
隨時隨地手機看文章
前言
隨著芯片技術(shù)的發(fā)展,嵌入式已經(jīng)不再是傳統(tǒng)的單片機開發(fā)模式,需要一些硬件操作的板子,現(xiàn)在qemu這種模擬硬件的手段非常好,通過直接在電腦上仿真后,然后再移植到真實的設(shè)備上,這樣大大減少了下載程序的時間,同時也方便問題的定位和分析,通過這種方式,進行業(yè)務(wù)邏輯層的開發(fā)更加的高效合理。本文主要介紹在qemu上搭建樹莓派3b的開發(fā)環(huán)境。
準(zhǔn)備條件:
Ubuntu16.04
下面的實驗步驟在Ubuntu16.04上進行,盡量保證環(huán)境的一致性。
01
代碼編譯
對于一個環(huán)境,我們往往需要進行源代碼工程的構(gòu)建,所以現(xiàn)在我們選擇的是rt-thread操作系統(tǒng)進行相關(guān)的開發(fā)工作。
1.1 工具鏈的準(zhǔn)備
推薦采用gcc-arm-8.3-2019.03-x86_64-aarch64-elf進行源代碼的編譯,由于官方下載速度非常慢,所以我放到網(wǎng)盤上提供下載。
鏈接: https://pan.baidu.com/s/1ZAba3xbhad-BnimCo5VDGA
提取碼: a6t5
解壓到opt目錄下。
1.2 編譯rtt工程
在github上的rt-thread上進行下載
git clone git@github.com:RT-Thread/rt-thread.git
切換到rt-thread/bsp/raspberry-pi/raspi3-64目錄,輸入scons開始編譯
最后生成kernel8.img文件就是可執(zhí)行文件。
02
qemu的安裝
直接通過Ubuntu進行sudo apt-get install qemu安裝的qemu版本較低,不支持arrch64體系架構(gòu),所以我們需要去下載安裝最新版本的qemu,到官網(wǎng)上下載即可。

下載完成后解壓文件。
或者從github中clone代碼
git clone git@github.com:qemu/qemu.git
git submodule update --init --recursive
2.1 編譯qemu
由于最新版本的qemu只是源代碼,所以還需要進行qemu的編譯。
查看當(dāng)前所有支持命令
./configure --help|less
可以看到如下信息

其中我們可以看到aarch64-softmmu,aarch64-linux-user,aarch64_be-linux-user。對于這三個編譯選項:
aarch64-softmmu:
一般選擇,用來跑os的,已經(jīng)開了軟件mmu。
aarch64-linux-user:
用于跑app
aarch64_be-linux-user :
與上面不同的是,用來跑big-endian的app程序。
編譯
./configure --target-list=arm-softmmu,aarch64-softmmu --enable-debug --enable-sdl
make
make install
03
運行raspi鏡像
正常情況下,當(dāng)安裝完成后,在控制臺輸入qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio就可以看到程序正常的運行起來了。

3.1 啟動調(diào)試
如果要啟動調(diào)試,可以輸入以下的命令
qemu-system-aarch64 -M raspi3 -kernel rtthread.elf -serial null -serial stdio -s -S
-S 表示guest虛擬機一啟動就會暫停
-s 表示監(jiān)聽tcp:1234端口等待GDB的連接
第一步:
開一個窗口,輸入aarch64-elf-gdb.

第二步:
等待連接操作,然后輸入target remote localhost:1234連接

第三步:
打開需要調(diào)試的文件,輸入路徑file /home/bigmagic/work/raspberry-pi/src/rt-thread/bsp/raspi3-64/rtthread.elf這個路徑是需要調(diào)試的文件。

到這里就配置完成了。
3.2 調(diào)試技巧
首先可以輸入layout src打開源代碼顯示窗口。

斷點
輸入斷點可以是函數(shù)名稱,可以是行號,可以是某個文件的具體函數(shù)。
break main //也可以寫 b main
或者文件的第20行。
break 20
演示效果如下:

其中c是continue的簡寫。會向下執(zhí)行,執(zhí)行到斷點處。
如果我們想刪除某個斷點,有兩種方法:
1 delete 命令 簡寫d
delete break 刪除所有的斷點
delete break n 刪除某個斷點 n為斷點號
2 clear 命令
clear 行號 刪除設(shè)在某一行的斷點
查看斷點信息:info b 查看所有斷點信息。
單步調(diào)試
進入函數(shù)內(nèi)部單步調(diào)試step,簡寫s。
安裝函數(shù)一行一行執(zhí)行next,簡寫n。
04
總結(jié)
嵌入式開發(fā)過程中,往往避免不了與硬件打交道,但是通過qemu這種模擬硬件的方式,往往能夠很好的加快調(diào)試的手段,在出現(xiàn)問題的時候,可以借助gdb等調(diào)試工具進行分析,也加快了開發(fā)的速度,是一種比較好的手段。