JLINK+ECLIPSE 调试树莓派

树莓派的JTAG口 没有直接调出来。需要用代码控制芯片开启。

http://sysprogs.com/VisualKernel/tutorials/raspberry/jtagsetup/



强烈建议使用arm-none-eabihf-gdb。比树莓派官方提供的要稳定。不会crash。ubuntu下面的下载命令

sudo apt-get -o Dpkg::Options::="--force-overwrite" install gdb-arm-none-eabi

否则会出问题。

我用树莓派官方的arm-linux-gnueabihf-gdb手工调试可以。用eclipse的zylincdt插件调试uboot2016的时候就crash.之前版本的uboot都可以



可以在uboot中cmd执行的里面写入下面的代码


void SetGPIOFunction(int GPIO, int functionCode)
{
int registerIndex = GPIO / 10;
int bit = (GPIO % 10) * 3;


unsigned* m_pAltFunctionRegisters=0x20000000+0x200000;


unsigned oldValue = m_pAltFunctionRegisters[registerIndex];
unsigned mask = 0b111 << bit;
printf("sizeof(unsigned)=%d m_pAltFunctionRegisters=%p *=%p\n",sizeof(unsigned),m_pAltFunctionRegisters,m_pAltFunctionRegisters[registerIndex]);
printf("Changing function of GPIO%d from %x to %x -->index=%d %x\n", GPIO, (oldValue >> bit) & 0b111, functionCode,registerIndex,((oldValue & ~mask) | ((functionCode << bit) & mask)));
m_pAltFunctionRegisters[registerIndex] = (oldValue & ~mask) | ((functionCode << bit) & mask);


    printf("_start_addr________________=%p\n",SetGPIOFunction);
}
#define GPIO_ALT_FUNCTION_4 0b011
#define GPIO_ALT_FUNCTION_5 0b010
void enable_jtag_raspberry()
{


   printf("begin enable  jtag_raspberry\n");


    SetGPIOFunction(22, GPIO_ALT_FUNCTION_4);
    SetGPIOFunction(4,  GPIO_ALT_FUNCTION_5);
    SetGPIOFunction(27, GPIO_ALT_FUNCTION_4);
    SetGPIOFunction(25, GPIO_ALT_FUNCTION_4);
    SetGPIOFunction(23, GPIO_ALT_FUNCTION_4);
    SetGPIOFunction(24, GPIO_ALT_FUNCTION_4);


   printf("end enable  jtag_raspberry\n");
}


在uboot的main.c的main_loop函数里面的for循环之前执行

enable_jtag_raspberry开启jtag调试





JTAG接线如下






我自己的T板子

T型板


P7-P2依次是黄 泥 红 绿蓝橙

黑色接3.3灰色接GND



下载JLINK的ubuntu开发包

https://www.segger.com/downloads/jlink


下载使用手册

https://www.segger.com/downloads/jlink/UM08001_JLink.pdf




1 直接使用JLinkExe调试

直接运行./JLinkExe



输入connect 回车。显示输入arm类型。根据你的arm选择类型

我的是arm11




接下来选择调试口。选择J

再输入-1检测JTAG链位置

在输入速度。我选择的是100 KHZ

这样就接上了



接下来输入jlink的指令就可以调试了。

初始的寄存器是这样的




2使用gdb来调试

直接执行服务端 指定调试口为jtag device为arm 11

./JLinkGDBServer -if Jtag -device arm11 




可以看到gdb在等待链接。端口为2331

target 为arm11


接下来就是gdb来连接

我这里用的树莓派的gdb

执行./arm-linux-gnueabihf-gdb

然后输入target remote:2331


发现两边都有反应了。gbdserver和gdb





接下来可以在gdb命令行里面开始调试了

除开使用ddb的调试命令。还可以通过monitor来执行 jlink支持的一些命令。

具体命令查看3.3.3
J-Link software and documentation package
Supported remote (monitor) commands



注意zylincdt和eclipse Mars是匹配的。也就是最多支持4.5版本。


3 使用eclipse调试uboot

首先配置eclipse的zylin插件

在eclipse的 help->install new software里面填写插件路径

zylincdt - http://opensource.zylin.com/zylincdt

选择cdt插件。点击下一步安装。



安装时候eclipse会在右下角有进度条,不要中途关闭了。我之前就是没注意这个右下角的进度条。以为没有安装成功。直接关闭重来。装了几次,才发现这个问题。

安装好了以后,会在项目->Debug as->Debug configuration里面看到这个插件



uboot在eclipse里面的配置和编译就不多说了。重点说一下eclipse jlink配置

在Zylin Embedded  debug(Natinve)里面邮件新建一个调试选项


Main选项卡里面 Project可选。填写名字

c/c++ Application里面选择需要调试的文件。我们这里选择编译出来的u-boot。也就是uboot elf文件




debugger选项里面

stop on start up at 填写_start。也就是初始中断在在start.S里面

GDB debugger填写树莓派gbd工具的位置

其他留空



在Commads选项卡中填写gbd初始化的命令。

我这里是

target remote localhost:2331
monitor reset
monitor sleep 10
load
break _start

还可以写一些其他的配置命令。

jlink很重要的是speed的控制。如果speed不合适的话很容易出问题。



monitor reset
monitor speed 4000
load
symbol-file
monitor reg cpsr=0xd3
monitor reg pc=0x8000
break *0x8000





(如果没发中断在特定的位置,可能是没有符号表。用readelf查看是否有符号信息,在uboot的makefile编译选项中添加特定的编译指令)



source选项卡内。填写源码搜索目录。也就是uboot的源码目录




点击apply 应用。然后点击debug就开始调试了

eclipse的console里面可以看到前面command的作用



已经断点短再start.s里面了。接下来可以f5 单步。f6步过 等等调试了




想要在某些地方下断点。可以直接双击源码目录的line行号。或者右边反汇编窗口的行号

下断点



下完断点后按F8 resume 执行到断点就会停下来

F5步入

F6步过


除了直接操作eclipse的调试。也可以手工通过输入命令来执行调试。输入的位置在就在console页面下



 


1调试内核的时候speed 很重要。因为如果speed有问题。cpu可能停不下来。

因此调试内核或者uboot的时候如果cpu停不下来。第一是考虑speed的问题。

第二是考虑代码是不是跑飞了


跑飞了可以通过 暂停 和stop 来操作。

也可以通过monitor halt来操作。


调试uboot的时候使用break xxxx为何无效?

因为uboot对于代码进行了搬移。所以断点还是原来旧的代码地方,还需要到定位的新的地方去bp才行。




这里树莓派调试内核的command是

填写在Zylin Embedded的commands选项里面的是

target remote localhost:2331
monitor reset
monitor sleep 10
monitor speed 4000
monitor reg cpsr=0xd3
load
monitor speed auto


首先设置下载速度是4000KHZ 这样下载内核的时候就快一些。

load以后设置speed为auto。貌似是2000。这样就好调试了


2内核符号很重要。编译内核的时候一定要记得加上DEBUG编译选项。我这里是通过直接修改.config做到的

CONFIG_DEBUG_INFO是最主要的。如果这个配置不打开。eclipse无法找到调试符号,比如文本和行号等等。

CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_REDUCED=n
CONFIG_GDB_SCRIPTS=n
CONFIG_DEBUG_INFO_SPLIT=n
CONFIG_DEBUG_INFO_DWARF4=n






  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值