uboot调试指南Word文档格式.docx
《uboot调试指南Word文档格式.docx》由会员分享,可在线阅读,更多相关《uboot调试指南Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
debug("
NowrunninginRAM-U-Bootat:
%08lx\n"
dest_addr);
printf("
将debug改为printf,如上所示。
2.编译uboot
执行makeBSC9131RDB_SYSCLK100_NAND,编译uboot
3.将编译好的u-boot-nand.bin(ubootimage格式)及u-boot(elf格式文件)文件拷贝出来
4.烧录uboot
将步骤3中保存的u-boot-nand.bin烧录到目标板中,烧录过程略。
5.建立工程
a.在cw界面,点击file->
import,选择codewarrior->
PowerarchitectureELFexecutable,如图1所示:
图1建立elf工程
b.选择步骤3中保存的u-boot(elf格式文件),toolchain选择bareboardapplication,targetOS选择none,工程名字请根据需要设置,比如我的机器上设置为example,点击next,如图2所示:
图2载入elf文件
c.选择处理器,9131,如图3所示
图3选择处理器
d.选择调试链接使用硬件,如图4所示
图4选择调试链接使用硬件
e.配置硬件连接特性,图5所示
图5配置工程连接特性
f.完成工程创建
6.匹配源代码
Uboot调试工程创建完成后,通过在修改uboot代码编译的ubootelf文件中已经包含符号表信息,其对应的源代码信息已经包含着elf文件中,因为我们的uboot编译是在linux服务器上执行,而cw的调试是在Windows机器上,因此,需要将ubootelf中的代码信息链接到windows的代码中。
A.指定某一个文件的连接关系,后续的连接都会自动对应起来;
图6配置源代码映射
B.若双击其中某个文件显示找不到源代码,则指定源代码即可
7.编辑连接/调试
A.启动configuration配置,点击run->
debugconfiguration,如图7所示
图7配置调试
B.选择codewarriorattach进行配置,如图8所示
图8配置cwattach
C.配置连接,选择连接,new,选择硬件或软件模拟器连接,选择PA,BSC9131RDB->
ROM,选择BSC9131RDB-core0_ROM_BSC9131PANANDu-boot32allstage,如图9所示:
图9配置硬件或者模拟器连接
D.在目标行,选择new目标,选择硬件或者软件模拟器连接->
PA,选择9131,如图10所示
图10配置目标
E.点击next,选择初始化目标${PA_TOOLS_HOME}/PA_Support/Initialization_Files/Qonverge/BSC9131RDB_uboot_32.tcl,如图11所示
图11选择初始化目标
F.选择内存初始化目标,点击内存选项卡,选择内存配置BSC9131RDB_uboot_32_NAND.mem,如图12所示
图12选择内存配置
G.点击finish,完成配置
H.在cwattach配置界面,在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代码时,即显示nosourceavailablefor0x****时,说明代码已经执行到第二阶段,如图18所示,需要进行第二阶段调试的配置;
图18第二阶段开始
1.点击主菜单Windows->
showview->
debugshell,如图19所示
图19调出debugshell窗口
2.在开始的debugshell中输入命令setpicloadaddr0xff801000,如图20所示,则即可对应C代码继续单步执行:
图20设置第二阶段picoffset
3.继续单步调试,可以在汇编语言或者c语言出设置断点,继续执行;
4.当发生nosourceavailablefor0x*****时,说明已经进入uboot启动第三阶段,此时如图21所示;
图20uboot调试进入第三阶段
5.在debugshell窗口中设置setpicloadaddr0xff800000,如图21所示
图21设置第三阶段的picoffset
6.继续调试,当进入第四阶段运行时,在debugshell中输入setpicloadaddr0x36f30000,即可继续进行调试。
五、各阶段PICoffset的确定
1.启动阶段picoffset的确定
系统启动后,pc指针会指向0xfffffffc的地址执行,此地址上是一条跳转指令,会跳转到0xfffff000地址执行。
如图22所示,此地址即为uboot的加载地址,因此需要设置ubootpicoffset为0xfffff000地址;
图22第一阶段picoffset地址确定
2.第二阶段picoffset地址的确定
第二阶段与第三阶段的picoffset地址确定都是通过查看代码的方式来确定的。
将disassembly窗口向上滚动,发现到代码起始处地址即为当前阶段picoffset地址,如图22,图23所示:
图22第二阶段picoffset地址确定
图23第三阶段启动pic便宜地址确定
3.第四阶段picoffset地址的确定:
a)修改将uboot代码arch/powerpc/lib/board.c,将其中debug("
修改为printf输出;
b)在uboot启动过程中,查看串口输入,如图24所示,记下地址,即为ram运行后的pic偏移地址。
图24第四阶段picoffset的确定
六、调试过程中其他需要注意的问题
1.注意代码的匹配,生成elf即uboot-nand.bin的代码为同一份代码,此特性在编译时已经保证,无需赘述,但是往往windows调试环境上的代码与生成uboot的代码不严格匹配,将导致软件调试时代码不匹配。
2.调试时需要初始化,即调试开始后往往需要按下reset按钮,才能如我所愿的进行单步调试
3.Picoffset的确定,不同阶段的确定方法不同,而freescale并没有提供第一、第二、第三阶段的确定方式,此方法非官方,不过在我的机器上可以调试工作。
4.调试过程中寄存器、内存、断点等调试方法不再赘述。