0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

在QEMU/aarch64上完成smart用戶態(tài)應用的運行并使用VSCode進行調(diào)試

冬至子 ? 來源:boat7 ? 作者:boat7 ? 2023-09-18 16:29 ? 次閱讀

環(huán)境:Ubuntu20.04

xmake安裝

sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake

下載源碼

用戶態(tài)應用程序

rt-thread

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

編譯

首先需要更新環(huán)境變量

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

1.jpg

鏡像制作

運行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

1.jpg

運行用戶態(tài)應用

1.jpg

使用VSCode調(diào)試用戶態(tài)應用

準備工作

下載源碼(如上)

安裝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 即可

安裝內(nèi)核編譯工具

編譯內(nèi)核的時候需要用到 aarch64-linux-musleabi- 工具鏈
環(huán)境變量配置為:

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與內(nèi)核
在 userapps 中,編譯 app:

用戶態(tài)的應用用xmake編默認沒有調(diào)試符號

cd apps
xmake f -m debug -a aarch64 # 配置為 aarch64 平臺,并指定debug模式,就有調(diào)試信息
xmake -j8
制作鏡像:

xmake smart-rootfs
xmake smart-image -o ../prebuilt/qemu-virt64-aarch64/ext4.img # 將鏡像輸出至 qemu-virt64-aarch64 目錄
基于 rt-thread 倉庫的 qemu-virt64-aarch64 構(gòu)建內(nèi)核鏡像:

選擇 RT-Thread Kernel 選項

使能Smart內(nèi)核

在該目錄下執(zhí)行scons編譯

將生成的內(nèi)核鏡像 rtthread.bin 和 rtthread.elf 更新到 userappsprebuiltqemu-virt64-aarch64 目錄中。

使用命令 ./run.sh,測試 qemu 正常運行后,使用 ctrl a,x 結(jié)束運行。

VSCode配置

要想使用VSCode配置用戶態(tài)應用,需要先在工程路徑下添加調(diào)試配置

首先在 userapps 目錄下使用命令 code .,使用 VSCode 打開該目錄。

在 userapps 目錄下創(chuàng)建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,改為自己要調(diào)試的應用。

如果上述配置 launch.json 的文件無法進行調(diào)試,那就使用以下配置:

