前 言
本文為創(chuàng)龍科技編寫的Linux應(yīng)用開(kāi)發(fā)的指引文檔,提供Linux應(yīng)用開(kāi)發(fā)環(huán)境、開(kāi)發(fā)流程等說(shuō)明,以及對(duì)平臺(tái)關(guān)鍵技術(shù)及其支持情況進(jìn)行簡(jiǎn)要介紹。同時(shí)本文將對(duì)部分通用開(kāi)發(fā)技術(shù)進(jìn)行說(shuō)明,其它應(yīng)用開(kāi)發(fā)內(nèi)容請(qǐng)按文中說(shuō)明選擇對(duì)應(yīng)參考文檔進(jìn)行閱讀。
當(dāng)前應(yīng)用開(kāi)發(fā)支持情況如下表所示。

在完成開(kāi)發(fā)環(huán)境搭建后,可參考本文的“Linux常用開(kāi)發(fā)案例”章節(jié)熟悉基本的應(yīng)用開(kāi)發(fā)流程,然后可參考如下文檔進(jìn)行產(chǎn)品應(yīng)用開(kāi)發(fā)。
(1)圖形界面開(kāi)發(fā):暫無(wú)參考;
(2)視頻圖像處理開(kāi)發(fā):暫無(wú)參考。
開(kāi)發(fā)環(huán)境
Windows開(kāi)發(fā)環(huán)境:Windows10 64bit
Linux開(kāi)發(fā)環(huán)境:VMware16.2.5、Ubuntu22.04.4 64bit
LinuxSDK開(kāi)發(fā)包:LinuxSDK-[版本號(hào)](基于SDK_2025.1)
交叉編譯工具鏈:
應(yīng)用開(kāi)發(fā):gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
U-Boot、內(nèi)核開(kāi)發(fā):gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
評(píng)估板系統(tǒng)版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02
備注:本文基于8GByteeMMC、1GByteDDR配置核心板進(jìn)行演示。
術(shù)語(yǔ)表
為便于閱讀,下表對(duì)文檔出現(xiàn)的關(guān)鍵術(shù)語(yǔ)進(jìn)行解釋;對(duì)于廣泛認(rèn)同釋義的術(shù)語(yǔ),在此不做注釋。

