分类:
2009-01-10 23:39:21
|
这一段代码其实并不复杂,主要做了三个方面的事情。第一:初始化S3C2410的NAND控制器,以便用于读取NAND中的RedBoot代码;第二:初始化C函数调用堆栈地址,设置好NAND读取函数的入口参数并调用该函数;第三:将读取到SDRAM的RedBoot代码段的前4k和位于SRAM中的代码进行比较,确定读取过程是正确的,然后将PC跳转到SDRAM的相应位置进行执行!
仔细分析了代码,实在没有看到什么地方有问题。比较了s3c2410的文档,NAND控制器的设置也没有错误,SDRAM地址和NAND地址参数的设置也没有错(其中LEO2410_SDRAM_PHY_BASE的值为0x30000000,这是因为SDRAM是使用的BANK6、7)。但是为什么会无法启动呢?(另外,在这里出现的LEO2410_SDRAM_PHY_BASE,实际上对应于SMDK2410模板应该是SMDK2410_SDRAM_PHY_BASE,只是我在移植时新建了一个叫leo2410的模板,从而改的新名字,呵呵)
没有办法,只好step in了。一开始还真不知道该怎么来调试,是不是需要去弄个ICE来,那可要投资一大笔了...。突然想起不是有JTAG线吗,摸索了一下直接使用AxD+H-JTAG就可以完成调试了,呵呵!在网上找了一下,对于阳初的开发板,H-JTAG的设置为:
TMS | Pin4 D2 |
TCK | Pin2 D0 |
TDI | Pin3 D1 |
TDO | Pin11 Busy |
nTRST | NO TAP RST |
nSRST | NO SYS RST |
|
这一段脚本直接加到cdl_component CYGPKG_REDBOOT_ARM_OPTIONS脚本的里面,放到cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC之前,就可以让编译链接时nand_read.c被编译到extras.o的最前面。
弄好之后,重新编译,下载...重启...太爽了,接上串口,终于看到了RedBoot的启动信息,以及RedBoot>的提示符,至此,终于实现了从NAND启动RedBoot的任务,终于迎来了对RedBoot的第一次感性认识。接下来的工作,就是一步一步的加入各个器件的驱动以及用RedBoot启动eCos或者linux了。
chinaunix网友2011-01-12 21:49:09
请问作者,你的内存布局文件有没有添加或者改动,我做到这里redboot还是起不来。我发现这个模板没有nand对应的内存布局文件的定义,是不是问题出在这里。