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

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

3天内不再提示

trace32 for rt-thread support的基本使用及系统插件原理

嵌入式IoT 来源:嵌入式IoT 作者:嵌入式IoT 2021-01-07 10:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

trace32 for rt-thread support

  • 1.概述

  • 2.trace32的基本使用

  • 3.trace32系统插件原理

  • 4.离线trace32得到rt-thread状态信息

    • 4.1 trace32上的rt-thread插件及菜单栏

    • 4.2 trace32 加载dump以及elf文件

  • 5.总结

1.概述

Lauterbach是全球最大的、完整的、模块化和可升级微处理器开发工具的生产商,自1979年以来,在制造世界一流的调试器和实时跟踪方面拥有丰富经验。其中产品线中的TRACE32为大众广为所知,是众多手机厂商、芯片厂商的必备工具。

嵌入式底层开发来说,不使用一下trace32,绝对想不到开发调试的便利及其功能的强大。

有幸在对某个芯片的支持上学习使用了trace32工具,并写了一些trace32 for rt-thread的插件,现在梳理一下心得体会以及实现的相关细节。

2.trace32的基本使用

关于trace32的使用,Lauterbach已经提供了相当完善的文档支持,对于芯片的架构分析、软件的重入分析、数据的观测、操作系统的状态以及各种符号信息等等都非常容易的观察到。其调试功能的强大,非常的好用,但是由于其硬件设备的昂贵,能够长时间的使用trace32也是非常有难度的。

但是trace32也提供了相关的模拟版本,所以这里采用TRACE32 Simulator版本进行演示离线功能。

2bbed890-5074-11eb-8b86-12bb97331649.png

可以直接选择,也可输入命令

首先选择CPU的型号

2bd78c1e-5074-11eb-8b86-12bb97331649.png

可以直接选择下面的提示框,也可以直接输入sys.cpu进行选择,这里选择Cortex-A9

接着就可以输入system.up,启动了。

导入elf符号

2bea7734-5074-11eb-8b86-12bb97331649.png

可以看到符号文件对应的地址及其代码。直接通过elf符号就能得到程序的源代码。

此时只需要结合dump文件,结合elf符号,则可以定位到当前程序执行的状态。

从上述功能分析来看,主要是两部分构成:

1.菜单栏(menu bar)

2.显示信息窗口

无论是点击菜单栏还是在命令行输入命令,达到的效果其实一样。菜单栏只是一个简单的插件,系统可以调用命令。

3.trace32系统插件原理

trace32是一个工具,其提供了各种各样的芯片及操作系统插件,同时也可以根据这些插件来展示需要的信息。

2c481786-5074-11eb-8b86-12bb97331649.png

在操作系统层面,RTOS这部分,国外的许多操作系统都得到了很好的支持,例如Linuxfreertos或者ucosii等等,所以我在此基础上做了rt-thread的支持。

要想做其支持,首先需要得到Lauterbach的官方的支持,提供EDK,也需要对rt-thread系统底层有着非常深刻的理解,尤其对于系统的全局容器对象、线程、IPC的结构体数组的布局都十分的清楚后,就可以进行插件的扩展开发了。

2c98c1a4-5074-11eb-8b86-12bb97331649.png

其底层原理可以概述如下:

TRACE32在进行程序分析的时候,可以通过ELF获取到符号表信息,可以查询到系统的全局变量和函数地址信息的。当程序在动态运行的时候,根据符号表对应的地址读取数据,可以得到当前程序的状态信息。

而在rt-thread中,有个核心的全局静态变量,对象容器(rt_object_container)。记录着当前系统中所有的线程、IPC等链表的挂载点,而根据这个线索,又可以寻找到每个链表地址对应的结构体,根据符号信息从而找到对应的对象的状态结构体的数据。

而TRACE32插件基本的原理也就是利用了符号以及地址的对应关系,从而得到了系统的信息以及当前的状态。

4.离线trace32得到rt-thread状态信息

在离线分析这部分,dump方案根据具体的硬件变化而变化,所以这里不多叙述,只采用qemu来dump在程序动态运行时的数据信息。

为了简单起见,这里采用树莓派2b的rt-thread bsp来做演示。

raspi2在qemu上启动,须在启动之前的汇编加上一句话。

/*Suspendtheothercpucores*/
mrcp15,0,r0,c0,c0,5
andsr0,#3
bne_halt

其中_halt的实现如下:

_halt:
wfe
b_halt

