U-Boot-2009-03移植笔记(调试篇)
2013-05-28 17:28
246 查看
对于驱动开发,系统移植来说,我们的代码可能会出现无数种bug,但是结果只有一个:驱动失败!本文简单介绍以下openjtag的裸机调试.
开发环境
操作系统:ubuntu10.04
硬件设备:xinna2440
软件:openocd 0.3.1、u-boot-2009-03
调试方法
首先我们必须得对我们的程序每条指令位于哪个地址了如指掌,所以,我们需要对我们编译好的u-boot进行反编译:使用arm-linux-objdump命令。
在u-boot源码根目录,运行:arm-linux-objdump -d u-boot > u-boot.S,这样,反编译后的代码,就在u-boot.S中,我们用vim打开看看
很清楚的看到,我们的程序在0x33f80090处调用了nand_init_ll函数,那么我们就在这里设置好断点。但是有一点要注意,我们程序的链接起始地址是0x33f80000,所以,对于地址0x33f80090在sram中的真实地址是0x00000090,所以我们要在地址0x00000090处设置断点.
在openocd中,当你halt住cpu之后,可以使用bp命令设置断点
设置好断点之后,我们直接输入bp命令,不加任何参数,可以看到目前设置了几个断点。现在,我们把cpu的pc寄存器指向0x0地址,准备从头运行程序
然后,我们使用resume命令,让cpu恢复运行状态,然后程序会在0x00000090处停下来,如下图:
然后我们使用step命令,可以让程序单步执行
用这种调试方法,我们可以精确的知道,我们的程序跑到了哪里,对我们诊断问题有非常大的帮助。
开发环境
操作系统:ubuntu10.04
硬件设备:xinna2440
软件:openocd 0.3.1、u-boot-2009-03
调试方法
首先我们必须得对我们的程序每条指令位于哪个地址了如指掌,所以,我们需要对我们编译好的u-boot进行反编译:使用arm-linux-objdump命令。
在u-boot源码根目录,运行:arm-linux-objdump -d u-boot > u-boot.S,这样,反编译后的代码,就在u-boot.S中,我们用vim打开看看
很清楚的看到,我们的程序在0x33f80090处调用了nand_init_ll函数,那么我们就在这里设置好断点。但是有一点要注意,我们程序的链接起始地址是0x33f80000,所以,对于地址0x33f80090在sram中的真实地址是0x00000090,所以我们要在地址0x00000090处设置断点.
在openocd中,当你halt住cpu之后,可以使用bp命令设置断点
设置好断点之后,我们直接输入bp命令,不加任何参数,可以看到目前设置了几个断点。现在,我们把cpu的pc寄存器指向0x0地址,准备从头运行程序
然后,我们使用resume命令,让cpu恢复运行状态,然后程序会在0x00000090处停下来,如下图:
然后我们使用step命令,可以让程序单步执行
用这种调试方法,我们可以精确的知道,我们的程序跑到了哪里,对我们诊断问题有非常大的帮助。
相关文章推荐
- U-Boot-2009-03移植笔记(从Nandflash启动一)
- U-Boot-2009-03移植笔记(第二阶段移植准备)
- U-Boot-2009-03移植笔记(从Nandflash启动二)
- U-Boot-2009-03移植笔记(目录:持续更新)
- U-Boot-2009-03移植笔记(移植准备)
- U-Boot-2009-03移植笔记(第二阶段:时钟!)
- U-Boot-2009-03移植笔记(点亮第一展灯)
- U-Boot-2009-03移植笔记(移植准备)
- U-Boot-2009-03移植笔记(移植准备)
- U-Boot-2009-03移植笔记(点亮第一展灯)
- 调试U-Boot笔记(二)
- AM335x(TQ335x)学习笔记——u-boot-2014.10移植
- u-boot-2009.08移植笔记三,平台TQ2440 .
- 【TINY4412】U-BOOT移植笔记:(6)串口驱动
- 【TINY4412】U-BOOT移植笔记:(11)LED驱动
- u-boot移植到mini2440,增加DM9000驱动的学习笔记
- TQIMAX6q调试笔记三:EETI的egalax-i2c触摸屏移植
- 嵌入式学习笔记101-uboot_1.1.6移植(1)
- u-boot移植总结(二)LED点灯调试 和 u-boot加载地址
- OK2440 uboot移植笔记【一】