开发环境:主机:Window XP SP2;linux:VMware7.01+ubuntu9.10;目标板:扬创utu2440-F开发板
交叉编译器:arm-linux-gcc4.3.2(一开始用的是编译内核的版本arm-linux-gcc3.4.1,但出现了软浮点问题,于是换成了现在用的版本,当然本人编译内核的时候还是用3.4.1版本)。
摘要:前一篇,实现了u-boot最主要最重要功能——正确引导内核启动。接下来,是关于移植u-boot的NAND FLASH部分,使u-boot可正常地从NAND FLASH中启动。这一部分应该来说是移植u-boot的难点。
在移植u-boot的NAND FLASH部分特别是NAND FLASH启动u-boot部分时,始终是要把移植的u-boot烧写进NAND FLASH,验证u-boot能否从NAND FLASH中成功启动。在实际过程中,即使用AXD仿真调试没问题了,但并不代表就能一次成功,往往一条指令的不小心,就可能导致挂机,再也起不来了。现在电脑上都很少有并口了,而JLINK烧写FLASH功能强大,但烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。为了在挂机或验证自己移植的u-boot能否从FLASH启动时,能够方便把u-boot镜像烧写进FLASH,把网上介绍的关于使用JLINK间接烧写NAND FLASH的方法说明在这,同时增加了自己的使用心得和遇到问题的解决方法。
1. 使用JLINK间接烧写NAND FLASH的方法:
1.1 使用JLINK间接烧写FLASH的原理:
使用JLINK间接实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。
1.2 操作步骤:
操作步骤是,先把一个SDRAM的初始化程序init.bin下载到内部SRAM去运行,使SDRAM中可使用;然后再下载特制的或者好的、可启动并支持FLASH读写等操作的u-boot(称为u-boot0.bin,一定要可支持FLASH读写等操作)到SDRAM中运行,这个特制u-boot能实现对Nor、NAND FLASH读写等操作;然后通过JLINK或TFTP(需要特制的u-boot实现网络功能)再把另一个的u-boot(称为u-boot1.bin,可以是开发板本身带的u-boot或自己移植的uboot镜像文件,或者是这个特制的u-boot.bin镜像文件)下载到SDRAM的另一地址中;最后,在u-boot0.bin下把u-boot1.bin烧写进FLASH中。
init.bin文件可从本站下载:http://velep.com/downloads?did=2,或者直接点击init程序即初始化SDRAM程序 (1091)下载。
下面分别说明
1.2.1 连接硬件
把JLINK的JTAG口连接到板上的JTAG,注意引脚要匹配起来!如果JLINK带的JTAG线不能与板的JTAG对应起来,就要自己做转接,我的就是这样,自己转接了一下!
1.2.2 运行J-Link commander
J-Link commander启动界面如下图所示,如果没检测到CPU,执行usb命令连接JLink,注意,S3C2440 CPU的ID是:0x0032409D
1.2.3 在J-Link commander下载运行特制的程序
对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。
对于S3C2410、S3C2440,一般都外接SDRAM。SDRAM被使用之前,需要经过初始化,这个初始化由init.bin程序完成。
假设init.bin在E:/1/init/目录下,u-boot0.bin和u-boot1.bin在E:/1/目录下。
1). 设置TCK为12M,下载程序时会很快 ,可以不做
J-Link>speed 12000
2). 下载并运行init.bin,这是用来初始化SDRAM的
a. 如果是NAND FLASH启动:
J-Link>loadbin e:/1/init.bin 0
J-Link>setpc 0
J-Link>g
b. 如果是NOR FLASH启动:
J-Link>loadbin e:/1/init.bin 0x40000000
J-Link>setpc 0x40000000
J-Link>g
3). 下载并运行特制的u-boot0.bin,提示,这个u-boot也并不就是特制的,可使用自己的,但必须要求具备读写FLASH等操作功能,在这里烧写的是扬创开发板所带的u-boot:
J-Link>loadbin e:/1/u-boot0.bin 0x33f80000
J-Link>setpc 0x33f80000
J-Link>g
上述操作如下图所示:
同时,u-boot已经启动了,在USB转串口中可以看到启动信息:
U-Boot 1.2.0-utulinux_s3c2440_bootloader (Sep 12 2007 – 23:33:00)
DRAM: 64 MB
Flash: 0 kB
NAND: Bad block table not found for chip 0
Bad block table not found for chip 0
64 MiB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
utu-bootloader=>>>
utu-bootloader=>>>
注意:在串口中看到启动信息后,可能你会发现,在uboot提示信息下可能对你的操作不响应,这时,你可在J-Link commander继续执行一个g指令就正常了。
4)下载目标u-boot1.bin到FLASH中,这里的u-boot1.bin是本人基于u-boot-2011.03移植的u-boot镜像文件
进入到u-boot0之后,就可以通过网络、串口下载文件了,然后使用u-boot0里的nand rase、nand wirte命令来烧写u-boot1.bin文件了,当然,如果没有网络,也不想忍受串口的速率,可通过jlink commander下载(推荐),如下操作:
a)通过JLINK把u-boot1.bin下载到SDRAM中,
J-Link>loadbin e:/1/u-boot1.bin 0x30000000
同样的,下载后,在u-boot0串口操作符下,又不响应了,在J-Link commander输入g命令就可以解决了。
b)在u-boot0串口操作符下,把刚才下载到0x30000000的u-boot1.bin烧写到NAND FLASH中
utu-bootloader=>>>nand erase 0 40000;nand write 30000000 0 40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x3c000 — 100% complete.
OK
NAND write: device 0 offset 0x0, size 0x40000
262144 bytes written: OK
utu-bootloader=>>>
这样就把u-boot1.bin烧写进NAND FLASH了,复位重启可看到u-boot1.bin的启动信息:
u-bootloader=>>>reset
U-Boot 2011.03 (Jun 26 2011 – 02:40:58)
DRAM: 64 MiB
NAND: NAND_ECC_NONE selected by board driver. This is not recommended !!
64 MiB
*** Warning – bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: CS8900-0
[reille2440]#
2. “unable to halt arm core”的解决办法
在使用JLINK过程中,出现了”unable to halt arm core”的错误,解决方法是:把JLINK的USB口拔掉,同时把板的电断掉,稍等片刻,然后再重新开始就可以了。
3. 参考资料
使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法:http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3228953
U-Boot调试环境搭建请教~~如何实现u-boot和内核的源码级调试:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3521744&bbs_page_no=1&bbs_id=1032
如何调试uboot中NAND FLASH 启动部分:http://blog.csdn.net/qiaoliang328/archive/2011/03/07/6229389.aspx
推荐阅读相关文章:
- u-boot-2011.03移植系列专题汇总
- 移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###8. u-boot引导启动nand flash中内核和cramfs格式根文件系统及用户文件系统yaffs2支持
- 移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###6.使用AXD和JLINK调试u-boot方法与步骤
- 移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###4.支持内核启动
- 移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###3.移植和配置CS8900网卡
- 移植u-boot-2011.03到S3C2440(utu2440)方法与步骤###1. 配置和初步编译
- 三星6410裸机程序开发1:tiny6410开发板和裸机开发环境
- 移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###7.NAND FLASH部分移植和支持NAND FLASH启动和读写