2440超详细uboot移植笔记(十二)------移植网卡驱动

你好!这里是风筝的博客,欢迎和我一起交流。

如果本篇博客对您有帮助,或许可以在下方评论给我留个言。


a.之前我们2440超详细uboot移植笔记(九)------修改错误设置的CONFIG_DM9000_BASE等的值是参考别人的配置文件修改的,

现在我们要修改成适应我们开发板的参数.


b.

#define CONFIG_DM9000_BASE 0x2c000000

修改为:

#define CONFIG_DM9000_BASE 0x20000000


c. 解决Net:   No ethernet found问题:

在smdk2440.c文件中,修改board_eth_init函数:

int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
return rc;
}


d.在smdk2440.h文件里修改默认环境参数:

#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.104
#define CONFIG_SERVERIP 192.168.1.102
#define CONFIG_ETHADDR 00:0c:29:f1:28:2f

/*ip和路由器ip同一个网段即可*/


/*表示内核打印信息从串口0输出,文件系统在mtdblock3*/
#define CONFIG_BOOTARGS "console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs2 "
#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000"

uboot通过这两条命令来启动内核.其中,设置了CONFIG_BOOTCOMMAND就会使得uboot倒数5s后进入内核,表示从30000000读取到kernel这个分区,当然,kernel分区我们现在还没设置。其中,在smdk2440_defconfig文件(路径:configs\smdk2440_defconfig)中可以修改进入系统的倒计时时间.


d. 在env_default.h(路径:include\env_default.h)文件中,

在default_environment数组中添加:

#ifdef CONFIG_ETHADDR
"ethaddr=" __stringify(CONFIG_ETHADDR) "\0"
#endif


f.至此,uboot已经可以识别我们的网卡了,而且可以ping通我们的虚拟机:2440超详细uboot移植笔记(十二)------移植网卡驱动

注意:如果设置了参数,此时还不能用save命令保存设置的参数,因为还未设置参数保存的地址,如果使用可能会破坏nand上的重要数据。


g.在新版uboot中,使用tftp下载时会出现一个提示:could not establish link


h. 执行

grep "could not establish link" * -nR

命令,会发现:

drivers/net/dm9000x.c:371:                      printf("could not establish link\n");

可知我们需要修改下dm9000x.c这个文件.


i. 注释掉以下语句:

i = 0;
while (!(dm9000_phy_read(1) & 0x20)) { /* autonegation complete bit */
udelay(1000);
i++;
if (i == 10000) {
printf("could not establish link\n");
return 0;
}
}