移植最新的uboot之:支持网络下载功能

支持网络下载功能
tq2440的网卡使用了DM9000网卡
在新的uboot中的驱动已经对DM9000支持的很好了,只需要做一些配置修改即可
一、加入DM9000的编译配置
shanl@shanl-Aspire-4740:~/Boot/netsupoort$ vi drivers/net/Makefile
找到DM9000的编译选项:
COBJS-$(CONFIG_CS8900) += cs8900.o
COBJS-$(CONFIG_TULIP) += dc2114x.o
COBJS-$(CONFIG_DESIGNWARE_ETH) += designware.o
COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
COBJS-$(CONFIG_DNET) += dnet.o
COBJS-$(CONFIG_E1000) += e1000.o
在配置文件中加入:
配置CONFIG_DRIVER_DM9000

#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

修改为:

#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000
#endif
二、重新make编译,出现下面的错误:
dm9000x.c: In function 'dm9000_outblk_8bit':
dm9000x.c:156: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c:156: error: (Each undeclared identifier is reported only once
dm9000x.c:156: error: for each function it appears in.)
dm9000x.c: In function 'dm9000_outblk_16bit':
dm9000x.c:165: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_outblk_32bit':
dm9000x.c:173: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_inblk_8bit':
加入 DM9000_DATA和DM9000_IO的定义:
#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE              0x20000000
#define DM9000_IO                       CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)

#endif
重新make编译

出现下图所示。


出现: No ethernet found

三、解决 No ethernet found错误,修改board\samsung\shanl2440\Smdk2410.c
修改:
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
return rc;
}
#endif
为:
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#else 
rc = dm9000_initialize(bis);
#endif
return rc;
}

#endif

重新编译下载到开发板:



没有报上面的错误了

测试一下:

通讯正常!!!!

但是使用tftp下载出现下面的现象一直阻塞:

SHANL2440 # tftp 30000000 u-boot.bin
dm9000 i/o: 0x20000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 70:5a:b6:03:40:dd
could not establish link
Using dm9000 device
TFTP from server 192.168.0.100; our IP address is 192.168.0.1
Filename 'u-boot.bin'.
Load address: 0x30000000
Loading: #

解决(没有解决):

现象:tftp 下载到30000000地址就会卡住,下载到其他地址都是正常的。。。。原因是什么????

按照韦东山老师的patch修改了下:

arch\arm\cpu\arm920t\start.S

加入:

.globl base_sp
base_sp:
.long 0

call_board_init_f:
ldr r0,=0x00000000
bl board_init_f

/* unsigned int的值存在r0里, 正好给board_init_r */
ldr r1, _TEXT_BASE
ldr sp, base_sp /* 重新设置栈 */
/* 调用第2阶段的代码 */
bl board_init_r

arch/arm/lib/board.c 

加入:

unsigned int board_init_f(ulong bootflag)
{
bd_t *bd;
init_fnc_t **init_fnc_ptr;
gd_t *id;
ulong addr, addr_sp;
extern ulong base_sp;
。。。

* round down to next 4 kB limit
*/
//addr -= gd->mon_len;
//addr &= ~(4096 - 1);
addr = CONFIG_SYS_TEXT_BASE;   /* addr = _TEXT_BASE */

debug("Reserving %ldk for U-Boot at: %08lx\n", gd->mon_len >> 10, addr);
#ifndef CONFIG_SPL_BUILD
#ifdef CONFIG_PRAM
ulong reg;
#endif

。。。

memcpy(id, (void *)gd, sizeof(gd_t));
base_sp = addr_sp;
//relocate_code(addr_sp, id, addr);
return (unsigned int)id;

即可

原因以后再分析

启动内核的时候,如果地址下载到0x30008000也会出现下面的错误:


等待以后解决把!!!


设置内存控制器

1.设置位宽(BWSCON),不需要改16bit,设置就是16位的

2.设置时序(BANKCON4):具体时序的设置可以参考第2期视频DM9000


代码链接:uboot支持DM9000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值