匿名
未登录
登录
百问网嵌入式Linux wiki
搜索
查看“TF-A - How to debug”的源代码
来自百问网嵌入式Linux wiki
名字空间
页面
讨论
更多
更多
页面选项
Read
查看源代码
历史
←
TF-A - How to debug
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
__TOC__ == Article Purpose == 本文介绍了如何调试TF-A固件。<br> 调试专门链接到TrustZone环境。 调试TF-A的主要方法有两种,一种是使用代码内部的跟踪,另一种是使用JTAG来访问安全环境。 这里的重点是集成在OpenSTLinux中的解决方案:通过gdb调试(基于ST-Link或JTAG)。 == Debugging == === TF-A Version number === 调试的起点是确定目标中使用的TF-A版本。 调试和发行版本以以下格式显示在控制台上:<br> <pre> NOTICE: BL2: v2.0(debug):<tag> </pre> * v2.0是使用的TF-A版本。 * (debug) :启用构建模式。 * <tag> : 在构建时由'''git describe'''命令生成的Git参考。 === Debug with traces === TF-A允许启用RELEASE和DEBUG模式: * RELEASE模式在默认LOG_LEVEL为 20 的情况下构建,仅打印ERROR和NOTICE的跟踪 * DEBUG模式启用 -g 构建标志(用于调试构建对象),并将LOG_LEVEL缺省为 40 使用DEBUG LOG_LEVEL,您可以添加控制台跟踪,如错误、通知、警告或信息。 请参阅'''include/common/debug.h'''. {{Warning| 您无法将LOG_LEVEL设置为50(最高级别)来构建代码; 跟踪太多,并且TF-A不适合SYSRAM。如果需要,将某些VERBOSE设置更改为INFO。}} 对于这两种模式,必须确保正确配置了UART: * BL2: 默认情况下启用UART跟踪 * BL32: 默认情况下启用UART跟踪<br> 在stdout-path属性的设备树的所选节点中定义的控制台上可以找到跟踪和错误: <pre> chosen { stdout-path = "serial0:115200n8"; }; </pre> === Debug with GDB === TF-A在SYSRAM中运行,并在CPU安全状态下执行。根据板卡的不同,可以使用ST-Link或JTAG输出通过JTAG调试TF-A。 ==== Debug boot sequence ==== BL2引导阶段仅在引导序列期间执行。要闯入BL2,请连接到目标并闯入。 将符号加载到正确的偏移量: <pre> (gdb) add-symbol-file <path_to_build_folder>/tf-a-bl2.elf (or bl2.elf) <load_address> </pre> 可以在生成的 '''tf-a-stm32mp157c-<board>.map''' 文件中找到BL2和BL32加载地址: <pre> ... *fill* 0x000000002ffce000 0x5000 0x000000002ffd3000 __BL2_IMAGE_START__ = . -> BL2 Load address *(.bl2_image*) .bl2_image 0x000000002ffd3000 0x1166c build/stm32mp1/stm32mp1.o 0x000000002ffe466c __BL2_IMAGE_END__ = . 0x0000000000024b00 . = 0x24b00 *fill* 0x000000002ffe466c 0x2994 0x000000002ffe7000 __BL32_IMAGE_START__ = . -> BL32 Load address *(.bl32_image*) .bl32_image 0x000000002ffe7000 0x1744c build/stm32mp1/stm32mp1.o 0x000000002fffe44c __BL32_IMAGE_END__ = . 0x000000002fffe44c __DATA_END__ = . 0x000000002fffe44c __TF_END__ = . ... </pre> 在此示例中: * BL2 加载地址为 0x2ffd3000 * BL32 加载地址为 0x2ffe7000 您可以直接加载所有符号: <pre> (gdb) add-symbol-file <path_to_build_folder>/tf-a-bl2.elf 0x2ffd3000 (gdb) add-symbol-file <path_to_build_folder>/tf-a-bl32.elf 0x2ffe7000 </pre> 设置您的硬件断点并重置: <pre> (gdb) hb bl2_early_platform_setup (gdb) monitor reset halt </pre> ==== Debugging during runtime execution ==== 一旦运行[[U-Boot overview|U-Boot]] 或Linux内核,就无法访问安全内存或区域,但可以中断,并在SMC处理程序中设置硬件断点(在BL32中)。一旦[[GDB]] 进入安全区域并到达中断指令,它就会中断。一旦在安全监视器中暂停,[[GDB]] 可以访问安全资源,如IP或内存。 例如,可以闯入内核: <pre> (gdb) hb stm32mp1_svc_smc_handler (gdb) continue </pre> 在第一次进行SMC调用时,[[GDB]]中断了BL32中的stm32mp1_svc_smc_handler()条目。
该页面使用的模板:
模板:STPink
(
查看源代码
)
模板:Warning
(
查看源代码
)
返回至
TF-A - How to debug
。
导航
导航
WIKI首页
官方店铺
资料下载
交流社区
所有页面
所有产品
MPU-Linux开发板
MCU-单片机开发板
Linux开发系列视频
单片机开发系列视频
所有模块配件
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志