1. 點燈法 可直接使用bl led_flicker來使用該程式。2. 串口列印及棧初步分析2.1 使用的前提是串口已經初始化完畢且可以正常使用 直接在需要定位錯誤的地方加上printk語句,看串口是否有相應的輸出即可。2.2 nand_setup的分析 a.棧和局部變數是臨時生成的 b.局部變數的 ...
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選項)