移植U-boot支持DM9000C网卡
在U-boot原本的程序里面已经支持了DM9000网卡,但是没有编译进去,所以我们来看一下net目录下的Makefile文件
\drivers\net\Makefile,第17行
obj-$(CONFIG_CALXEDA_XGMAC) += calxedaxgmac.o
obj-$(CONFIG_CS8900) += cs8900.o
obj-$(CONFIG_TULIP) += dc2114x.o
obj-$(CONFIG_ETH_DESIGNWARE) += designware.o
obj-$(CONFIG_DRIVER_DM9000) += dm9000x.o
obj-$(CONFIG_DNET) += dnet.o
发现了如果定义了宏CONFIG_CS8900就会编译cs8900网卡,如果定义了CONFIG_DRIVER_DM9000才会编译dm9000网卡,再找一下,发现宏CONFIG_CS8900是在smdk2440.h文件中的,所以我们修改一下头文件:
\include\configs\smdk2440.h,第38行
#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000
#endif
然后重新编译一下,发现出现一大堆错误:
首先来看一下第一个错误的位置,没有定义DM9000_DATA这个变量,再用查找指令
grep -rn "DM9000_DATA" *
发现其他开发板有用到dm9000网卡,仿照他们,重新修改一下头文件
\include\configs\smdk2440.h,第38行
#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x08000000
#define DM9000_IO (CONFIG_DM9000_BASE)
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
#endif
因为网卡跟内存一样也是可以用内存控制器直接读地址,那这些基地址要怎么设置,这就得看我们的原理图
片选引脚是接在nGS4上,再对应我们S3C2440的芯片手册
所以网卡的地址就是0x20000000~0x28000000,再看芯片的CMD引脚接在LADDR2上,偏移量为4。最后修改头文件如下:
\include\configs\smdk2440.h,第38行