刚开始想通过Nor Flash中的supervivi+DNW的“Download & Run 功能”将uboot.bin下到SDRAM进行调试,但是由于笔记本已经被装成ubuntu + Virtualbox(Windows XP),将supervivi阶段的USB下载设备分配进Virtualbox(Windows XP)后提示“不能分配 USB设备 System MCU SEC S3C2410X Test B/D [0100] 到虚拟电脑 Windows XP Workstation.Failed to create a proxy device for the USB device. (Error: VERR_READ_ERROR).”,而U盘等其他USB设备可以正常分配进虚拟机。由于能力有限google半天也没有解决,据网上牛人说法是由于Virtualbox对USB设备支持不是很好,分配网银U盾之类的USB设备也存在该问题,不懂VMware有没该问题。因此只能另某其他调试方法,当初买开发板时也顺带买了一根山寨版的OpenJTAG,利用之。移植uboot过程中,在串口初始化完成并能正常打印log前可以利用JLink配合“代码点灯法”进行调试,也可以利用uboot写NAND FLASH的功能将调好的固件写入NAND FLASH。
1.使用JLink+mini2440调试uboot
1.1.安装JLink驱动,我装的是JLinkARM_V402
1.2.连接硬件
1.3.运行 开始->所有程序->SEGGER->J-Link Commander
1.4.设置TCK为12kHz,以提高下载速度
J-Link>speed 12000
1.5.下载并运行用来初始化mini2440SDRAM的init.bin(这是买OpenJTAG时光盘附带的用来初始化S3C2410、S3C2440的SDRAM的,没有这个init.bin的话可以用下面的JLink+AXD的方法进行调试uboot),这里将init.bin放于C盘,并采用NAND FLASH启动,若是采用NOR FLASH启动,则下载到0x40000000运行
J-Link>loadbin C:\init.bin 0
J-Link>setpc 0
J-Link>g
1.6.这时停止init.bin运行后,就可以将uboot.bin下载到SDRAM运行调试了(注:直接运行于SDRAM进行调试的uboot需要在相应的板级配置文件中定义CONFIG_SKIP_LOWLEVEL_INIT,以跳过底层的一些初始化代码。这里我将uboot的加载运行地址设置为0x30000000)
J-Link>h
J-Link>loadbin F:\uboot\uboot-git-denx\u-boot.bin 0x30000000
J-Link>setpc 0x30000000
J-Link>g
2.使用JLink+ADS1.2+mini2440调试uboot
2.1.安装ADS1.2和JLink驱动驱动
2.3.打开ADS1.2,添加Jlink。
选择Options->Configure Target
ei
点击“Add”
选择JLINK安装目录,选中JLinkRDI.dll
2.4.配置Jlink
选中上一步添加的JLinkRDI.dll,选择右边的Configure,对JLink进行配置
跳转到JTAG选项,设置频率为12000kHz
跳转到Flash选项,如下图取消勾选。
跳转Breakpoints,如下图配置
跳转到CPU选项,如下图设置
至此配置完成,选择“确定”,跳回AXD界面,此时如果已经通过JTAG将PC与目标板进行连接,显示如下连接信息。
2.5.设置MINI2440 SDRAM存储器寄存器。
选择MINI2440,nand启动方式,使用需要先对SDRAM控制器进行设置,在AXD下设置方法是,选择systems views->command lines interface,输入如下命令对寄存器进行设置
setmem 0x53000000 0x00000000 32
setmem 0x4A000008 0xFFFFFFFF 32
setmem 0x4A00001C 0x000007FF 32
setmem 0x53000000 0x00000000 32
setmem 0x56000050 0x000055AA 32
setmem 0x4C000014 0x00000007 32
setmem 0x4C000000 0x00FFFFFF 32
setmem 0x4C000004 0x00061012 32
setmem 0x4C000008 0x00040042 32
setmem 0x48000000 0x22111120 32
setmem 0x48000004 0x00002F50 32
setmem 0x48000008 0x00000700 32
setmem 0x4800000C 0x00000700 32
setmem 0x48000010 0x00000700 32
setmem 0x48000014 0x00000700 32
setmem 0x48000018 0x0007FFFC 32
setmem 0x4800001C 0x00018005 32
setmem 0x48000020 0x00018005 32
setmem 0x48000024 0x008E0459 32
setmem 0x48000028 0x00000032 32
setmem 0x4800002C 0x00000030 32
setmem 0x48000030 0x00000030 32
为避免每次都输入上面一大串命令,可以将要上面的设置的寄存器命令写入一个文件(config_mini2440.txt),在命令行用ob config_mini2440.txt即可批量执行设置,或者在AXD的options‐>Configure Interface中做如下设置,这样启动AXD的时候就可以自动运行上面的脚本完成寄存器初始化了。
2.6.加载uboot.bin,并运行
ConfigureInterface中输入
Debug>loadbinary F:\uboot\uboot-git-denx\u-boot.bin 0x30000000
Debug>setpc 0x30000000
Debug>run