SMDK2410中默认使用的网卡为CS8900,而实际开发板上使用的网卡为DM9000,故需要进行替换。U-Boot中已经提供了现成的DM9000驱动程序,所以这部分移植相对比较简单,只需要更改下配置文件即可。
打开include/configs/smdk2440.h
文件,目前网卡部分的宏定义为:
1 |
将其修改为:
1 |
网卡的初始化入口位于board/samsung/smdk2440/smdk2440.c
文件中,在其中找到board_eth_init()
函数,仿照现有的CS8900网卡的形式添加DM9000的初始化代码即可:
1 | int board_eth_init(bd_t *bis) |
最后,需要正确设置器件的IP地址、子网掩码等信息,相关宏定义位于include/configs/smdk2440.h
文件中:
1 |
这里没有指定MAC地址,会使用一个随机MAC地址,而且运行时会提示下面这个警告:
1 | Warning: dm9000 (eth0) using random MAC address - 4a:0a:ab:7c:96:2f |
解决办法就是使用使用环境变量的方法指定一个MAC地址,具体操作方法见:U-Boot中IP地址设置方法
上述修改完成后编译运行,使用ping
命令检查网络是否可正常使用:
1 | GMF@2440 # ping 192.168.1.11 |
这里ping的是主机虚拟机中的Ubuntu系统,可以看到连接是没有问题的。不过有一个需要注意的问题是,目前连上网线后在电脑端并不会显示已连接,而是显示:“网络电缆被拔出”,也就是和没插网线时是一样的。不过这不影响正常使用,这个问题的具体原因有待之后再来分析。
另外,此处的移植针对的是DM9000网卡,目前有些开发板使用的是DM9000A,这是两个不同的芯片,驱动程序是不兼容的,针对DM9000A还要修改DM9000的驱动才能正常使用。这个问题也留待将来再来分析解决。
移植好的U-Boot见我的Github项目。