JTAG调试内核和gdbserver冲突问题。

在进行linux 内核使用jtag ,应用使用gdbserver调试的时候,应用的断点被jtag命中。

发现应用只要bkpt命令,则会导致jtag响应,估计和jtag的驱动监控breakpoint有关。以为是自己内核的断点。

 

解决方式1:更新驱动,需要中天配合。暂不考虑。

               2:修改gdbserver代码(原理:gdbserver修改了断点指令到0(bkpt的指令就是0!),我改为修改为9(trap 1)),

                    因无gdbserver源码,暂不考虑

               3,   内核修改断点使用嵌入点。不使用7的断点,使用trap1(trap0是系统调用,trap2,trap3已经被使用。所以使用trap1).

                     PTRACE_POKETEXT中截获,当发现本来要改为0的,强制改为9.

 

case PTRACE_POKETEXT:   /* write the word at location addr. */
_flush_cache_all ();

{
//printk("set break!,addr %x data %x\n",addr,data);
}
if((data&0xffff)==0)
{
data+=9;
}
else  if((data&0xffff0000)==0)
{
data+=9<<16;
}
{
printk("set datafinish!,addr %x data %x\n",addr,data);
}
ret = generic_ptrace_pokedata(child, addr, data);
break;

 

测试OK。两边互不影响。

 

 

yeh!

                     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值