此处挂起其他的核。

而后在env工具下输入scons进行编译,并且输入下面的命令测试qemu的执行

qemu-system-arm-Mraspi2-m1024M-serialnull-serialstdio-kernelrtthread.elf

可以看到如下的效果:

2cececac-5074-11eb-8b86-12bb97331649.png

接着进入调试阶段

qemu-system-arm-Mraspi2-m1024M-serialnull-serialstdio-kernelrtthread.elf-s-S

接着,另外开启一个env终端。

2d3996ce-5074-11eb-8b86-12bb97331649.png

依次输入下面的命令,其中dump到的文件是

dumpbinarymemoryrtt_dump0x80000x1000000

可以得到rtt_dump的dump的文件,大小为16MB。

4.1 trace32上的rt-thread插件及菜单栏

其中rtthread.t32为可以加载的t32文件,而rtthread.men为菜单文件。

task.configD:work
t-threadsp
aspberry-pi
aspi2
tthread.t32
menu.reprogramD:work
t-threadsp
aspberry-pi
aspi2
tthread.men

4.2 trace32 加载dump以及elf文件

可以通过如下的命令进行加载dump文件以及elf文件。

Data.LOAD.BinaryD:work
t-threadsp
aspberry-pi
aspi2
tt_dump0x8000
Data.LOAD.ElfD:work
t-threadsp
aspberry-pi
aspi2
tthread.elf

加载了符号文件与dump文件后,可以加载插件文件了。

2d8c07ba-5074-11eb-8b86-12bb97331649.png

此时,即可看到系统相关的信息了。

这样即使在离线的情况下,也能能够根据需要看到信息了。

5.总结

rt-thread在trace32上的扩展插件使用,可以非常方便的分析系统的状态。在实际的使用场合中,往往在测试阶段,不会用到在线的调试工具,此时当系统crash发生后,采用一些dump方案将内存dump出来,接着将dump文件与elf文件加载到trace32,并且利用一些系统级别的插件功能,即可完成系统的分析,非常的简洁和高效,文章中只描述了基础功能,一些复杂信息的分析需要根据需求进行挖掘。

责任编辑:xj

原文标题:trace32 for rt-thread support

文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。


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

    关注

    5186

    文章

    20145

    浏览量

    328751
  • trace32
    +关注

    关注

    0

    文章

    12

    浏览量

    13289
  • RT-Thread
    +关注

    关注

    32

    文章

    1540

    浏览量

    44273

原文标题:trace32 for rt-thread support