注意事項(xiàng)
(1)無(wú)特殊說(shuō)明情況下,默認(rèn)使用USB TO UART1接口作為調(diào)試串口,使用Linux系統(tǒng)啟動(dòng)卡啟動(dòng)系統(tǒng),通過(guò)路由器與PC機(jī)進(jìn)行網(wǎng)絡(luò)連接。請(qǐng)根據(jù)評(píng)估底板絲印將啟動(dòng)方式選擇撥碼開(kāi)關(guān)撥為011(1~3),此檔位為Micro SD啟動(dòng)模式。
(2)本文檔涉及的開(kāi)發(fā)案例位于產(chǎn)品資料“4-軟件資料Demo”路徑下的base-demos目錄。base-demos目錄存放Linux常用開(kāi)發(fā)案例,案例bin目錄存放可執(zhí)行文件,案例src目錄存放源碼。
1開(kāi)發(fā)環(huán)境搭建說(shuō)明
1.1LinuxSDK使用說(shuō)明
請(qǐng)參考《開(kāi)發(fā)環(huán)境搭建》的LinuxSDK安裝章節(jié)正確解壓LinuxSDK并安裝相關(guān)依賴軟件,然后參考《Linux系統(tǒng)開(kāi)發(fā)手冊(cè)》的LinuxSDK配置與編譯章節(jié)正確編譯LinuxSDK,生成支持應(yīng)用開(kāi)發(fā)的交叉編譯工具鏈。
編譯完LinuxSDK后,請(qǐng)執(zhí)行如下命令,完成Linux應(yīng)用開(kāi)發(fā)的環(huán)境變量配置,即可進(jìn)行Linux應(yīng)用開(kāi)發(fā)。
Host# export PATH=/home/tronlong/DR1/SDK_2025.1/device/output/anlogic_dr1m90/buildroot/host/bin/:$PATH
圖 1
1.2工具鏈?zhǔn)褂谜f(shuō)明
通過(guò)export命令完成環(huán)境變量配置后,請(qǐng)執(zhí)行如下命令,查看編譯工具鏈版本。
Host# aarch64-linux-gnu-gcc -v
圖 2
2GDB調(diào)試說(shuō)明
GDB為GNU推出的經(jīng)典命令行調(diào)試工具,在Linux系統(tǒng)下廣泛使用。它功能強(qiáng)大,能讓開(kāi)發(fā)者單步執(zhí)行程序、逐過(guò)程或逐語(yǔ)句調(diào)試,自由跳入或跳出函數(shù),還能按條件設(shè)置斷點(diǎn),實(shí)時(shí)查看變量值,精準(zhǔn)定位程序問(wèn)題。
GDB支持多種語(yǔ)言,包括匯編、C/C++、D、Fortran、GO、Objective-C、OpenCL等。此外,它有遠(yuǎn)程調(diào)試模式,在嵌入式系統(tǒng)調(diào)試中優(yōu)勢(shì)明顯。借助TCP/IP協(xié)議及專有通信協(xié)議,可讓調(diào)試程序的主機(jī)與運(yùn)行程序的目標(biāo)機(jī)跨設(shè)備協(xié)作,高效完成調(diào)試任務(wù)。
2.1調(diào)試環(huán)境搭建
請(qǐng)先參考產(chǎn)品資料用戶手冊(cè)目錄下的《開(kāi)發(fā)環(huán)境搭建》和《Linux系統(tǒng)開(kāi)發(fā)手冊(cè)》安裝、編譯LinuxSDK。
GDB調(diào)試工具壓縮包gdb-10.2.tar.xz位于LinuxSDK源碼目錄"buildroot/dl/gdb/"下。
圖?3
在DR1工作目錄下執(zhí)行如下命令,創(chuàng)建gdb-tool目錄用于存放GDB調(diào)試工具壓縮包,將GDB調(diào)試工具包拷貝至該目錄下并解壓。
Host# mkdir gdb-tool
Host# cdgdb-tool
Host# cp /home/tronlong/DR1/SDK_2025.1/buildroot/dl/gdb/gdb-10.2.tar.xz /home/tronlong/DR1/gdb-tool/
Host# tar -xvf gdb-10.2.tar.xz
圖 4
圖 5
執(zhí)行如下命令,配置交叉編譯工具鏈環(huán)境變量,并新建install目錄用于存放編譯生成的GDB調(diào)試工具。
Host# export PATH=/home/tronlong/test/sdk/SDK_2025.1/device/output/anlogic_dr1m90/buildroot/host/bin:$PATH
Host# mkdir install
圖 6
執(zhí)行如下命令,進(jìn)入GDB調(diào)試工具包目錄,配置GDB調(diào)試工具。
Host# cd gdb-10.2
Host# ./configure --target=aarch64-linux-gnu --prefix=/home/tronlong/DR1/gdb-tool/install/
備注:--target表示GDB調(diào)試工具名稱前綴,選擇aarch64-linux-gnu;--prefix表示存放目錄,選擇新建的install目錄。
圖 7
圖?8
執(zhí)行如下命令進(jìn)行編譯。
Host# make
圖?9
圖?10
執(zhí)行如下命令安裝GDB調(diào)試工具,將會(huì)在”install/bin”目錄下生成GDB調(diào)試工具。
Host# make install
圖?11
圖?12
圖 13
2.2演示程序創(chuàng)建與編譯
在gdb-tool目錄下執(zhí)行如下命令,新建一個(gè)GDB調(diào)試演示程序。
Host# vitest.c
Host# cat test.c
圖 14
演示程序代碼如下:
#include
void show() {
printf("shown");
}
int main(int argc, char *argv[])
{
int arr[4] = {1, 2, 3, 4};
int i = 0;
for (i = 0; i < 4; i++) {
printf("arr[%d]: %dn", i, arr[i]);
}
show();
return 0;
}
執(zhí)行如下命令,進(jìn)行程序編譯,編譯完成將會(huì)生成test可執(zhí)行程序。
備注:編譯時(shí)需添加-g參數(shù),生成的可執(zhí)行文件才帶有調(diào)試信息。
Host# aarch64-linux-gnu-gcc -g test.c -o test
圖?15
評(píng)估板與PC機(jī)連接至同一個(gè)路由器后進(jìn)行上電,將編譯后的可執(zhí)行文件test拷貝至評(píng)估板文件系統(tǒng)任意目錄下。
Target# lstest
圖?16
2.3調(diào)試程序運(yùn)行
執(zhí)行如下命令,查看虛擬機(jī)的IP地址。
Host# ifconfig
圖 17
在評(píng)估板文件系統(tǒng)test文件所在路徑下,執(zhí)行如下命令運(yùn)行g(shù)dbserver程序,開(kāi)啟監(jiān)聽(tīng)。
備注:192.168.13.81為虛擬機(jī)的IP地址;1234為連接的端口號(hào)(自行設(shè)置);test為將要進(jìn)行調(diào)試的程序。
Target# gdbserver 192.168.13.81:1234 test
圖?18
在虛擬機(jī)test文件所在路徑下,執(zhí)行如下命令使用GDB調(diào)試工具進(jìn)行程序調(diào)試。
Host# ./install/bin/aarch64-linux-gnu-gdb test
圖?19
執(zhí)行如下命令,連接評(píng)估板。192.168.13.47為評(píng)估板的IP地址,請(qǐng)以實(shí)際情況為準(zhǔn)。
(gdb) target remote 192.168.13.47:1234
圖?20
同時(shí),串口調(diào)試終端顯示連接成功的相關(guān)信息。
圖?21
2.4 程序調(diào)試
本章節(jié)主要演示GDB調(diào)試的幾個(gè)常用命令的使用方法。
2.4.1 list命令
用于列出源碼,簡(jiǎn)寫:l。
圖 22
2.4.2 break命令
用于設(shè)置斷點(diǎn),簡(jiǎn)寫:b。
分別在main函數(shù)和第10行設(shè)置斷點(diǎn)。
圖 23
2.4.3 info breakpoints命令
用于顯示斷點(diǎn)的狀態(tài),簡(jiǎn)寫:infob。
圖 24
2.4.4 continue命令
用于恢復(fù)程序執(zhí)行,簡(jiǎn)寫:c。此命令使GDB恢復(fù)程序的執(zhí)行,直至斷點(diǎn)觸發(fā)或程序結(jié)束。
圖 25
以上調(diào)試過(guò)程在第二個(gè)斷點(diǎn)中,每輸入一次c命令,將會(huì)依次打印arr[]數(shù)組的元素值,然后程序執(zhí)行結(jié)束。同時(shí),串口調(diào)試終端打印相關(guān)信息。
圖 26
2.4.5 print命令
用于打印變量或者變量地址,簡(jiǎn)寫:p。
設(shè)置斷點(diǎn)后,可依次打印當(dāng)前變量i的值。
圖 27
以上調(diào)試過(guò)程在每處斷點(diǎn)中,使用print命令打印變量i的值。同時(shí),串口調(diào)試終端打印相關(guān)信息。
圖 28
2.4.6 quit命令
退出GDB模式,簡(jiǎn)寫:q。當(dāng)程序調(diào)試完成后,使用quit命令退出GDB調(diào)試。
圖 29
同時(shí),串口調(diào)試終端打印相關(guān)信息。
圖 30
由于篇幅過(guò)長(zhǎng)等原因,部分內(nèi)容均不逐一展示,如需獲取完整版詳細(xì)資料,請(qǐng)關(guān)注創(chuàng)龍科技微信公眾號(hào)或官網(wǎng),或者評(píng)論區(qū)留言,感謝您的支持!
審核編輯 黃宇
-
Linux
+關(guān)注
關(guān)注
88文章
11756瀏覽量
218996 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90013 -
MQTT
+關(guān)注
關(guān)注
5文章
733瀏覽量
25059
發(fā)布評(píng)論請(qǐng)先 登錄
基于安路DR1M90 FPSoC的Linux系統(tǒng)全流程開(kāi)發(fā)指南(4)
使用GDB調(diào)試Linux應(yīng)用程序
DR1 系列核心板 PS+PL 異構(gòu)多核實(shí)戰(zhàn)案例手冊(cè)(二)
Tiny6410 Linux開(kāi)發(fā)指南詳解
Linux的平臺(tái)下Mini210S裸機(jī)程序開(kāi)發(fā)指南
如何使用linux下gdb來(lái)調(diào)試python程序
基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開(kāi)發(fā)指南(1)
基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開(kāi)發(fā)指南(3)
DR1M90 評(píng)估板 TD-FD 工程與 Linux 多場(chǎng)景應(yīng)用開(kāi)發(fā)指南
DR1 系列核心板 PS+PL 異構(gòu)多核實(shí)戰(zhàn)案例手冊(cè)(一)
DR1 系列評(píng)估板 PS 端裸機(jī)與 FreeRTOS 開(kāi)發(fā)案例手冊(cè)
RK3562 單板機(jī) Linux 應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)手冊(cè):LED/CAN/TCP/UART 案例與 Python 開(kāi)發(fā)(二)
DR1平臺(tái)Linux應(yīng)用開(kāi)發(fā)指南:含GDB調(diào)試、Python及MQTT實(shí)戰(zhàn)
評(píng)論