您当前的位置:首页 > 精选知识 > 正文

trace32(for_rt-thread_support的基本使用及系统插件原理)

trace32(for_rt-thread_support的基本使用及系统插件原理)

rt-thread支持1的Trace32。概观

2.2.trace32的基本用法

3.3.trace32系统插件的原理

4.离线跟踪32获得rt线程状态信息

4.1 rt-trace 32上的线程插件和菜单栏

4.2 trace32加载转储和elf文件

5.摘要

1.概述劳特巴赫是世界美国最大的完整、模块化和可扩展微处理器开发工具生产商。自1979年以来,劳特巴赫在制造世界级调试器和实时跟踪方面拥有丰富的经验。产品线中的TRACE32广为大众所知,是很多手机厂商和芯片厂商的必备工具。

就嵌入式底层开发而言,不使用trace32,你永远也不会期待开发调试的便捷和它强大的功能。

幸运的是,我在某个芯片的支持上学会了使用trace32工具,并为rt-thread编写了一些trace32的插件。现在,我我来整理一下我的经验和实现细节。

2.trace32的基本用法。劳特巴赫已经为Trace 32的使用提供了相当完整的文档支持,非常容易观察到芯片架构分析、软件重入分析、数据观察、操作系统状态和各种符号信息等。它的调试功能很强大,非常好用,但是trace32因为硬件贵,很难长时间使用。

但是trace32也提供了相关的仿真版本,所以这里用TRACE32模拟器的版本来演示离线功能。

您可以直接选择或输入命令。

首先选择CPU型号。

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

然后就可以进入system.up启动了。

导入elf符号

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

此时,您只能通过结合转储文件和elf符号来定位当前的程序执行状态。

从上面的功能分析来看,它主要由两部分组成:

1.菜单栏(菜单栏)

2.显示信息窗口

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

3.trace32系统插件原理。Trace 32是一个工具,提供各种芯片和操作系统插件。同时还可以根据这些插件显示所需信息。

在操作系统层面,国外很多操作系统都支持RTOS,比如Linux,freertos或者ucosii,所以我在此基础上做了rt-thread支持。

要支持它,需要得到劳特巴赫官方的支持,提供EDK,并对rt-thread系统的底层有深入的了解。特别是在系统的全局容器对象、线程和IPC结构数组布局非常清晰之后,我们就可以扩展和开发插件了。

其基本原则可以总结如下:

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

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

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

4.rt-通过脱机跟踪获得的线程状态信息32。离线分析部分,转储方案根据具体硬件变化而变化,这里不做描述。当程序动态运行时,只有qemu用于转储数据信息。

为了简单起见,这里使用树莓Pi 2b的rt-thread bsp进行演示。

Raspi2在qemu上开始,在开始之前必须向程序集添加一个句子。

MRCP 15,0,r0,c0,5和r0,# 3bne _halt where _ halt实现如下:

_halt:wfeb_halt在此暂停其他核心。

然后在env工具下输入scons进行编译,输入以下命令测试qemu的执行。

QEMU-system-arm-MRA pi2-m 1024m-serial null-serial stdio-kernelrthread . elf可以看到以下效果:

然后进入调试阶段。

QEMU-system-arm-MRA SPI 2-m 1024m-serial null-serial stdio-kernel rthread . elf-s-s然后,打开另一个env终端。

依次输入以下命令,其中转储文件位于

pbinarymemoryrtt _ dump0x 80000 x 100000可以获取大小为16MB的rtt _ dump的转储文件。

4.1 trace 32上的rt-thread插件和菜单栏,其中rtthread.t32是可加载的t32文件,rtthread.men是菜单文件。

task . configd:work-thread spaspberry-pia SPI 2 thread . t32 menu . programme d:work-thread spaspberry-pia SPI 2 thread . men 4.2 trace 32加载转储和elf文件可以通过以下命令加载。

data . load . binaryd:work-threadspapberry-pias pi 2 TT _ dump0x 8000 data . load . elfd:work-threadspapberry-pias pi 2 thread . elf加载完符号文件和转储文件后,就可以加载插件文件了。

此时,您可以看到与系统相关的信息。

这样,即使离线,也可以根据需要看到信息。

5.总结一下trace32上rt-thread扩展插件的使用,可以非常方便的分析系统的状态。在实际使用场合中,在线调试工具往往不会在测试阶段使用。此时,当系统崩溃时,采用一些转储方案来转储内存,然后将转储文件和elf文件加载到trace32中。通过使用一些系统级的插件函数,就可以完成系统分析,非常简洁高效。本文只描述基本功能,一些复杂的信息需要根据需求进行挖掘。

标签:系统插件转储


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: remember是什么意思,remember什么意思(“记得告诉我”别再用Remember)

下一篇: 冬红海棠果实能吃吗(冬红海棠果可以吃吗)



推荐阅读