文章出处:【微信号:Embeded_IoT,微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以为修改index_all.json,发现联网的时候,会自动覆盖 另lastet版本
    发表于 09-16 06:06

    Windows上使用ENV工具开发基于先楫MCU的RT-Thread应用

    前言Env是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的menuconfig提供了简单
    的头像 发表于 08-29 12:22 950次阅读
    Windows上使用ENV工具开发基于先楫MCU的<b class='flag-5'>RT-Thread</b>应用

    在Ubuntu上开发基于先楫MCU的RT-Thread应用指南

    1、前言RT-ThreadEnv是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统
    的头像 发表于 08-29 12:22 1225次阅读
    在Ubuntu上开发基于先楫MCU的<b class='flag-5'>RT-Thread</b>应用指南

    【好书推荐】RT-Thread第20本相关书籍!《嵌入式实时操作系统RT-Thread原理与应用》| 技术集结

    01内容简介ContentSummary本书为读者提供了一个全面、系统RT-Thread学习指南,旨在帮助初学者及有经验的开发者掌握RT-Thread实时操作系统和STM32嵌入式微
    的头像 发表于 08-24 10:05 685次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>第20本相关书籍!《嵌入式实时操作<b class='flag-5'>系统</b><b class='flag-5'>RT-Thread</b>原理与应用》| 技术集结

    揭秘!基于RT-Thread探究“优先级反转”下的任务调度究竟是什么样的?| 技术集结

    本文将基于RT-Thread,结合RT-Trace调试器细化到实际任务调度的粒度,来调试并逐步讲解“优先级反转”的调度和运行逻辑。如果对RT-Trace感兴趣的可以看这篇文章:国产嵌入式调试器之光
    的头像 发表于 08-17 10:07 2799次阅读
    揭秘!基于<b class='flag-5'>RT-Thread</b>探究“优先级反转”下的任务调度究竟是什么样的?| 技术集结

    RT-Thread 遇上 Rust:安全内核 RusT-Thread 的诞生

    大家好,我们是中国科学技术大学操作系统原理与设计(H)课oooooS小组。这个项目是我们的课程大作业:参考RT-Thread架构,使用Rust搭建一个原生的嵌入式操作系统内核。初识Rust是因为xk
    的头像 发表于 08-02 11:03 3206次阅读
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全内核 RusT-<b class='flag-5'>Thread</b> 的诞生

    RT-Thread荣获2025优秀开源项目 | 新闻速递

    6月底,RT-Thread睿赛德受邀参与由上海开源信息技术协会主办的2025上海开源创新精英荟。上海市商委副主任张杰出席会议并致辞。RT-Thread嵌入式操作系统项目凭借其卓越的技术创新与开源生态
    的头像 发表于 07-04 09:04 2421次阅读
    <b class='flag-5'>RT-Thread</b>荣获2025优秀开源项目 | 新闻速递

    深度剖析 RT-Thread 线程调度流程

    RT-Thread调度第一个线程的主要流程分如下:rtthread_startup:RTT的启动函数,主要负责板级驱动,调度器,系统线程初始化,启动调度的工作
    的头像 发表于 06-25 18:24 1437次阅读
    深度剖析 <b class='flag-5'>RT-Thread</b> 线程调度流程

    揭秘RT-Thread上的AUTOSAR CP系统

    标准,同时保留RT-Thread的POSIX支持与可裁剪性,实现了通信隔离、诊断模块集成等关键技术突破,为车载系统提供高安全、可扩展的解决方案。车载电子系统与传统
    的头像 发表于 06-23 20:22 2939次阅读
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP<b class='flag-5'>系统</b>

    RT-Trace调试工具正式发布!

    5月20日,RT-Thread官方预售了首款调试工具RT-Trace,获得了开发者及企业用户的广泛关注与支持。RT-Trace调试工具结束预售阶段,即日起正式发布!RT-Trace是一
    的头像 发表于 06-18 12:02 1202次阅读
    <b class='flag-5'>RT-Trace</b>调试工具正式发布!

    人形机器人敏捷开发新路径:RT-Thread以软件底座破解复杂系统难题 | 新闻速递

    机器人行业解决方案负责人郭占鑫发表《从异构通信到虚拟化技术:RT-Thread助力机器人敏捷、可持续开发》主题演讲,系统阐述了RT-Thread操作系统在机器人领
    的头像 发表于 06-04 14:03 1029次阅读
    人形机器人敏捷开发新路径:<b class='flag-5'>RT-Thread</b>以软件底座破解复杂<b class='flag-5'>系统</b>难题 | 新闻速递

    2025 RT-Thread全球技术大会议程正式发布!

    。2024RT-Thread全球技术大会,由开源操作系统RT-Thread发起,并联合国内外领先企业的重磅嘉宾,携手国内外顶尖企业专家与超3万名线上参与者,共议边缘计算、嵌入式
    的头像 发表于 05-27 19:28 1069次阅读
    2025 <b class='flag-5'>RT-Thread</b>全球技术大会议程正式发布!

    【直播预告】《实时操作系统应用技术—基于RT-Thread与ARM的编程实践》教学脉络及资源简介

    直播预告直播主题:《实时操作系统应用技术—基于RT-Thread与ARM的编程实践》教学脉络及资源简介开放时间:2025年5月29日(周四)20:00主讲老师:王宜怀课程类型:视频直播观看平台
    的头像 发表于 05-26 17:50 1095次阅读
    【直播预告】《实时操作<b class='flag-5'>系统</b>应用技术—基于<b class='flag-5'>RT-Thread</b>与ARM的编程实践》教学脉络及资源简介

    RT-Thread审核团招募: 深度参与开源RTOS社区治理与演进

    的开源实时操作系统,正持续优化社区协作流程,现面向全球开发者招募审核团(ReviewTeam)成员,共同维护代码质量,推动RT-Thread生态繁荣发展!什么是RT
    的头像 发表于 05-21 18:02 1065次阅读
    <b class='flag-5'>RT-Thread</b>审核团招募: 深度参与开源RTOS社区治理与演进

    如何将RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默认支持的IDE只有IAR 和 Keil, 那如何将RT-Thread移植到NXP MCUXPressoIDE上呢?本文内容比较简单但稍有琐碎,希望对有需要的小伙伴有所帮助。
    的头像 发表于 02-13 10:37 2433次阅读
    如何将<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上