使用AXD调试S3C6410 U_boot
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用AXD调试S3C6410 U_boot相关的知识,希望对你有一定的参考价值。
转载请注明原文出处http://www.cnblogs.com/flyingcloude/p/6992449.html
s3c6410开发时使用:前端软件(ADS)+仿真器(JLink)的方式。
JLink与前端软件(AXD)相连时,需要使用调试代理,所有PC机需要安装Jlink驱动。
S3C6410的前端软件采用ADS,ADS中含有AXD调试工具。
调试方法:
1、JLink V8连接S3C6410之后,一开始出现不能识别的core,等待一会儿之后,能识别到ARM11。
为什么能用Jlink调试CPU,这是CPU内部集成的调试接口所具有的特性,这样用户只要使用简单的仿真器,就能实现对CPU的调试,为用户节省 了很多的经费。JLink调试CPU时,与前端软件AXD相连时,需要调试代理,这个需要了解,虽然这个不需要开发人员自己设计,由JLink驱动帮助你 完成好了。
2、用AXD调试CPU时,需要对CPU进行初始化,具体初始化的工作包括:关看门狗、初始化中断、初始化Flash、初始化SDRAM等。经过这些操作之后,AXD才能加载程序到内存,才能正常对CPU调试。
3、为了简化操作,我们可以使用S3C6410的Nand中的u-boot来实现对CPU的初始化,具体使用方法:开发板的拨码开关开到非S2的一 侧,打开JLink GDB软件,给S3C6410上电,在串口阻止系统启动Linux,只停留在uboot阶段,打开AXD,打开File->Load Image,加载裸驱的.axf文件,设置断点在main函数处,开始运行。
4、其实用uboot完成初始化只是为了省事,专业的用AXD调试uboot方法如下:
一、打开JLink GDB等待,直到识别到ARM11;
二、打开AXD,打开System Views->Command Line Interface窗口,在Debug命令窗口输入如下命令:
Debug->ob c:/init.txt
Debug->lb c:/u-boot.bin 0x50001000
Debug->setpc 0x50001000
Debug->run
其中init.txt内容如下,需去除注释:
fillmem 0x7e004000 0x7e004000 0x00000000 32/*关看门狗*/
fillmem 0x71200014 0x71200014 0x00000000 32/*若以前设置了阻止某个中断,现在全部清除*/
fillmem 0x71300014 0x71300014 0x00000000 32/**/
fillmem 0x7120000C 0x7120000C 0x00000000 32/*选择所有的中断为IRQ中断*/
fillmem 0x7130000C 0x7130000C 0x00000000 32
fillmem 0x71200F00 0x71200F00 0x00000000 32/*该寄存器包含当前中断服务程序的地址ISR,默认为0。读取该寄存器返回一个ISR并设置当前中断已经被服务了,读取必须在有真的中断来临的时候才能读取。写该寄存器会清除当前中断,所以写该寄存器必须在中断服务例程结束时才能写。*/
fillmem 0x71300F00 0x71300F00 0x00000000 32
fillmem 0x7e00f900 0x7e00f900 0x0000801e 32/*others control register设置为默认值*/
fillmem 0x7e00f000 0x7e00f000 0x0000ffff 32
fillmem 0x7e00f004 0x7e00f004 0x0000ffff 32/*MPLL设置为要求周期产生静态时钟输出*/
fillmem 0x7e00f020 0x7e00f020 0x01043310 32/*选择时钟分频值CLK_DIV0,CLK_DIV0控制系统时钟和多媒体IPs的特殊时钟*/
fillmem 0x7e00f00C 0x7e00f00C 0xc2150601 32/*控制APLL输出频率*/
fillmem 0x7e00f010 0x7e00f010 0xc2150601 32/*控制MPLL输出频率*/
fillmem 0x7e00f024 0x7e00f024 0x00000003 32/*选择时钟分频值CLK_DIV0*/
fillmem 0x7e00f014 0x7e00f014 0x00200102 32/*控制EPLL输出频率*/
fillmem 0x7e00f018 0x7e00f018 0x00000000 32/*控制EPLL输出频率*/
fillmem 0x7e00f01C 0x7e00f01C 0x14000007 32 /*选择时钟源*/
fillmem 0x7e00f120 0x7e00f120 0x00000008 32 /*NAND系统配置寄存器*/
fillmem 0x7e001004 0x7e001004 0x00000004 32 /*32bit DRAM:命令为配置*/
fillmem 0x7e001010 0x7e001010 0x0000040f 32 /*32bit DRAM:刷新周期reg*/
fillmem 0x7e001014 0x7e001014 0x00000006 32 /*32bit DRAM:CAS延时reg*/
fillmem 0x7e001018 0x7e001018 0x00000001 32 /*32bit DRAM:t_DQSS*/
fillmem 0x7e00101c 0x7e00101c 0x00000002 32 /*32bit DRAM:t_MRD*/
fillmem 0x7e001020 0x7e001020 0x00000006 32 /*32bit DRAM:t_RAS*/
fillmem 0x7e001024 0x7e001024 0x0000000a 32 /*32bit DRAM:t_RC*/
fillmem 0x7e001028 0x7e001028 0x0000000c 32 /*32bit DRAM:t_RCD*/
fillmem 0x7e00102c 0x7e00102c 0x0000018f 32 /*32bit DRAM:t_RFC*/
fillmem 0x7e001030 0x7e001030 0x0000000c 32 /*32bit DRAM:t_RP*/
fillmem 0x7e001034 0x7e001034 0x00000002 32 /*32bit DRAM:t_RRD*/
fillmem 0x7e001038 0x7e001038 0x00000002 32 /*32bit DRAM:t_WR*/
fillmem 0x7e00103c 0x7e00103c 0x00000002 32 /*32bit DRAM:t_WTR*/
fillmem 0x7e001040 0x7e001040 0x00000002 32 /*32bit DRAM:t_XP*/
fillmem 0x7e001044 0x7e001044 0x00000013 32 /*32bit DRAM:t_XSR*/
fillmem 0x7e001048 0x7e001048 0x00000013 32 /*32bit DRAM:t_ESR*/
fillmem 0x7e00100C 0x7e00100C 0x0001001a 32 /*内存配置reg*/
fillmem 0x7e00104C 0x7e00104C 0x00000b45 32 /*DRAM控制口配置*/
fillmem 0x7e001200 0x7e001200 0x000150f0 32 /*chip-<n>-cfg reg*/
fillmem 0x7e001304 0x7e001304 0x00000000 32 /*user_cfg reg*/
fillmem 0x7e001008 0x7e001008 0x000c0000 32 /*direct command reg*/
fillmem 0x7e001008 0x7e001008 0x00000000 32
fillmem 0x7e001008 0x7e001008 0x00040000 32
fillmem 0x7e001008 0x7e001008 0x00040000 32
fillmem 0x7e001008 0x7e001008 0x000a0000 32
fillmem 0x7e001008 0x7e001008 0x00080032 32
fillmem 0x7e001004 0x7e001004 0x00000000 32
去除注释之后的文件如下:
fillmem 0x7e004000 0x7e004000 0x00000000 32
fillmem 0x71200014 0x71200014 0x00000000 32
fillmem 0x71300014 0x71300014 0x00000000 32
fillmem 0x7120000C 0x7120000C 0x00000000 32
fillmem 0x7130000C 0x7130000C 0x00000000 32
fillmem 0x71200F00 0x71200F00 0x00000000 32
fillmem 0x71300F00 0x71300F00 0x00000000 32
fillmem 0x7e00f900 0x7e00f900 0x0000801e 32
fillmem 0x7e00f000 0x7e00f000 0x0000ffff 32
fillmem 0x7e00f004 0x7e00f004 0x0000ffff 32
fillmem 0x7e00f020 0x7e00f020 0x01043310 32
fillmem 0x7e00f00C 0x7e00f00C 0xc2150601 32
fillmem 0x7e00f010 0x7e00f010 0xc2150601 32
fillmem 0x7e00f024 0x7e00f024 0x00000003 32
fillmem 0x7e00f014 0x7e00f014 0x00200102 32
fillmem 0x7e00f018 0x7e00f018 0x00000000 32
fillmem 0x7e00f01C 0x7e00f01C 0x14000007 32
fillmem 0x7e00f120 0x7e00f120 0x00000008 32
fillmem 0x7e001004 0x7e001004 0x00000004 32
fillmem 0x7e001010 0x7e001010 0x0000040f 32
fillmem 0x7e001014 0x7e001014 0x00000006 32
fillmem 0x7e001018 0x7e001018 0x00000001 32
fillmem 0x7e00101c 0x7e00101c 0x00000002 32
fillmem 0x7e001020 0x7e001020 0x00000006 32
fillmem 0x7e001024 0x7e001024 0x0000000a 32
fillmem 0x7e001028 0x7e001028 0x0000000c 32
fillmem 0x7e00102c 0x7e00102c 0x0000018f 32
fillmem 0x7e001030 0x7e001030 0x0000000c 32
fillmem 0x7e001034 0x7e001034 0x00000002 32
fillmem 0x7e001038 0x7e001038 0x00000002 32
fillmem 0x7e00103c 0x7e00103c 0x00000002 32
fillmem 0x7e001040 0x7e001040 0x00000002 32
fillmem 0x7e001044 0x7e001044 0x00000013 32
fillmem 0x7e001048 0x7e001048 0x00000013 32
fillmem 0x7e00100C 0x7e00100C 0x0001001a 32
fillmem 0x7e00104C 0x7e00104C 0x00000b45 32
fillmem 0x7e001200 0x7e001200 0x000150f0 32
fillmem 0x7e001304 0x7e001304 0x00000000 32
fillmem 0x7e001008 0x7e001008 0x000c0000 32
fillmem 0x7e001008 0x7e001008 0x00000000 32
fillmem 0x7e001008 0x7e001008 0x00040000 32
fillmem 0x7e001008 0x7e001008 0x00040000 32
fillmem 0x7e001008 0x7e001008 0x000a0000 32
fillmem 0x7e001008 0x7e001008 0x00080032 32
fillmem 0x7e001004 0x7e001004 0x00000000 32
5、AXD命令使用方法如下
打开AXD,按下 Alt + L ;或者点System Views下Command Line Interface,就可以打开一个命令行:
输入help查看帮助文件。
比较有用的命令如:
loadbinary : 将一个文件导入RAM ,简写为lb
loadsymbols : 导入符号表
setpc : 设置PC指针
run : 开始运行
ob + 文件名 : 按照批处理文件运行
批处理文件所有的命令在GUI里面也是有的,可以利用批处理文件(ob命令)来免去敲命令和点菜单的麻烦,以调试u-boot为例,写一个批处理文件放在c盘,文件名为init.txt,内容如下:
ob c:/init.txt
lb c:/u-boot.bin 0x50001000
setpc 0x50001000
run
axf文件的获取:
在linux下编译u-boot后,有一个u-boot文件,把它改名为u-boot.axf即可!
loadbinary简写lb,只能将二进制文件加载到ram中,不能将地址指定到flash中
在loadsymbols之后,等待进度条显示加载完成,将setpc (pc)指到u-boot.bin的加载位置,即可单步调试。
这时ads会提示寻找u-boot的入口文件start.s地址,此时需要手动指定start.s的位置,通常这时可以在linux下建立smaba服务共享,将整个u-boot的文件夹映射成windows下一个盘符,这样就可以指定目录地址了。
在进入c语言代码中后,ads还可能出现提示指定board.c、string.c等其他文件的地址,这都需要手动做。
此后就可以用ads进行c语言级的u-boot源码调试了!
用ADS 1.2的AXD Debugger调试在Linux下面编译出来的Uboot
给板子上电,如果Nand Flash里面没有程序,那么板子没跑起来,真是我们要的。如果Flash里面有uboot,uImage,rootfs,而板子已经运行了。那么就要弄 个可以有delay的uboot,这样可以按s,使得uboot停止去load Linux的kernel
1.将硬件JTAG与板子连接好。
2.给板子上电,按s停止uboot的运行
3.启动AXD Debugger
4.打开 File -> Load Memory From File
装载u-boot.bin 到地址0x0处.如果不行,可以尝试先装载u-boot,然后再装载u-boot.bin.
5.装载完成后,右键点击汇编代码的那个窗口,选择SetPC,设置PC为0
6.点击运行,即可运行uboot了。
转载请注明原文出处http://www.cnblogs.com/flyingcloude/p/6992449.html
以上是关于使用AXD调试S3C6410 U_boot的主要内容,如果未能解决你的问题,请参考以下文章