jtag dump内存数据

40 篇文章 2 订阅

aarch32 linux4.14 zynq-7000

系统概率死机重启,关掉watchdog后,系统hang住,串口没打印任何异常log,且串口无法输入

判断系统状态,camera中断中添加blink led操作,死机的时候中断无法操作,一般情况软件的crash,串口总会有些log打印的,很奇怪这个死机没有串口log打印出来,推测在中断中遇到BUG_ON或者crash,或者硬件导致(bus 挂掉,dram不稳)

打开 kernel config如下后虽有看到ATOMIC_SLEEP 的call stack,修复后,仍然可以复现问题

CONFIG_KALLSYMS_ALL=y
CONFIG_DEBUG_INFO=y
CONFIG_MAGIC_SYSRQ=y
//tirgger t dump all task stack
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_DEBUG_ATOMIC_SLEEP=y

经历一番找规律与加log实验后没有大的收获,怀疑log在log buf中没有打印出来,决定上jtag dump死机时候的logbuf
zynq7020 jtag 使用注意事项(摘自zynq trm),看文档jtag 如下寄存器和配置(cascade mode),先检查自己当前的系统配置是否正确(MIO 2345 保证gpio全为0),可以在https://forums.xilinx.com/ 查询些jtag连接注意的事情

JTAG Enable/Disable Control
The DAP and TAP controllers are controlled by a few mechanisms.
• Cascade versus Independent mode
• Enable/disable DAP and TAP controllers
• Permanently disable JTAG
The JTAG connections can be enabled and disabled using the devcfg.CTRL [JTAG_CHAIN_DIS] bit. It
is set = 1 to disable JTAG to protect the PL from unwanted JTAG accesses.
The DAP controller is enabled by setting the devcfg.CTRL [DAP_EN] bit = 111 . Any other value causes
the DAP controller to be bypassed. This bit is lockable by setting the devcfg.LOCK [DBG_LOCK] bit =
1 . Once locked, it can only be unlocked with a POR reset.

确定jtag usb cable 指示灯为绿则代表硬件配置和驱动没有问题

本人安装的xilinx sdk图像界面打不开,只能用命令行的方式

xilinx的debug命令 xsdb 可以通过jtag attch上arm进行debug,wiki:https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_3/SDK_Doc/concepts/sdk_c_xsd_xsdb_commands.htm

source settings64.sh

xsdb

rlwrap: warning: your $TERM is 'xterm-256color' but rlwrap couldn't find it in the terminfo database. Expect some problems.
                                                                                
****** Xilinx System Debugger (XSDB) v2016.4
  **** Build date : Jan 23 2017-19:28:44
    ** Copyright 1986-2016 Xilinx, Inc. All Rights Reserved.


xsdb% connect                                                                   
attempting to launch hw_server
                                                                                
****** Xilinx hw_server v2016.4
  **** Build date : Jan 23 2017-19:28:34
    ** Copyright 1986-2016 Xilinx, Inc. All Rights Reserved.

INFO: hw_server application started
INFO: Use Ctrl-C to exit hw_server application

INFO: To connect to this hw_server instance use url: TCP:127.0.0.1:3121

tcfchan#0
xsdb% targets                                                                   
  1  APU                                                                        
     2  ARM Cortex-A9 MPCore #0 (Running)
     3  ARM Cortex-A9 MPCore #1 (Running)
  4  xc7z020
xsdb%

targets 出现两个核的信息说明已经attach上了arm DAP,获取log buf 地址,并dump其中内容
log_buf 的物理地址 = 虚拟地址 - 起始虚拟地址 + 起始物理地址,内核空间的虚拟地址与物理地址是一一对应的


readelf -s vmlinux |grep __log_buf
 11475: c0e9251c 0x40000 OBJECT  LOCAL  DEFAULT   29 __log_buf
//或者在板子上查看
cat /proc/kallsyms |grep __log_buf

//获取kernel 加载的物理地址 0x8000
mkimage -l uImage 
Image Name:   Linux-4.14.0-xilinx-99556-gc12b6
Created:      Fri Apr 24 20:03:19 2020
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    5821352 Bytes = 5684.91 kB = 5.55 MB
Load Address: 00008000
Entry Point:  00008000

//获取linux起始虚拟地址,vmlinux.lds 0xc0008000
//所以log_buf 的物理地址= 0xc0e9251c - 0xc0008000 + 00008000 = 0xe9251c
//https://www.xilinx.com/html_docs/xilinx2018_1/SDK_Doc/xsct/memory/reference_memory_mrd.html  查找mrd命令的详细用法
//xsdb console
xsdb% target 1 //attach cpu 1
xsdb% mrd -bin -file log.bin 0xe9251c 0x40000

//shell console
strings log.bin > log.txt

cat log.txt

查看到log buf中有null point的打印(证明了是logbuf 没有及时打印出来所以没看到的log),通过addr2line出问题的代码的位置即可,最终的问题现场是spi_lock_irq 里面出现了crash

除了dump logbuf还可以dump kernel  text 段来判断text 段是否被踩,dumpcpu寄存器确定cpu是否还在跑

JTAG(Joint Test Action Group)是一种用于测试和编程集成电路中的元器件的标准接口。因此,JTAG元器件数据手册是一份关于特定JTAG元器件所需的详细信息的文档。 JTAG元器件数据手册通常包含以下内容: 1. 元器件的引脚定义和功能:手册会列出每个引脚的名称、作用和功能说明。这些信息可以帮助工程师正确连接和配置元器件。 2. 元器件的电气特性:手册会提供元器件的工作电压、输入输出电平、电流消耗等电气特性的详细说明。这些信息对于设计和调试电路非常重要。 3. 元器件的功能描述和特性:手册会详细描述元器件的功能、性能和使用方法。例如,JTAG元器件可以用于测试电路的连通性和故障排除,还可以用于擦除、编程和读取电路中的数据。手册还可能提供一些实际应用案例来帮助工程师使用元器件。 4. 元器件的时序图和信号流程:手册会提供示意图、时序图和信号流程图,以显示元器件的内部工作原理和信号传输方式。这可以帮助工程师更好地理解和配置元器件。 5. 元器件的编程和测试指令:手册会列出元器件所支持的JTAG编程和测试指令,以及相应的操作描述和指令格式。这些指令可以帮助工程师编写控制程序和进行测试。 总之,JTAG元器件数据手册是一份重要的参考文档,提供了有关JTAG元器件的详细信息,帮助工程师正确使用和配置元器件,以及进行测试和编程操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenhuxi_yu

感谢投币,继续输出

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值