使用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的主要内容,如果未能解决你的问题,请参考以下文章

搭建S3C6410开发板的测试环境

搭建S3C6410开发板测试环境

搭s3c6410开发板的测试环境读后感

第五章主要讲的内容是搭建S3C6410开发板的测试环境

搭建S3C6410开发板的测试环境

搭建S3C6410开发板的测试环境