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

xiaoxiao2021-02-27  292

你好!这里是风筝的博客,

欢迎和我一起交流。


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通我们的虚拟机:

注意:如果设置了参数,此时还不能用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; } }

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-5172.html

最新回复(0)