我们用的是2440开发板,但在u-boot里面只有2410的board/samsung目录下只有smdk2410文件,没有发现2440.
1、创建新单板
(1)u-boot的修改
在u-bootu-boot目录下,切换到 board/samsung/目录
cd board/samsung/
新建smdk2440文件,并把smdk2410文件里的内容完全拷贝到smdk2440里面去。
cp smdk2410 smdk2440 -rf
切换到配置文件目录,每一种单板都有一个配置文件
cd ../../include/configs/
吧smdk2410.h拷贝为smdk2440.h
cp smdk2410.h smdk2440.h
配置u-boot出现错误
在u-boot源代码搜索smdk2410,头文件无需理会,boards.cfg文件还需要修改,修改65行。看文件的前面可知这些参数是什么意思,第一个参数是架构,
修改boards.cfg:
仿照
smdk2410 arm arm920t - samsung s3c24x0
添加:
smdk2440 arm arm920t - samsung s3c24x0
重新配置(用于mkconfig选择传入的参数)
make smdk2440_config
编译
make
(2)烧写看结果
(3)调试(关心内存设置和CPU时钟)
a. 阅读代码发现不足:
UBOOT里先以60MHZ的时钟计算参数来设置内存控制器,但是MPLL还未设置,仍以12M频率执行
处理措施: 把MPLL的设置放到start.S里(参考自己写bootloader的时钟设置),取消board_early_init_f里对MPLL的设置
(4)验证MPLL未设置情况下SDRAM能否使用(用openjtag调试)
编译出来的uboot非常大(400多K),先烧写主光盘里的u-boot.bin到nor,然后用这个uboot来烧写新的uboot
查看u-boot分区大小,下面大小是0x40000,换算成十进制是262K ,而需要烧写的u-boot大小是400多K,因而用命令烧写
接上usb_device那条线,打开dnw,
用usb 1 30000000命令下载,usb是指usb命令,1是指一直等待直到下载完,30000000是指下载到SDRAM的地址。然后用dnw下载
然后去掉nor flash的写保护
从0地址开始擦除,结束地址是7FFF,共擦除512K
从SDRAM 的3000,0000地址拷贝到nor flash的0地址,拷贝大小为512K
烧写完毕后重启开发板
(5)出现 乱码(串口波特率)
查看串口波特率的设置,发现在get_HCLK里没有定义CONFIG_S3C2440
这里根据PCLK除以波特率得到某个系数,把这个系数reg写到串口控制器的寄存器里面就可以设置
处理措施:include/configs/smdk2440.h: 去掉CONFIG_S3C2410
#define CONFIG_S3C2440
发现错误后,想把某个文件去掉,是去看他的Makefile,根据Makefile就可以知道他依赖于哪一个宏,才能知道去把哪个宏注释掉。
如暂时不提供nand flash支持,因而不需要吧s3c2410_nand.c编进内核,因而要把CONFIG_NAND_S3C2410这个宏定义去掉,在u-boot中搜索可以看到
因为 CONFIG_NAND_S3C2410这个宏 是否被定义是CONFIG_NAND_S3C2410的宏被定义 ,因而 //#define CONFIG_CMD_NAND