ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍

文章目录

    • 背景
    • 1.1 Trace 启动
      • 1.1.1 Trace32 系统相关设置
    • 1.2 Trace 常用命令
      • 1.2.2 加在bin文件
      • 1.2.3 寄存器常用命令
      • 1.2.4 内存(寄存器)数据修改
    • 1.3 变量相关命令

背景

Veloce是一款基于FPGA的高速仿真器,可用于验证芯片设计和软件开发, 它和 Trace32 都可以用于仿真联调。具体使用方法需要根据应用场景和需求进行设置和调试。一般来说,可以在Veloce中加载Trace32调试器,并通过Trace32对仿真过程进行监控和调试。同时,也可以在Trace32中加载Veloce仿真器,并通过Veloce对芯片设计和软件开发进行验证和测试。

1.1 Trace 启动

在芯片开发前期阶段(pre silicon) 也需要使用Trace32 来debug一些问题,这个时候通常是veloce与Trace32 simulation进行联合调试,其中 trace32的使用可以参考下面内容:

  • 需要在veloce中保证cpu已经上电,并开始执行程序之后才可以启动trace32,如下:
    ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第1张图片

  • Veloce 执行成功后,保持 cpu running 状态,然后执行命令 busb /veloce//xxx/tm32marm -c t32_xxx_jtag.t32 来启动 trace32, 打开trace32 后其界面如 图-1

    ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第2张图片

图-1

  • 在 trace32启动后,把启动的配置写成 cmm 格式的脚本,这样打开 trace32 软件后点击 File --> Run Script 打开你的启动脚本,如下图1-2 所示:

    ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第3张图片
图 1 - 2

ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第4张图片

图 1 - 3

  • 在配置脚本执行完成后,可以看到此时trace32 还不能使用,这个时候需要先进行 attach 操作,如下图 1-4:
    ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第5张图片
图 1 - 4

  • 在attach完成之后可以看到此时已经处于running 状态了, 如图 1-5
    ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第6张图片
图 1 - 5

  • 在执行trace32的命令时需要先将cpu stop住,如下图 1-6
    ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32 介绍_第7张图片
图 1- 6

1.1.1 Trace32 系统相关设置

可以在cmm脚本中进行系统的一些配置,如下简单列出一些:

  • system.cpu cortex-m7 – 设置CPU型号;
  • system.memaccess nexus – 运行时访问内存;
  • system.cpuaccess enable – 运行时访问cpu;
  • system.reset – 复位目标芯片;
  • system.up – 连接目标芯片(目标芯片会复位重启);
  • system.down – 断开目标芯片;
  • system.attach – 连接已经运行的目标芯片,不复位,常用于死机调试。

1.2 Trace 常用命令

1.2.2 加在bin文件

(1) 加载binary文件命令,把指定文件加载到指定地址,比如我们抓取到的故障现场的快照 ramdump。除了起始地址外,还可以加上一个range参数,作为加载范围。加载时会以binary的大小和range之间选小值作为限制。

data.load.binary DDRCS0_0.BIN 0x80000000

(2) 加载elf文件命令,把指定的elf文件加载到目标设备或者仿真设备的0x1488800000地址上去。elf文件在编译时会把源文件的路径加入到elf文件中,我们后面加上/nocode代表没有对应的sourcecode,trace32就不会去对应目录去查找源文件了。当然我们也可以通过/path来指定sourcecode目录。比如:

data.load.elf ../../vmlinux 0x1488800000 /nocode

(3) 加载elf文件到指定地址,并且指定了和该 elf 对应的 source code目录。

data.load.elf ../../vmlinux 0x1488800000 /path  /home/xie/linux-4.4/

1.2.3 寄存器常用命令

(1)打印 D0 寄存器中的值。

PRINT Register(D0)

(2) 设置寄存器的值。这条的含义是设置 Non-secure bit1

Register.Set NS 1

如 设置CPSR寄存器为0x3C5Register.Set CPSR 0x3C5, r.sregister.set 的缩写。

(3) 查看常用寄存器的值: Register.view

1.2.4 内存(寄存器)数据修改

data.set e:0xFFFC132C 0x0100

per.set e:0xFFFC132C 0x0100  //寄存器实际上也是映射到内存地址的

注意运行时修改需要加 e 参数

1.3 变量相关命令

Trace32 观察变量有多种方式,注意 e 参数 表示允许运行时读取内存:

  • 方法一:
    var.watch %e var1 … varn 观察,e 为 cpu 运行期间允许读取

  • 方法二:
    var.view %e var1 … varn 观察,e 为 cpu 运行期间允许读取

  • 方法三:
    data.dump e:(var1) 观察,e为cpu运行期间允许读取
    此方法不算很友好,因为观察的是内存地址里的数据

推荐阅读:
https://blog.csdn.net/u010875635/article/details/84875567

你可能感兴趣的:(#,ARM,Coresight,系列,arm开发,fpga开发)