Arm Development Studio Morello Edition是Arm公司推出的专业级嵌入式开发工具套件,专为基于Arm架构的处理器开发而设计。作为一名长期从事Arm平台开发的工程师,我亲身体验过这套工具在复杂嵌入式系统调试中的强大能力。
Morello版本特别针对Armv8.2-A架构的CHERI扩展指令集进行了优化,提供了完整的开发调试支持。这套工具链包含以下几个核心组件:
在实际项目中,命令行调试接口往往比GUI操作更加高效,特别是在自动化测试和持续集成场景中。掌握这些调试命令可以显著提升开发效率,下面我将详细介绍关键命令的使用方法和实战技巧。
断点是调试过程中最常用的功能之一,Arm Debugger提供了多种灵活的断点设置方式:
bash复制# 在函数入口设置断点
break main
# 在指定文件行号设置断点
break source.c:45
# 设置条件断点(当x==10时触发)
break 117 if x == 10
# 设置硬件断点(适用于ROM调试)
hbreak 0x80000000
# 设置临时断点(命中后自动删除)
tbreak init_system
经验分享:
info breakpoints命令可以查看所有断点状态和ID控制程序执行是调试的基础,这些命令需要熟练掌握:
bash复制# 继续执行
continue
c # 简写形式
# 单步执行(步入函数)
step
s # 简写形式
# 单步执行(跳过函数)
next
n # 简写形式
# 执行到当前函数返回
finish
# 执行到指定位置
advance 0x80001000
# 暂停执行
interrupt
性能优化技巧:
advance比多次next更高效stepi和nexti可以单指令步进,适合汇编级调试set step-mode on可以确保步进时跳过编译器生成的调试代码内存访问是嵌入式调试的常见需求,Arm Debugger提供了强大的内存操作命令:
bash复制# 显示内存内容(多种格式)
x /10xw 0x20000000 # 10个32位字,16进制显示
x /20cb &buffer # 20字节,字符格式显示
# 修改内存内容
set *(int*)0x20000000 = 0x12345678
# 内存填充(常用于测试)
memory fill 0x20000000 0x20001000 0xAA
# 内存块操作(复制/比较)
memory copy 0x20000000 0x20001000 1024
memory compare 0x20000000 0x20001000 1024
安全注意事项:
info memory可以查看内存区域属性(RWX权限)Arm架构的安全扩展引入了多地址空间概念,调试时需要特别注意:
Armv7地址空间前缀:
S: Secure世界虚拟地址N: Non-secure世界虚拟地址SP: Secure世界物理地址NP: Non-secure世界物理地址Armv8地址空间前缀:
EL3: EL3异常级别地址EL2S: Secure EL2地址EL2N: Non-secure EL2地址EL1S: Secure EL1/EL0地址EL1N: Non-secure EL1/EL0地址bash复制# 在Secure世界设置观察点
awatch S:0x80001000
# 查看Non-secure世界寄存器
info registers N:$pc
# 修改EL3状态下的系统寄存器
set $elr_el3=0x80000000
# 物理内存访问示例
x /4x NP:0x10000000
调试经验:
mmu list translations命令可以查看当前地址映射关系bash复制# 查看所有核心状态
info cores
# 切换当前调试核心
core 1
# 对所有核心执行命令
core apply all info registers
# 设置核心专属断点
break main core 1
性能分析技巧:
trace start和trace dump可以捕获指令跟踪数据info os threads可以查看RTOS任务状态(需OS Awareness支持)bash复制# 保存当前断点到文件
save breakpoints breakpoints.cfg
# 脚本调试示例
define mytest
break init_sequence
run
while $pc != 0x80001000
stepi
end
info registers
end
# 执行脚本
source debug_script.ds
自动化调试建议:
echo和log file命令记录调试过程if和while实现条件调试逻辑症状:无法连接目标设备
show debug-agent输出确认连接参数set debug-agent speed=1000000)症状:断点无法触发
info breakpoints确认断点状态症状:内存读写失败
info memory检查地址权限set elf load-segments-at-p_paddr on)set debug-from off)set blocking-run-control on减少通信延迟对于系统级问题,可以组合使用:
trace start)info arm pmu)awatch/rwatch)info os系列命令)bash复制# 查看CHERI能力寄存器
info registers $c0
# 设置能力指针
set $c0 = __capability_create(0x80000000, 0x1000, "rwx")
# 检查能力权限
info capability $c0
在实际项目开发中,我建议将常用命令整理成速查表,并根据项目特点定制调试脚本。Arm Development Studio的命令行接口虽然学习曲线较陡,但一旦掌握就能极大提升调试效率,特别是在处理复杂嵌入式系统问题时。