jtag调试ls1012a linux-5.3内核

Posted arm7star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jtag调试ls1012a linux-5.3内核相关的知识,希望对你有一定的参考价值。

1、jtag连接

        OK1012A-C jtag引脚如下:

        如果jlink的VCC对外输出供电,那么需要关闭,VCC对外供电导致jtag连接不上。使用引脚匹配的转接板连接开发板的jtag插座。使用交叉串口线连接开发板。

 2、linux-5.3内核编译

        -O0编译修改方法与树莓派4b编译修改方法一样。linux官网5.3不带网卡驱动,暂时不能使用网卡,官网的dtb也没有支持,暂时可以使用开发板出厂的dtb。要用jtag调试最好关掉CONFIG_ARM_CPUIDLE配置,开启CONFIG_ARM_CPUIDLE的时候,gdb的Ctrl+c暂停的时候大部分不会停在内核态,此时会导致jtag没有权限修改内核代码,没办法插入断点。

3、jtag调试内核

        (ls1012a资料在NXP官网注册一下就可以自由下载,比树莓派更详细,因此用来调试内核也比较方便,ls1012a带pcie、SATA接口,接口也算比较齐全了)

        ls1012a本来就是单核,不需要添加nosmp参数,只需要jtag能修改内核代码即可;jtag引脚默认就是jtag功能,也不需要修改IO口功能。

        openocd配置文件直接使用openocd官网的文件再加jlink配置即可。

https://github.com/openocd-org/openocd/blob/master/tcl/target/ls1012a.cfg

        openocd连接ls1012a:

        gdb 连接openocd gdbserver:

         连接上之后,内核正好运行在__cpu_do_idle函数,此时cpu处于内核态,jtag有权限修改内核的数据。

        在entity_tick函数设置断点并查看调用栈:

         因为使用的-O0编译,所以调用栈的参数一目了然,从handle_domain_irq函数参数可以看到定时器的硬件中断号为30,正是cortex-a53手册里面的中断号。

         查看cfs_rq的内容:

以上是关于jtag调试ls1012a linux-5.3内核的主要内容,如果未能解决你的问题,请参考以下文章

ARM工控主板LS1012A

基于NXP_LS1012A 芯片ARM工控主板

LS1012A丨一文看懂何谓“低耗高速佼佼者”

OpenOCD-JTAG调试

OpenOCD-JTAG调试

通过JTAG对比内核启动后text/rodata段内容