微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > u-boot-2012.04.01流程以及移植说明

u-boot-2012.04.01流程以及移植说明

时间:11-21 来源:互联网 点击:

这么大,所以不能使用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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top