www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式IoT

前言


隨著芯片技術(shù)的發(fā)展,嵌入式已經(jīng)不再是傳統(tǒng)的單片機(jī)開(kāi)發(fā)模式,需要一些硬件操作的板子,現(xiàn)在qemu這種模擬硬件的手段非常好,通過(guò)直接在電腦上仿真后,然后再移植到真實(shí)的設(shè)備上,這樣大大減少了下載程序的時(shí)間,同時(shí)也方便問(wèn)題的定位和分析,通過(guò)這種方式,進(jìn)行業(yè)務(wù)邏輯層的開(kāi)發(fā)更加的高效合理。本文主要介紹在qemu上搭建樹(shù)莓派3b的開(kāi)發(fā)環(huán)境。

準(zhǔn)備條件:

Ubuntu16.04

下面的實(shí)驗(yàn)步驟在Ubuntu16.04上進(jìn)行,盡量保證環(huán)境的一致性。

01

代碼編譯

對(duì)于一個(gè)環(huán)境,我們往往需要進(jìn)行源代碼工程的構(gòu)建,所以現(xiàn)在我們選擇的是rt-thread操作系統(tǒng)進(jìn)行相關(guān)的開(kāi)發(fā)工作。

1.1 工具鏈的準(zhǔn)備

推薦采用gcc-arm-8.3-2019.03-x86_64-aarch64-elf進(jìn)行源代碼的編譯,由于官方下載速度非常慢,所以我放到網(wǎng)盤(pán)上提供下載。

鏈接: https://pan.baidu.com/s/1ZAba3xbhad-BnimCo5VDGA

提取碼: a6t5

解壓到opt目錄下。

1.2 編譯rtt工程

在github上的rt-thread上進(jìn)行下載

git clone git@github.com:RT-Thread/rt-thread.git

切換到rt-thread/bsp/raspberry-pi/raspi3-64目錄,輸入scons開(kāi)始編譯

最后生成kernel8.img文件就是可執(zhí)行文件。

02

qemu的安裝

直接通過(guò)Ubuntu進(jìn)行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只是源代碼,所以還需要進(jìn)行qemu的編譯。

查看當(dāng)前所有支持命令

./configure --help|less

可以看到如下信息

其中我們可以看到aarch64-softmmu,aarch64-linux-user,aarch64_be-linux-user。對(duì)于這三個(gè)編譯選項(xiàng):

aarch64-softmmu:

一般選擇,用來(lái)跑os的,已經(jīng)開(kāi)了軟件mmu。

aarch64-linux-user:

用于跑app

aarch64_be-linux-user :

與上面不同的是,用來(lái)跑big-endian的app程序。

編譯

./configure --target-list=arm-softmmu,aarch64-softmmu --enable-debug --enable-sdl

make

make install

03

運(yùn)行raspi鏡像

正常情況下,當(dāng)安裝完成后,在控制臺(tái)輸入qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio就可以看到程序正常的運(yùn)行起來(lái)了。

3.1 啟動(dòng)調(diào)試

如果要啟動(dòng)調(diào)試,可以輸入以下的命令

qemu-system-aarch64 -M raspi3 -kernel rtthread.elf -serial null -serial stdio -s -S

-S 表示guest虛擬機(jī)一啟動(dòng)就會(huì)暫停

-s 表示監(jiān)聽(tīng)tcp:1234端口等待GDB的連接

第一步:

開(kāi)一個(gè)窗口,輸入aarch64-elf-gdb.

第二步:

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

第三步:

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


到這里就配置完成了。

3.2 調(diào)試技巧

首先可以輸入layout src打開(kāi)源代碼顯示窗口。

斷點(diǎn)

輸入斷點(diǎn)可以是函數(shù)名稱,可以是行號(hào),可以是某個(gè)文件的具體函數(shù)。

break main //也可以寫(xiě) b main

或者文件的第20行。

break 20

演示效果如下:

其中c是continue的簡(jiǎn)寫(xiě)。會(huì)向下執(zhí)行,執(zhí)行到斷點(diǎn)處。

如果我們想刪除某個(gè)斷點(diǎn),有兩種方法:

1 delete 命令 簡(jiǎn)寫(xiě)d

delete break 刪除所有的斷點(diǎn)

delete break n 刪除某個(gè)斷點(diǎn) n為斷點(diǎn)號(hào)

2 clear 命令

clear 行號(hào) 刪除設(shè)在某一行的斷點(diǎn)

查看斷點(diǎn)信息:info b 查看所有斷點(diǎn)信息。

單步調(diào)試

進(jìn)入函數(shù)內(nèi)部單步調(diào)試step,簡(jiǎn)寫(xiě)s。

安裝函數(shù)一行一行執(zhí)行next,簡(jiǎn)寫(xiě)n。

04

總結(jié)

嵌入式開(kāi)發(fā)過(guò)程中,往往避免不了與硬件打交道,但是通過(guò)qemu這種模擬硬件的方式,往往能夠很好的加快調(diào)試的手段,在出現(xiàn)問(wèn)題的時(shí)候,可以借助gdb等調(diào)試工具進(jìn)行分析,也加快了開(kāi)發(fā)的速度,是一種比較好的手段。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