環境:Ubuntu20.04
xmake安裝
sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake
下載源碼
用戶態應用程序
QEMU安裝
首先安裝必要依賴:
sudo apt-get install -y libglib2.0-dev libpixman-1-dev
安裝qemu:
sudo dpkg -i ./tools/qemu/qemu_7.1.0-2022111713_amd64.deb
編譯
首先需要更新環境變量
source env.sh
進入apps目錄進行編譯
cd apps/
// notes:這里注意如果是linux平臺下需要先安裝解壓縮工具,下面為7zip的下載方式
sudo add-apt-repository universe
sudo apt update
sudo apt install p7zip-full p7zip-rar
xmake f -a aarch64 //選擇目標平臺為aarch64
xmake -j8
鏡像制作
運行xmake smart-rootfs制作rootfs,運行xmake smart-image制作鏡像
xmake smart-rootfsxmake smart-image -o ../prebuilt/qemu-virt64-aarch64/ext4.img # 將鏡像輸出至 qemu-virt64-aarch64 目錄
運行qemu
進入userapp/prebuilt/qemu-virt64-aarch64,運行run.sh腳本啟動qemu
運行用戶態應用
使用VSCode調試用戶態應用
準備工作
下載源碼(如上)
安裝VSCode:安裝VSCode并安裝C/C++擴展插件
$ sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
$ sudo apt-get update
$ sudo apt-get install ubuntu-make
$ umake ide visual-studio-code
提示輸入 a 即可
安裝內核編譯工具
編譯內核的時候需要用到 aarch64-linux-musleabi- 工具鏈
環境變量配置為:
export RTT_CC="gcc"
export RTT_EXEC_PATH="/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin"
export RTT_CC_PREFIX="aarch64-linux-musleabi-"
export PATH="**RTT_EXEC_PATH:**PATH"
安裝scons:
sudo apt-get install scons
安裝xmake:
sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake
安裝gdb-multiarch:
sudo apt-get install gdb-multiarch
編譯userapps與內核
在 userapps 中,編譯 app:
用戶態的應用用xmake編默認沒有調試符號
cd apps
xmake f -m debug -a aarch64 # 配置為 aarch64 平臺,并指定debug模式,就有調試信息了
xmake -j8
制作鏡像:
xmake smart-rootfs
xmake smart-image -o ../prebuilt/qemu-virt64-aarch64/ext4.img # 將鏡像輸出至 qemu-virt64-aarch64 目錄
基于 rt-thread 倉庫的 qemu-virt64-aarch64 構建內核鏡像:
選擇 RT-Thread Kernel 選項
使能Smart內核
在該目錄下執行scons編譯
將生成的內核鏡像 rtthread.bin 和 rtthread.elf 更新到 userappsprebuiltqemu-virt64-aarch64 目錄中。
使用命令 ./run.sh,測試 qemu 正常運行后,使用 ctrl a,x 結束運行。
VSCode配置
要想使用VSCode配置用戶態應用,需要先在工程路徑下添加調試配置
首先在 userapps 目錄下使用命令 code .,使用 VSCode 打開該目錄。
在 userapps 目錄下創建launch.json ,如下所示(需要更新實際的 gdb 路徑):
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug smart @ Linux",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": true,
"externalConsole": true,
"cwd": "${workspaceRoot}",
"program": "${workspaceRoot}/apps/build/rootfs/bin/smart-fetch",
"serverLaunchTimeout": 2000,
"miDebuggerPath":"/usr/bin/gdb-multiarch",
"miDebuggerServerAddress": ":1234",
"setupCommands": [
{
"text": "cd ${workspaceRoot}"
},
{
"text": "file ${workspaceRoot}/apps/build/rootfs/bin/smart-fetch"
},
{
"text": "break main"
}
],
"customLaunchSetupCommands": [],
"launchCompleteCommand": "exec-run"
},
]
}
launch.json 配置文件中的 smart-fetch,改為自己要調試的應用。
如果上述配置 launch.json 的文件無法進行調試,那就使用以下配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "aarch64-debug",
"type": "cppdbg",
"request": "launch",
"miDebuggerPath": "/usr/bin/gdb-multiarch",
"program": "${workspaceFolder}/rtthread.elf",
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"text": "target remote localhost:1234"
},
{
"text": "restore ${workspaceFolder}/rtthread.elf"
}
],
"launchCompleteCommand": "None",
"cwd": "${workspaceFolder}"
}
]
}
launch.json 配置文件中的 rtthread.elf,改為自己要調試的應用。
調試用戶態應用
這部分開始正式調試用戶態應用,具體步驟如下:
修改run.sh腳本,在腳本里添加-s -S
在 VSCode 終端輸入 ./run.sh,如果調試的是內核,可以看到啟動過程被掛起,等待調試前端來連接。
在 VSCode 中按下 F5 開始調試內核,可以看到應用的源碼文件被打開,運行的代碼將停在斷點處。
如果調試的是用戶態應用,我們以smart_fetch為例,在VSCode終端輸入./run.sh,并按下F5開始調試,選擇要運行的用戶態應用,運行的代碼將停在斷點處
后續就可以單步調試用戶態應用了。單步運行后,應用代碼執行的打印將顯示在終端上。
-
C++語言
+關注
關注
0文章
147瀏覽量
7002 -
LINUX內核
+關注
關注
1文章
316瀏覽量
21664 -
Ubuntu系統
+關注
關注
0文章
91瀏覽量
3982 -
RTThread
+關注
關注
8文章
132瀏覽量
40900 -
gdb調試器
+關注
關注
0文章
10瀏覽量
1103
發布評論請先 登錄
相關推薦
評論