移植uboot-2012.04.01到JZ2440(四)

前言:DM9000C网卡移植

1.添加uboot中网卡的驱动到工程中

由于uboot已经有支持DM9000C的网卡驱动,所以我么这里先把驱动添加到makefile中。
在这里插入图片描述
从上面makefile可以看到,只要添加了CONFIG_DRIVER_DM9000这个宏,就能把改驱动增加进去,所以我们先去添加这个宏,我们先全局搜一下这个宏,看看还需要定义哪些相关的东西。

在这里插入图片描述
找到别人使用该网卡定义的宏,我们这里也这样定义
在这里插入图片描述

2.修改宏定义

首先修改基地址,根据原理图我们知道,在2440上网卡是在back4区域,所以基地址是0x20000000
DM9000的地址线和数据线是分离的,但是数据线上可以传输命令或者数据,需要使用信号线CMD区分,查看原理图,方便起见将 LADDR2 信号线接到 CMD 引脚上,当作控制信号来用。

所以当发出的地址中 bit2 为0时,表示数据线上传输的命令,当发出地址中 bit 2 为1时,表示传输的是数据,DM9000_DATA宏定义就表示发数据时地址应该有什么变化,将bit 2置为1即可:
综合以上修改,最后修改结果如图:
在这里插入图片描述

3.设置内存控制器支持网卡

根据原理图,网卡DM9000是接到内存控制器的BANK4的,所以需要设置内存控制器中BANK4的位宽参数和时序参数。
通过内存控制器的 BWSCON 寄存器来设置数据总线位宽:
通过内存控制器的 BANKCON4 来设置 BANK4 的时序参数:
根据DM9000的时序性能,此寄存器的值可以设置为0x00000740。
在uboot中修改内存控制器设置:
B4_BWSCON寄存器的设置是DW16,和DM9000一致,不用修改:
在这里插入图片描述
时序参数宏定义中只需要修改一处即可:
在这里插入图片描述
编译之后,结果还是不符合预期,提示找不到网卡,根据启动过程进行错误分析。

4.修改初始化函数

在uboot启动的第二阶段board_init_r函数中,网卡初始化调用的是eth_initialize函数:
分析代码发现有一个板载相关的初始化函数,追进去发现是在smdk_2440.c文件中
在这里插入图片描述

#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

这里我们发现我们已经注释掉了CONFIG_CS8900,所以这里肯定找不到网卡,我们替换掉这里的宏
在这里插入图片描述
重新编译,没有问题。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值