调试占据着研发全过程的很大比重,我在调试uboot时,花了好久好久。
以一个具体的例子,我想让我的uboot从nandflash启动,因为J-link不能直接将u-boot.bin文件直接烧录到nandflash中,必须在通过nandflash控制寄存器来对nandflash操作,我的uboot中就有nand erase和nand write等功能。如果我每次将uboot烧录到nandflash时都去摆弄跳线帽,开关电源,那多麻烦和危险呐。
前提条件如下:
1、tftp服务器,这个可以自己搭建网上有关搭建tftp服务器的方法很多。可以参考一下;
2、有AUTOHOTKEY。
过程如下:
1、
;------------------------------------------------------------ ; Green Program mapped by "ALT" key ;------------------------------------------------------------ !j:: Run C:\Program Files\SEGGER\JLinkARM_V410i\JLink.exe return按一下Alt + j 就能打开打开J-Link Commander,如下图
2、
^3:: send h{enter} send speed 12000{enter} send loadbin D:\project\bootstrap-s3c2440.bin 0{enter} send setpc 0{enter} send g{enter} sleep 100 send loadbin D:\project\u-boot-fulinux.bin 0x33f80000{enter} send setpc 0x33f80000{enter} send g{enter} return
再按一下Ctrl + 3就能将上面的内容打到J-Link Commander上面如图:
上面的过程是先将bootstrap-s3c2440.bin这个初始化SDRAM的代码放到steppingstone这4K的SRAM中,然后将u-boot-fulinux.bin下载到SDRAM的0x33f80000地址处并且设置ARM的PC寄存器,让ARM跳转到0x33f80000这个地方运行。需要这样步是因为我没需要借助它自身将u-boot-fulinux.bin考到nandflash中去。
u-boot-fulinux.bin可以在这里下载:
http://download.csdn.net/detail/sonbai/5169563
3、
!1:: send tftp 30008000 u-boot-fulinux.bin;nand erase 0 40000;nand write 30008000 0 40000{enter} return
tftp 30008000 u-boot-fulinux.bin;nand erase 0 40000;nand write 30008000 0 40000{enter}
发送到uboot的终端上如图
一键式搞定,过程是这样的将ip是192.168.1.78这个tftp服务器指定文件夹中的u-boot-fulinux.bin下载到SDRAM的30008000地址处过地址处放着u-boot本身,tftp传输端也就是在0x33f80000地址往上的uboot来完成的,nand erase是先擦除nandflash上的内容,nand write 是将SDRAM上的30008000起始地址处的u-boot-fulinux.bin下载到nandflash起始地址0处,大小是0x40000。显示OK后,键入reset ,复位cpu这时候就是从nandflash启动,跳线帽是设置在nandflash启动的。
4、
如果 reset后uboot没有达到预期的目标,我们修改源码,然后make,编译过程足够你重复上面过程,将可以在SDRAM和NORflash中运行但是不能在nandflash中运行的(这也是初衷)u-boot-fulinux.bin下到SDRAM的0x33f80000中了