p[10] = 0x000000B1; //BANKSIZE
p[11] = 0x00000030; //MRSRB6
p[12] = 0x00000030; //MRSRB7
再编译,编出的 uboot400 多 kb,nandfalsh uboot 分区装不下。为不破坏 nandflash 分区,
把 uboot 下载在 SDRAM,在复制到 norflash 0 地址前面 512k 执行看看:(这里会破坏掉 nor
flash 上原来的 uboot)
tftp 30000000 u-boot.bin;
protect off all //擦除 nor flash 写保护
erase 0 7ffff //擦除 512k 内容
cp.b 30000000 0 80000 //复制到 nor 的 0-80000
这样再次启动就有乱码的东西出来了。
乱码解决办法:
乱码,查看串口波特率的设置,发现在 speed.c:get_HCLK 里没有定义 CONFIG_S3C2440
处 理 措 施 : include/configs/smdk2440.h: 去 掉 CONFIG_S3C2410, 同 时 也 去 掉 #define
CONFIG_CMD_NAND
//#define CONFIG_S3C2440
//#define CONFIG_CMD_NAND
或者直接这样处理:在 speed.c get_HCLK()函数里返回 HCLK 的频率也可以:
return get_FCLK() / 2; // 200HZ/2
重新编译烧写,输出正常,但卡住了:
CPUID: 32440001
FCLK: 400 MHz
HCLK: 100 MHz
PCLK: 50 MHz
DRAM: 64 MiB
WARNING: Caches not enabled
Flash: *** failed ***
### ERROR ### Please RESET the board ###
下面解决 nand 启动的问题
支持 nand 启动:u-boot2012 源码中重定位代码之前的代码大于 4K 则不能 nand 启动,为了
支持 nand 启动,使用自己写 BootLoader 那种方法,在前 4K 代码中并尽可能早地初始化内
存和 nand flash 以重定位代码,然后跳到重定位后的代码中执行。
修改 UBOOT 支持 NAND 启动:
原来的代码在链接时加了"-pie"选项, 使得 u-boot.bin 里多了"*(.rel*)", "*(.dynsym)"
使得程序非常大,不利于从 NAND 启动(重定位之前的启动代码应该少于 4K)
1 去掉 "-pie"选项
arch/arm/config.mk:75:LDFLAGS_u-boot += -pie 去掉这行
2 参考"毕业班第 1 课"的 start.S, init.c 来修改代码