这么大,所以不能使用u-boot来烧写u-boot,只能使用u-boot里的指令来烧写:
烧写到nand flash:
usb 1 30000000
用DNW发送文件过去
nand erase 0 80000
nand write 30000000 0 80000
把开关拨到nand重启有输出,说明现在支持了nand启动
烧写到nor flash:
usb 1 30000000 //1表示一直等待
用DNW发送文件过去
protect off all //解除norflash写保护
erase 0 7FFFF //擦除从0到0x7FFFF共0x80000个字节
cp.b 30000000 0 80000 //从内存0x30000000开始烧写程序到norflash的0地址去,烧写0X80000个字节
2、新烧写到nor flash的u-boot不支持USB烧写,可以使用以下命令,用WINS自带的超级终端下载烧写,ymodem模式:
loady 32000000 //此时运行的是老的u-boot,栈指针在0x30000000,故不能下载到0x30000000
protect off all
erase 0 7ffff
cp.b 32000000 0 80000
reset
3、修改好网卡后可以用tftp下载内核:
set ipaddr 192.168.48.100
set ethaddr 00:0c:29:4d:e4:f4
到这里先要在xp打开tptp服务器,服务器ip为192.168.48.103
set serverip 192.168.48.103
tftp 30000000 uImage
bootm 30000000
4、用tftp下载u-boot到nor flash,同样可以用tftp下载u-boot到nand flash:
set ipaddr 192.168.48.100
set ethaddr 00:0c:29:4d:e4:f4
到这里先要在xp打开tptp服务器,服务器ip为192.168.48.103
set serverip 192.168.48.103
tftp 30000000 u-boot.bin
protect off all //解除norflash写保护
erase 0 3FFFF //新裁剪的u-boot只有200k,擦除从0到0x3FFFF共0x40000个字节
cp.b 30000000 0 40000
reset
5、烧写内核:
内核打印出来的分区信息
地址: 大小:
0x00000000-0x00040000 : "bootloader"
0x00040000-0x00060000 : "params"
0x00060000-0x00260000 : "kernel"
0x00260000-0x10000000 : "root"
nand erase 60000 200000
nand write 30000000 60000 200000
tftp 30000000 uImage
nand erase.part kernel
nand write 30000000 kernel
或:tftp 30000000 uImage;nand erase.part kernel;nand write 30000000 kernel
6、烧写200K的u-boot
烧写到nand flash:
tftp 30000000 u-boot.bin
nand erase 0 40000
nand write 30000000 0 40000
或:tftp 30000000 u-boot.bin;nand erase 0 40000;nand write 30000000 0 40000
把开关拨到nand重启有输出,说明现在支持了nand启动
注意:nor flash启动的u-boot既可以烧写nor flash本身也可以烧写nand flash,但是如果是nand flash启动的话就没办法操作nor flash,因为nand flash启动的时候0地址对应片内内存,无法访问nor flash;
使用tftp工具下载时,文件不能在中文路径下,否则下载的时候找不到文件导致下载失败。
烧写文件时文件实际的大小可以在文件下载完成后看到,或则用:$filesize,老版本的要带括号,即$(filesize)
命令行设置bootcmd:set bootcmd nand read 30000000 kernel;bootm 30000000
13、修改代码支持DM9000网卡:
DM9000源码在drivers/net目录下面,查看其Makefile文件,可以知道只有配置CONFIG_DRIVER_DM9000才能支持DM9000
在配置文件:/include/configs/smdk2440.h文件内找到CONFIG_CS8900,去掉,添加CONFIG_DRIVER_DM9000
在编译,根据错误找找原因,发现没有定义DM9000_DATA,查找DM9000_DATA参考别的源码定义:
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA CONFIG_DM9000_BASE + 4
设置内存控制器位宽等发送数据时序参数:
.long 0x22011110 //BWSCON
.long 0x00000700 //BANKCON0
.long 0x00000700 //BANKCON1
.long 0x00000700 //BANKCON2
.long 0x00000700 //BANKCON3
.long 0x00000740 //BANKCON4 ,修改这里
编译烧写:根据提示找到board.c里面的初始化函数调用的依然是CS8900初始化函数:
eth_initialize(gd->bd);
if (board_eth_init != __def_eth_init)
#ifdef CONFIG_CMD_NET
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
return rc;
}
#endif
故增加:
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
在