先uboot中建立一个新单板:
1、在booard/sansung下复制一份smdk2410文件夹,重命名为smdk2440
2、在include/configs下复制一份smdk2410.h,重命名为smdk2440.h
3、在uboot的根目录的boards.cfg文件中:
仿照
smdk2410 arm arm920t - samsung s3c24x0
添加:
smdk2440 arm arm920t - samsung s3c24x0
smdk2410的uboot启动流程总结如下:
1、设置cpu为管理模式
2、关看门狗
3、屏蔽中断
4、设置时钟比例
5、设置内存控制器
6、设置栈,调用C函数board_init_f
7、调用函数数组init_sequence里的各个函数
board_early_init_f : 设置系统时钟、设置GPIO
SDRAM的初始化与时钟相关,所以应该先初始化时钟,再初始化SDRAM,所以在屏蔽完中断之后直接初始化时钟,把系统时钟设为400MHz:
修改完时钟以后,SDRAM的初始化也要修改,在u-boot-2012.04.01/board/samsung/smdk2440/lowlevel_init.S路径下修改为如下代码:
烧写uboot后串口打印出乱码,串口的配置应该也有问题,串口的初始化函数是在init_sequence指针数组的serial_init函数中实现;
查看串口波特率的设置,发现在get_HCLK里没有定义CONFIG_S3C2440
处理措施:include/configs/smdk2440.h:
去掉#define CONFIG_S3C2410
加上#define CONFIG_S3C2440
由于去掉了CONFIG_S3C2410的宏定义,导致s3c2410_nand.c的编译因为没有这个宏定义而出错,解决办法是暂时先不编译这个文件:
//#define CONFIG_CMD_NAND
修改完的uboot有将近330K的大小,用openjtag下载太慢,可以选择先下载一个200K的小uboot,再用uboot的usb下载功能下载新uboot:
1、先用usb 1 30000000命令通过dnw软件把uboot下载到SDRAM起始地址0x30000000处,
2、关闭写保护:protect off all
3、擦除norflash扇区:erase 0 7FFFF
4、把内存中的新uboot写入norflash的0地址处:cp.b 30000000 0 80000
出现如下画面:
串口成功打印出信息,但flash部分代码还需要修改。