参考文献

LINUX内核调试过程,使用openjlink

 andylance 贡献于2013-02-19 | 2K 次阅读
 
 

LINUX内核调试过程使用openjlink

多谢南方,让我能够顺利进入内核的调试界面,此教程也是请教南方的,我整理了一下发布上来,我想应该还有地方有错误,不过运行是正常了,希望大家指点。

1   通过uboot下载linux内核 nfs 0x32000000 192.168.0.10:/mnt/disk2/uImage

192.168.0.10linux内核的IP地址

/mnt/disk2/uImage   是内核所在目录

2   使用openJTAT telnet上去,

执行以下命令

> halt       暂停开发板,显示如下:

target state: halted

target halted in ARM state due to debug request, current mode: Supervisor

cpsr: 0x40000053 pc: 0x33f9e2f8

MMU: disabled, D-Cache: disabled, I-Cache: enabled

> bp          查看是否有断点,有的话就rbp删除

> arm7_9 sw_bkpts enable    使能软中断,占用1个断点,openOCD中只能有两个断点

software breakpoints enabled

> bp 0x30008000 4 hw  设置30008000处断点

breakpoint added at address 0x30008000

> bp            查看断点是否设置成功

0x30008000, 0x4, 0

> resume          恢复到uboot中继续运行

 

 

3、在uboot中执行命令   bootm 0x32000000

   看见内核停止在这里

   Hx> bootm 32000000

## Booting image at 32000000 ...

   Image Name:   Linux-2.6.22.6

   Created:      2009-02-21  10:53:25 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    1849468 Bytes =  1.8 MB

   Load Address: 30008000

   Entry Point:  30008000

   Verifying Checksum ... OK

OK

 

Starting kernel ...               停止在这里不动了。

 

4、进入openOCD telnet输入命令:

> resume

target state: halted

target halted in ARM state due to breakpoint, current mode: Supervisor

cpsr: 0x400000d3 pc: 0x30008000

MMU: disabled, D-Cache: disabled, I-Cache: enabled

>

   这时linux kernel输出信息:

 Uncompressing Linux............................................................ done, booting the kernel.

依然在TELNET中输入命令:

> halt

> rbp 0x30008000   删除断点,因为只能有两个断点,前面已经开了一个软件断点

> bp                查看

> bp 0x30008074 4 hw设置断点,这个断点是根据vmlinux的反汇编代码找到的,

     是根据反汇编代码,得知此处是开启MMU

breakpoint added at address 0x30008074

> resume          恢复运行

target state: halted           

target halted in ARM state due to breakpoint, current mode: Supervisor

cpsr: 0x200000d3 pc: 0x30008074

MMU: enabled, D-Cache: enabled, I-Cache: enabled    

>

这时已经开启了MMU,如果没有显示MMU: enabled,可以输入step命令,似乎不显示的原因是:信息没有得到更新,输入STEP后,命令可以得到更新。

开启MMU接下来就可以在eclipse中调试linux内核的第二阶段代码了。

 

 

 

target remote localhost:3333

monitor halt

monitor step

monitor rbp 0x30008074

break start_kernel

continue

posted @ 2019-04-12 20:12  eastgeneral  阅读(205)  评论(0编辑  收藏  举报