硬件平台:tq2440
开发环境:Ubuntu-3.11
u-boot版本:2014.10
本文允许转载,请注明出处:http://blog.csdn.net/fulinus
nand flash启动
比较新的u-boot版本包括u-boot-2014版本的都是用重定向的机制,而且用到了代码位置无关的技术,在u-boot连接时使用了-pie选项:
-pie :
Produce a position independent executable on targets which support it. For predictable results,
you must also specify the same set of options that were used to generate code (-fpie, -fPIE, or model
suboptions) when you specify this option.
"产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意
位置,都可以正确的执行。"
u-boot是可以在Nor flash中运行的,u-boot.bin的起始位置在Norflash的0地址处,当MO[1:0] = 01、10时,系统上电后从Nor flash启动,从0地址处开始运行。并将u-boot重定向到SDRAM中运行。但是Nand flash是不能像Nor flash那样可以当做RAM操作,因为nand flash是地址和数据总线复用的。好在s3c2440从nand flash启动时会从nand flash读4Kbytes的内容到s3c2440芯片内部自带的DRAM中,如果在nand flash的前4Kbytes存储空间放上一段可以执行的代码,其功能就是将nand flash中u-boot拷贝到SDRAM中,再将使用重定向的方法,跳转到SDRAM中去运行u-boot即可。
可惜的是2440中跑的u-boot并不支持从Nand flash启动。因此,我们需要在u-boot的前4K代码中加入操作nand flash的代码,然后重定向。