从NAND Flash启动的原理很简单,就是利用S3C2440内部4K大小的SRAM,存储在NAND Flash中的代码不能被执行,而S3C2440在从NAND Flash启动把NAND Flash的前4k代码复制到SRAM中运行,U-boot支持从NAND Flash启动的方法就是利用这前4K代码完成SDRAM的初始化(SDRAM有64M),然后还要完成从U-boot代码从NAND Flash中复制到SDRAM中,然后再跳转到SDRAM中去运行完整的U-boot。
为了便于系统启动的方便,可以在start.S文件中添加代码以识别系统是从NAND Flash启动还是从NOR Flash启动,从S3C2440芯片手册中可以看到
到OM[1:0]都为0时,说明是从NAND Flash启动,01和10都是从NOR Flash启动,OM[1:0]就是寄存器BWSCON的第2位~第1位(DW0)
一、添加NOR Flash启动和NAND Flash启动的识别
修改arch/arm/cpu/arm920t/start.S,首先将217行附近修改为:
[cpp]
view plain
copy
- #ifndef CONFIG_SKIP_LOWLEVEL_INIT
- bl cpu_init_crit
- #endif
- #define BWSCON 0x48000000
- ldr r0, =BWSCON
- ldr r0, [r0]
- ands r0, r0, #0x6
- tst r0, #0x0
- bne norflash_boot /*OM[1:0] != 0, 跳转到NOR FLASH 启动处*/
- /*判断uboot是从nand flash启动还是从 nor flash启动*/
在220行附近将:
[cpp]
view plain
copy
- #ifndef CONFIG_SKIP_RELOCATE_UBOOT
- relocate:
修改为
[html]
view plain
copy
- norflash_boot:
- #ifndef CONFIG_SKIP_RELOCATE_UBOOT
- relocate:
二、添加NAND Flash的U-boot代码从NAND FLash到SDRAM搬移的代码
在前面修改的 bne norflash_boot ,227行后添加
[cpp]