01.裸板调试

1. 点灯法

 1 led_flicker:
 2     ldr r0,=0x56000050
 3     ldr r1,=(1<<(4*2))
 4     str r1,[r0]
 5     ldr r0,=0x56000054
 6     ldr r1,=0
 7     ldr r2,(1<<4)
 8 loop:
 9     str r1,[r0]
10     bl delay
11     str r2,[r0]
12     bl delay
13     b loop
14 delay:
15     ldr r3,=30000
16 1b:
17     sub r3,r3,#1
18     cmp r3,#0
19     bne 1b
20     mov pc,lr

可直接使用bl led_flicker来使用该程序。

2. 串口打印及栈初步分析
2.1 使用的前提是串口已经初始化完毕且可以正常使用

  直接在需要定位错误的地方加上printk语句,看串口是否有相应的输出即可。
2.2 nand_setup的分析

  a.栈和局部变量是临时生成的

  b.局部变量的初始值在哪?函数一开始的部分读出这些值,用来初始化局部变量


3. JTAG调试器

工作原理:

  a.CPU发出的地址/数据信号都通过JTAG

  b.JTAG可以控制CPU

    当Addr=xxx,停止CPU(硬件断点,两个,主要用于调试nor/rom上的程序)

    当Data=xxx,停止CPU(软件断点,无数个,该地址是可写的,所以无法调试nor/rom上的程序)

  c.让JTAG直接访问外设
3.1 命令行调试

3.2 源码级别的调试
前提
a. 程序必须已经重定位好,位于它的链接地址
a.1 如果程序的链接地址是SDRAM, 使用openocd初始化SDRAM
a.2 使用arm-linux-gdb/arm-elf-gdb下载程序

b. 链接脚本必须把text,rodata,data,bss等分开存放
c. 被调试的程序为ELF格式,内含调试信息(即编译时有-g选项)

posted @ 2017-01-30 21:59  wade_linux  阅读(358)  评论(0编辑  收藏  举报