{
"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,改為自己要調(diào)試的應用。

調(diào)試用戶態(tài)應用

這部分開始正式調(diào)試用戶態(tài)應用,具體步驟如下:

修改run.sh腳本,在腳本里添加-s -S

1.jpg

在 VSCode 終端輸入 ./run.sh,如果調(diào)試的是內(nèi)核,可以看到啟動過程被掛起,等待調(diào)試前端來連接。

在 VSCode 中按下 F5 開始調(diào)試內(nèi)核,可以看到應用的源碼文件被打開,運行的代碼將停在斷點處。

1.jpg

如果調(diào)試的是用戶態(tài)應用,我們以smart_fetch為例,在VSCode終端輸入./run.sh,并按下F5開始調(diào)試,選擇要運行的用戶態(tài)應用,運行的代碼將停在斷點處

1.jpg

后續(xù)就可以單步調(diào)試用戶態(tài)應用了。單步運行后,應用代碼執(zhí)行的打印將顯示在終端上。

1.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7010
  • LINUX內(nèi)核

    關注

    1

    文章

    316

    瀏覽量

    21688
  • Ubuntu系統(tǒng)

    關注

    0

    文章

    91

    瀏覽量

    3999
  • RTThread
    +關注

    關注

    8

    文章

    132

    瀏覽量

    40924
  • gdb調(diào)試器

    關注

    0

    文章

    10

    瀏覽量

    1104
收藏 人收藏

    評論

    相關推薦

    ARMv8中aarch64aarch32是怎樣進行切換的

    ARMv8中,aarch64aarch32是通過異常進行切換的。而A32和T32是通過bx指令進行切換的。如下圖:以下A64和A32混合編
    發(fā)表于 04-01 15:09

    談一談AArch64架構(gòu)下內(nèi)核與用戶地址的隔離機制

    1、 AArch64 架構(gòu)下內(nèi)核與用戶地址的隔離機制一般來說操作系統(tǒng)之上會有多個應用程序或者任務同時運行。每一個任務都有自己獨立的頁表,
    發(fā)表于 04-13 17:27

    如何在x86環(huán)境下基于Qemu和Docker快速搭建AARCH64開發(fā)環(huán)境

    內(nèi)容都是 AARCH64 開發(fā)環(huán)境中的操作,AARCH64 基本匯編編譯運行切換到目錄 ~/work/aarch64_asm,有一個內(nèi)置的
    發(fā)表于 07-11 15:18

    運行ldd qemu-系統(tǒng)-aarch64顯示的不是動態(tài)可執(zhí)行文件,這個怎么做?

    我正在運行以下命令,ldd qemu-系統(tǒng)-aarch64 但它顯示的不是動態(tài)可執(zhí)行文件這個怎么做)
    發(fā)表于 03-30 07:51

    RT-Thread BSP qemu-virt64-aarch64的編譯環(huán)境搭建步驟

    =》 ${RTT_EXEC_PATH}”  下載gcc交叉編譯工具鏈接后,rt-thread/bsp/qemu-virt64-aarch64 運行  設置smart_env.sh的
    發(fā)表于 04-04 17:04

    AArch64自托管調(diào)試指南

    集成Arm核心中的調(diào)試邏輯提供了觀察和控制CPU和系統(tǒng)環(huán)境,同時深度嵌入式處理器執(zhí)行軟件。手臂調(diào)試體系結(jié)構(gòu)規(guī)范允許將
    發(fā)表于 08-02 10:05

    AArch64外部調(diào)試詳解

    用自托管調(diào)試模型正在調(diào)試。調(diào)試異常是自托管調(diào)試模型的基礎。這個調(diào)試器對調(diào)試邏輯
    發(fā)表于 08-02 06:37

    AArch64平臺性能下降的例子

    編者按:目前許多公司同時使用 x86 和 AArch64 2 種主流的服務器。這兩種環(huán)境的算力相當,內(nèi)存相同的情況下:相同版本的 JVM 和 Java 應用,相同的 JVM 參數(shù),應用性
    的頭像 發(fā)表于 09-09 11:11 ?2471次閱讀

    AArch64寄存器介紹

    作為 RISC 架構(gòu),AArch64 提供了大量的通用寄存器。除通用寄存器之外,本節(jié)還會介紹特殊寄存器、系統(tǒng)控制寄存器、處理器狀態(tài)、函數(shù)調(diào)用標準。
    的頭像 發(fā)表于 08-24 09:57 ?6208次閱讀

    如何使用預裝程序創(chuàng)建分發(fā)AArch64容器

    本文我們將探討如何使用預裝程序創(chuàng)建分發(fā) AArch64 容器。
    的頭像 發(fā)表于 09-30 10:57 ?1246次閱讀

    VSCode中使用QEMU調(diào)試FreeRTOS

    在這篇文章中,我們將逐步完成一個示例設置,該設置以模擬 Arm Cortex-M3 微控制器為例,展示了如何使用 QEMU Visual Studio Code (VSCode
    的頭像 發(fā)表于 03-06 09:24 ?2202次閱讀

    最新的Linux aarch64 LSA驅(qū)動程序

    電子發(fā)燒友網(wǎng)站提供《最新的Linux aarch64 LSA驅(qū)動程序.zip》資料免費下載
    發(fā)表于 08-23 15:46 ?2次下載
    最新的Linux <b class='flag-5'>aarch64</b> LSA驅(qū)動程序

    RT-Thread BSP qemu-virt64-aarch64文件系統(tǒng)

    前面大體搭建了 RT-Thread BSP qemu-virt64-aarch64 的交叉編譯環(huán)境,運行后發(fā)現(xiàn),文件系統(tǒng)沒有掛載,感覺是沒有 mkfs。
    的頭像 發(fā)表于 10-08 16:34 ?987次閱讀
    RT-Thread BSP <b class='flag-5'>qemu-virt64-aarch64</b>文件系統(tǒng)

    探索aarch64架構(gòu)使用ftrace的BPF LSM

    ,aarch64跟x86_64的內(nèi)核功能有差異。筆者嘗試定位這些差異時,看到這篇文章,可以讓大家更直觀地了解LSM eBPF兩種CPU 內(nèi)核
    的頭像 發(fā)表于 01-25 09:30 ?796次閱讀

    第四章: PC 交叉編譯 aarch64 的 tensorflow 開發(fā)環(huán)境測試

    本文介紹了 PC 端交叉編譯 aarch64 平臺的 tensorflow 庫而非 tensorflow lite 的心酸過程。
    的頭像 發(fā)表于 08-25 11:38 ?1278次閱讀
    第四章:<b class='flag-5'>在</b> PC 交叉編譯 <b class='flag-5'>aarch64</b> 的 tensorflow 開發(fā)環(huán)境<b class='flag-5'>并</b>測試