得到编译好的uboot之后,就可以进行第一次尝试了。这里一开始我是使用tftp网络下载方式,先测试下编译好的uboot能否使用。到了后面就不能使用这种方式,因为再次初始化DDR后会导致DDR中储存的数据丢失,当然,如果初始化DDR的时候做了特殊处理的话(即判断要不要初始化),那应该就没关系了。这里我在后期是直接用sd卡来启动的,就没再用tftp下载方式了。
将编译好的uboot下载到指定的链接地址处,然后直接go到该地址,果然串口啥都没打印出来,这也是理所当然,毕竟一开始,可能连串口都没初始化,怎么可能有任何反应呢?
第一步,先查看/arch/arm/cpu目录下的u-boot.lds,发现里面只有将start链接到最开头的地方,这里我们需要将lowlevel_init链接到uboot的前面,
ps:lowlevel里面做了很多关于cpu和内存的初始化,包括关看门狗,设置时钟等,这是uboot第一阶段最为重要的,且s5pv210上电后,只load了nand的前16k的代码(忘了是前8k还是前16kl),所以lowlevel一定要放在前面
修改/arch/arm/cpu目录下的u-boot.lds
然后编译后会出现错误,原因是因为lowlevel_init.o链接了2次,我们只要删了一次就好。
网上有帖子说直接修改board/samsung/goni目录下的Makefile,我试了下不行,主要原因应该是2014.10这个版本和他们的不一样(2013.10版的还可以用那个方法),试了好多次,找不到depend什么的,可能是我自己对makefile还理解不够的原因吧。可以参考:http://blog.csdn.net/qq_28992301/article/details/52016733
无奈只能破坏规则,直接修改主目录下的makefile,这里我使用了绝对路径。
前期我直接使用tftp的下载方式,将uboot的链接地址设定到0x30000000(设置X210.h 里面的CONFIG_SYS_TEXT_BASE为 0x30000000)。在start.s中添加了串口输出的代码,输出了一个字符’O’
编译完成后,加载到开发板中运行
不错,还能打印出蛮多东西的,而且也输出了‘O’,但是其他的信息和我们的开发板信息很多不符合。但至少说明能用了一点点,那就继续吧。