0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在QEMU/aarch64上完成smart用户态应用的运行并使用VSCode进行调试

冬至子 来源:boat7 作者:boat7 2023-09-18 16:29 次阅读

环境:Ubuntu20.04

xmake安装

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

下载源码

用户态应用程序

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

编译

首先需要更新环境变量

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

运行用户态应用

1.jpg

使用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

1.jpg

在 VSCode 终端输入 ./run.sh,如果调试的是内核,可以看到启动过程被挂起,等待调试前端来连接。

在 VSCode 中按下 F5 开始调试内核,可以看到应用的源码文件被打开,运行的代码将停在断点处。

1.jpg

如果调试的是用户态应用,我们以smart_fetch为例,在VSCode终端输入./run.sh,并按下F5开始调试,选择要运行的用户态应用,运行的代码将停在断点处

1.jpg

后续就可以单步调试用户态应用了。单步运行后,应用代码执行的打印将显示在终端上。

1.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++语言
    +关注

    关注

    0

    文章

    147

    浏览量

    7023
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21714
  • Ubuntu系统
    +关注

    关注

    0

    文章

    91

    浏览量

    4021
  • RTThread
    +关注

    关注

    8

    文章

    132

    浏览量

    40978
  • gdb调试器
    +关注

    关注

    0

    文章

    10

    浏览量

    1109
收藏 人收藏

    评论

    相关推荐

    ARMv8中aarch64aarch32是怎样进行切换的

    ARMv8中,aarch64aarch32是通过异常进行切换的。而A32和T32是通过bx指令进行切换的。如下图:以下A64和A32混合编
    发表于 04-01 15:09

    谈一谈AArch64架构下内核与用户地址的隔离机制

    1、 AArch64 架构下内核与用户地址的隔离机制一般来说操作系统之上会有多个应用程序或者任务同时运行。每一个任务都有自己独立的页表,
    发表于 04-13 17:27

    如何在x86环境下基于Qemu和Docker快速搭建AARCH64开发环境

    内容都是 AARCH64 开发环境中的操作,AARCH64 基本汇编编译运行切换到目录 ~/work/aarch64_asm,有一个内置的
    发表于 07-11 15:18

    运行ldd qemu-系统-aarch64显示的不是动态可执行文件,这个怎么做?

    我正在运行以下命令,ldd qemu-系统-aarch64 但它显示的不是动态可执行文件这个怎么做)
    发表于 03-30 07:51

    RT-Thread BSP qemu-virt64-aarch64的编译环境搭建步骤

    =》 ${RTT_EXEC_PATH}”  下载gcc交叉编译工具链接后,rt-thread/bsp/qemu-virt64-aarch64 运行  设置smart_env.sh的
    发表于 04-04 17:04

    AArch64自托管调试指南

    集成Arm核心中的调试逻辑提供了观察和控制CPU和系统环境,同时深度嵌入式处理器执行软件。手臂调试体系结构规范允许将
    发表于 08-02 10:05

    AArch64外部调试详解

    用自托管调试模型正在调试调试异常是自托管调试模型的基础。这个调试器对调试逻辑
    发表于 08-02 06:37

    AArch64平台性能下降的例子

    编者按:目前许多公司同时使用 x86 和 AArch64 2 种主流的服务器。这两种环境的算力相当,内存相同的情况下:相同版本的 JVM 和 Java 应用,相同的 JVM 参数,应用性
    的头像 发表于 09-09 11:11 2502次阅读

    AArch64寄存器介绍

    作为 RISC 架构,AArch64 提供了大量的通用寄存器。除通用寄存器之外,本节还会介绍特殊寄存器、系统控制寄存器、处理器状态、函数调用标准。
    的头像 发表于 08-24 09:57 6242次阅读

    如何使用预装程序创建分发AArch64容器

    本文我们将探讨如何使用预装程序创建分发 AArch64 容器。
    的头像 发表于 09-30 10:57 1264次阅读

    VSCode中使用QEMU调试FreeRTOS

    在这篇文章中,我们将逐步完成一个示例设置,该设置以模拟 Arm Cortex-M3 微控制器为例,展示了如何使用 QEMU Visual Studio Code (VSCode
    的头像 发表于 03-06 09:24 2286次阅读

    最新的Linux aarch64 LSA驱动程序

    电子发烧友网站提供《最新的Linux aarch64 LSA驱动程序.zip》资料免费下载
    发表于 08-23 15:46 2次下载
    最新的Linux <b class='flag-5'>aarch64</b> LSA驱动程序

    RT-Thread BSP qemu-virt64-aarch64文件系统

    前面大体搭建了 RT-Thread BSP qemu-virt64-aarch64 的交叉编译环境,运行后发现,文件系统没有挂载,感觉是没有 mkfs。
    的头像 发表于 10-08 16:34 1013次阅读
    RT-Thread BSP <b class='flag-5'>qemu-virt64-aarch64</b>文件系统

    探索aarch64架构使用ftrace的BPF LSM

    aarch64跟x86_64的内核功能有差异。笔者尝试定位这些差异时,看到这篇文章,可以让大家更直观地了解LSM eBPF两种CPU 内核
    的头像 发表于 01-25 09:30 828次阅读

    第四章: PC 交叉编译 aarch64 的 tensorflow 开发环境测试

    本文介绍了 PC 端交叉编译 aarch64 平台的 tensorflow 库而非 tensorflow lite 的心酸过程。
    的头像 发表于 08-25 11:38 1341次阅读
    第四章:<b class='flag-5'>在</b> PC 交叉编译 <b class='flag-5'>aarch64</b> 的 tensorflow 开发环境<b class='flag-5'>并</b>测试