原創(chuàng)文章版權(quán)所有!如需轉(zhuǎn)載,請注明出處: http://hi.baidu.com/liushuiyue1/myhome謝謝合作?。。。?! 五、 DM9000在Uboot2010.03上的移植 1)首先進(jìn)入include/configs/修改smdk6410.h文件,屏蔽CS8900的相關(guān)宏定義同時添加DM9000AE的相關(guān)宏 #cd include/configs/// #gedit smdk6410.h // smdk6410.h修改內(nèi)容如下: #define CONFIG_NET_MULTI 1 //#define CONFIG_CS8900 /* we have a CS8900 on-board */ //#define CONFIG_CS8900_BASE 0x18800300 //#define CONFIG_CS8900_BUS16 /* follow the Linux driver */
#define CONFIG_DRIVER_DM9000 1/* we have a DM9000AE on-board */ #define CONFIG_DM9000_BASE 0x18000300 #define DM9000_IO CONFIG_DM9000_BASE #define DM9000_DATA (CONFIG_DM9000_BASE + 4) #define CONFIG_DM9000_USE_16BIT
#define CONFIG_ETHADDR 10:23:45:67:89:ab #define CONFIG_NETMASK 255.255.255.0 #define CONFIG_IPADDR 192.168.174.2 //開發(fā)板上的ip地址 #define CONFIG_SERVERIP 192.168.174.1//虛擬機(jī)上的ip地址 #define CONFIG_GATEWAYIP 192.168.174.6 #define CONFIG_DM9000_DEBUG//一定要加上否則會出現(xiàn)沒有設(shè)置ipaddr的現(xiàn)象 2)修改net/eth.c,添加DM9000AE的初始化函數(shù)(紅色部分為修改的地方): int eth_initialize(bd_t *bis) { unsigned char env_enetaddr[6]; int eth_number = 0;
eth_devices = NULL; eth_current = NULL;
show_boot_progress (64); #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) miiphy_init(); #endif /* Try board-specific initialization first. If it fails or isn't * present, try the cpu-specific initialization */ if (board_eth_init(bis) < 0) cpu_eth_init(bis);
#if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750) mv6436x_eth_initialize(bis); #endif #if defined(CONFIG_DB64460) || defined(CONFIG_P3Mx) mv6446x_eth_initialize(bis); #endif #if defined(CONFIG_DRIVER_DM9000) dm9000_initialize(bis); #endif if (!eth_devices) { puts ("No ethernet found.\n"); show_boot_progress (-64); } else { struct eth_device *dev = eth_devices; char *ethprime = getenv ("ethprime");
show_boot_progress (65); do { if (eth_number) puts (", ");
printf("%s", dev->name);
if (ethprime && strcmp (dev->name, ethprime) == 0) { eth_current = dev; puts (" [PRIME]"); }
eth_getenv_enetaddr_by_index(eth_number, env_enetaddr);
if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) { if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) && memcmp(dev->enetaddr, env_enetaddr, 6)) { printf ("\nWarning: %s MAC addresses don't match:\n", dev->name); printf ("Address in SROM is %pM\n", dev->enetaddr); printf ("Address in environment is %pM\n", env_enetaddr); }
memcpy(dev->enetaddr, env_enetaddr, 6); }
eth_number++; dev = dev->next; } while(dev != eth_devices); 重新編譯uboot,并下載uboot到nand flash中,重新啟動開發(fā)板,觀察打印信息如下,可以發(fā)現(xiàn)uboot已經(jīng)能識別DM9000芯片:
使用ping指令進(jìn)行測試如下:
至此,uboot已經(jīng)能支持dm9000的網(wǎng)卡,可以使用tftp協(xié)議下載程序并在ram中運(yùn)行了。 |