uboot调试指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Uboot调试参考指南
一、调试目的
Uboot的调试旨在通过观察uboot运行时状态来测试硬件问题。
二、调试步骤
1.修改代码
在uboot代码路径下,编辑uboot代码,需要做以下修改;
a.修改config.mk文件,添加以下两行内容:
AFLAGS += -Wa,-gdwarf2
CFLAGS += -g2 -gdwarf-2
b.修改. /arch/powerpc/lib/board.c文件
debug("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
printf("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
将debug改为printf,如上所示。
2.编译uboot
执行make BSC9131RDB_SYSCLK100_NAND,编译uboot
3.将编译好的u-boot-nand.bin(uboot image格式)及u-boot(elf格式文件)文件拷
贝出来
4.烧录uboot
将步骤3中保存的u-boot-nand.bin烧录到目标板中,烧录过程略。
5.建立工程
a.在cw界面,点击file->import, 选择code warrior -> Power architecture ELF
executable,如图1所示:
图1 建立elf工程
b.选择步骤3中保存的u-boot(elf格式文件),toolchain选择bareboard application,
target OS选择none,工程名字请根据需要设置,比如我的机器上设置为example,
点击next,如图2所示:
图2 载入elf文件c.选择处理器,9131,如图3所示
图3 选择处理器d.选择调试链接使用硬件,如图4所示
图4 选择调试链接使用硬件
e.配置硬件连接特性,图5所示
图5 配置工程连接特性
f.完成工程创建
6.匹配源代码
Uboot调试工程创建完成后,通过在修改uboot代码编译的uboot elf文件中已经包含符号表信息,其对应的源代码信息已经包含着elf文件中,因为我们的uboot编译是在linux服务器上执行,而cw的调试是在Windows机器上,因此,需要将uboot elf中的代码信息链接到windows的代码中。
A.指定某一个文件的连接关系,后续的连接都会自动对应起来;
图6 配置源代码映射
B.若双击其中某个文件显示找不到源代码,则指定源代码即可
7.编辑连接/调试
A.启动configuration配置,点击run->debug configuration,如图7所示
图7 配置调试
B.选择codewarrior attach进行配置,如图8所示
图8 配置cw attach
C.配置连接,选择连接,new,选择硬件或软件模拟器连接,选择PA,
BSC9131RDB->ROM,选择BSC9131RDB-core0_ROM_BSC9131PA NAND u-boot 32 all stage,如图9所示:
图9 配置硬件或者模拟器连接
D.在目标行,选择new目标,选择硬件或者软件模拟器连接->PA,选择9131,如
图10所示
图10 配置目标
E.点击next,选择初始化目标
${PA_TOOLS_HOME}/PA_Support/Initialization_Files/Qonverge/BSC9131RDB_uboo t_32.tcl,如图11所示
图11 选择初始化目标
F.选择内存初始化目标,点击内存选项卡,选择内存配置
BSC9131RDB_uboot_32_NAND.mem,如图12所示
图12 选择内存配置
G.点击finish,完成配置
H.在cw attach配置界面,在main选项卡中点击apply,应用配置
I.配置debugger备用加载地址,点击debugger选项卡,点击PIC选项卡,进行备
用加载地址配置,如图13所示:
图13 配置备用加载地址
J.填入0xfffff000,点击apply,点击debug,如图14所示,即可调试uboot启动第一阶段
图14 启动调试
K.执行上一步骤后调试界面出现,如图15所示,调试界面
图15 启动调试界面
L.点击复位按钮,在弹出的服务对话框中,确定初始化目标为BSC9131RDB_uboot_32.tcl,如图16所示
图16 执行复位
M.复位后即可执行单步调试,如图17所示
图17 执行服务后调试界面N.执行单步跟踪,可以调试start.S代码,如图17所示
图17 调试uboot启动第一阶段
三、调试阶段
Uboot的调试从内存布局的视图可以分为四个主要阶段:
1.Flash内执行阶段
2.使能MMU并在flash内执行
3.使能MMU并relocate到内存阶段
4.内存运行阶段
Uboot不同阶段的调试工程建立,连接建立的过程基本一致,不同之处是PIC的设置;
四、后续阶段调试
在第二部分建立的工程中已经可以调试第一阶段uboot,当单步执行到无法对应C代码时,即显示no source available for 0x****时,说明代码已经执行到第二阶段,如图18所示,需要进行第二阶段调试的配置;
图18 第二阶段开始
1.点击主菜单Windows->show view->debug shell,如图19所示
图19 调出debug shell窗口
2.在开始的debug shell中输入命令setpicloadaddr 0xff801000,如图20所示,则即可对
应C代码继续单步执行:
图20 设置第二阶段pic offset
3.继续单步调试,可以在汇编语言或者c语言出设置断点,继续执行;
4.当发生no source available for 0x*****时,说明已经进入uboot启动第三阶段,此时
如图21所示;
图20 uboot调试进入第三阶段
5.在debug shell窗口中设置setpicloadaddr 0xff800000,如图21所示
图21 设置第三阶段的pic offset
6.继续调试,当进入第四阶段运行时,在debug shell中输入setpicloadaddr 0x36f30000,
即可继续进行调试。
五、各阶段PIC offset的确定
1.启动阶段pic offset的确定
系统启动后,pc指针会指向0xfffffffc的地址执行,此地址上是一条跳转指令,会跳
转到0xfffff000地址执行。
如图22所示,此地址即为uboot的加载地址,因此需要
设置uboot pic offset为0xfffff000地址;
图22 第一阶段pic offset地址确定
2.第二阶段pic offset地址的确定
第二阶段与第三阶段的pic offset地址确定都是通过查看代码的方式来确定的。
将disassembly窗口向上滚动,发现到代码起始处地址即为当前阶段pic offset地址,如图22,图23所示:
图22 第二阶段pic offset地址确定
图23 第三阶段启动pic便宜地址确定
3.第四阶段pic offset地址的确定:
a)修改将uboot代码arch/powerpc/lib/board.c,将其中debug("Now running in
RAM - U-Boot at: %08lx\n", dest_addr);修改为printf输出;
b)在uboot启动过程中,查看串口输入,如图24所示,记下地址,即为ram运
行后的pic 偏移地址。
图24 第四阶段pic offset的确定
六、调试过程中其他需要注意的问题
1.注意代码的匹配,生成elf即uboot-nand.bin的代码为同一份代码,此特性在编译
时已经保证,无需赘述,但是往往windows调试环境上的代码与生成uboot的代码
不严格匹配,将导致软件调试时代码不匹配。
2.调试时需要初始化,即调试开始后往往需要按下reset按钮,才能如我所愿的进行
单步调试
3.Pic offset的确定,不同阶段的确定方法不同,而freescale并没有提供第一、第二、
第三阶段的确定方式,此方法非官方,不过在我的机器上可以调试工作。
4.调试过程中寄存器、内存、断点等调试方法不再赘述。