经过前面的几节内容,我们的uboot移植已经支持了nor flash启动和nand flash启动了,这一节的内容是让Uboot支持DM9000网卡,就可以使用tftp下载文件了,速度要比串口下载快很多
第一步先找到DM9000的文件–driver/net/dm9000.c,在这个文件的同目录下查看Makefile
可以看到,要是想编译dm9000.c这个文件,就必须定义CONFIG_DRIVER_DM9000这个宏,在smdk2440.h中定义这个宏
上面是他原本使用的dm8900网卡的宏定义,我们把它去掉,定义下面的dm9000网卡使用的宏,从2440的原理图上可以看到,dm9000网卡使用的片选信号是nGCS4,在数据手册上找到相应的内存地址范围
CONFIG_DM9000_BASE的值就是这个内存的基地址,DM9000_IO表示数据寄存器的地址,那么也应该和它是一样的,DM9000_DATA宏表示地址,先通过DM9000_DATA传输要写的寄存器的地址,然后把数据通过DM9000_IO发送过来,
在dm9000的原理图上,CPU的地址线的LADDR2连接在了dm9000网卡上,所以DM9000_DATA的值就是网卡的基地址+4
然后要设置的就是内存控制器,设置操作dm9000的时序和位宽,BWSCON寄存器的内容如下
其余的寄存器也是一样的,这些寄存器的值我们在start.s中就已经设置过了,这里就使用这些数据,如果要自己重新来写的话就需要去查看网卡的详细的数据手册,这些内容我会在另一篇中进行介绍,所以,这里就不再多说,
编译,烧写,然后启动,第一次输出如下的错误信息
Net: No ethernet found
定位到eth_initialize函数
在board_eth_init函数里
这个函数里原来使用的是dm8900网卡的初始化函数,添加dm9000网卡的初始化函数,重新编译,烧写,启动,可以看到已经可以识别到dm9000网卡了
In: serial 1
Out: serial
Err: serial
Net: dm9000
设置ip地址 set ipaddr xxx,ping主机,ping主机,发生错误
could not establish link
ERROR: `ethaddr’ not set
重新设置ip地址和mac地址
set ipaddr 192.168.1.110
set ethaddr 00:0c:29:64:fb:19
再去ping主机就可以ping的通,这时候就可以使用tftp下载程序了,打开工具Tftpd64,设置好tftp的目录,然后设置tftp服务器的ip地址
set serverip 192.168.1.100
tftp 30000000 u-boot.bin
成功下载