溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Windows下通過(guò)ARM目標(biāo)板上的gdbserver進(jìn)行遠(yuǎn)

發(fā)布時(shí)間:2020-06-03 09:29:00 來(lái)源:網(wǎng)絡(luò) 閱讀:10466 作者:Petrelight 欄目:系統(tǒng)運(yùn)維

因某種需要,要在Windows平臺(tái)上進(jìn)行程序開(kāi)發(fā),目標(biāo)板是基于Micrel芯片(ARMv4t)做的,上面運(yùn)行有Linux最小系統(tǒng),只有最基本的命令,需要在Windows平臺(tái)上交叉編譯能在ARMv4t上運(yùn)行的目標(biāo)代碼,并且還要能進(jìn)行遠(yuǎn)程調(diào)試。基于這些需求,初步計(jì)劃按以下步驟進(jìn)行:
1、先在Windows平臺(tái)上交叉編譯一個(gè)簡(jiǎn)單的C語(yǔ)言程序,并上傳到開(kāi)發(fā)板上,能正常運(yùn)行即可;
2、交叉編譯gdbserver,并上傳到開(kāi)發(fā)板;
3、進(jìn)行遠(yuǎn)程調(diào)試。
按上述計(jì)劃,首先要找一個(gè)Windows環(huán)境下的交叉編譯環(huán)境,參考了http://www.veryarm.com/arm-none-linux-gnueabi-gcc 下載了arm-2011.03-41-arm-none-linux-gnueabi.exe Windows安裝版(個(gè)人感覺(jué)在Windows下用安裝版比較好,解壓版需要設(shè)定PATH),安裝成功后,用C寫了一個(gè)簡(jiǎn)單的Hello,World!,使用如下命令進(jìn)行編譯:
arm-none-linux-gnueabi-gcc hello.c -o hello
目標(biāo)板與Windows主機(jī)通過(guò)以太網(wǎng)和串口進(jìn)行連接,以太網(wǎng)用來(lái)上傳文件,串口用于進(jìn)行終端訪問(wèn)。目標(biāo)板與Windows主機(jī)使用tfpt進(jìn)行文件傳遞。Windows上運(yùn)行有tftp server,如下圖:
Windows下通過(guò)ARM目標(biāo)板上的gdbserver進(jìn)行遠(yuǎn)
通過(guò)串口終端在目標(biāo)板上運(yùn)行如下命令下載Windows主機(jī)上編譯的hello程序:
tftp -gr hello 10.32.2.10
使用命令chmod 755 hello添加執(zhí)行權(quán)限后執(zhí)行時(shí),出現(xiàn)下述錯(cuò)誤提示:
Illegal Instruction
這說(shuō)明程序能運(yùn)行,但指令不對(duì),這有可能是在Windows上交叉編譯時(shí)沒(méi)有指定具體目標(biāo)架構(gòu)的原因(在Ubuntu下使用上述命令進(jìn)行交叉編譯的程序可以正常執(zhí)行)。為了解決這個(gè)問(wèn)題,首先通過(guò)串口終端查看了目標(biāo)板啟動(dòng)時(shí)的信息,了解到ARM芯片是armv4t架構(gòu),接著使用arm-none-linux-gnueabi-gcc --target-help查看交叉編譯器支持的ARM架構(gòu)類型,發(fā)現(xiàn)該命令通過(guò)-march=option可以指定目標(biāo)類型,于是,編譯命令改為:
arm-none-linux-gnueabi-gcc -march=armv4t hello.c -o hello -g
編譯成的程序在目標(biāo)機(jī)上能夠運(yùn)行?。ㄟ\(yùn)氣不錯(cuò))
第一步完成,接下來(lái)交叉編譯gdbserver。先前安裝的arm-2011.03-41-arm-none-linux-gnueabi.exe包含有在Windows下運(yùn)行的arm-none-linux-gnueabi-gdb.exe命令,要進(jìn)行遠(yuǎn)程調(diào)試,需要在目標(biāo)板上運(yùn)行g(shù)dbserver。于是上gdb官網(wǎng)(http://ftp.gnu.org/gnu/gdb) 下載gdb7.6的代碼。突然一想,既然arm-2011.03-41-arm-none-linux-gnueabi.exe包含有Windows上執(zhí)行的gdb,那是不是也包含有在Linux上運(yùn)行行的gdbserver呢?進(jìn)入安裝目錄一搜索,Bingo,果然有,在安裝目錄CodeSourcery\Sourcery_G++_Lite\arm-none-linux-gnueabi\libc\armv4t\usr\bin下,運(yùn)氣不錯(cuò)。把該目錄下的gdbserver放到目標(biāo)版上后,果真能運(yùn)行。第二步完成(俺有時(shí)還是比較懶的,在Windows下就不再自己編譯了)
第三步就相對(duì)容易了,在目標(biāo)板上運(yùn)行命令啟動(dòng)gdbserver:
./gdbserver 10.32.2.80:3333 hello
上述命令中的IP是目標(biāo)板自己的IP地址,端口號(hào)自己指定,只要不沖突就行,后面的hello是包含調(diào)試信息的被調(diào)試程序。然后在Windows下運(yùn)行arm-none-linux-gnueabi-gdb.exe,進(jìn)入gdb提示符后后,執(zhí)行target remote 20.32.2.80:3333就聯(lián)上目標(biāo)板的gdbserver了,然后再在gdb提示符下執(zhí)行file hello,這個(gè)是在Windows下加載被調(diào)試的程序,之后就按gdb的命令設(shè)置端點(diǎn)等就可以調(diào)試了。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI