u-boot-2016.03在mini2440移植 之DM9000

u-boot默認的網絡芯片是CS8900,但開發板上的網絡芯片是DM9000,因此爲了使用網絡功能,就必須進行移植。好在u-boot有DM9000的驅動程序,咱們只須要把關於CS8900的部分換成DM9000的部分便可。網絡

首先在include/configs/smdk2410.h 中註釋以下語句dom

#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函數

再增長以下語句 :spa

#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_NO_SROM                           //not use the dm9000 eeprom
#define CONFIG_NET_RANDOM_ETHADDR                       //set the ethaddr
#define CONFIG_LIB_RAND                                 //random_ethadd need rand function
#define CONFIG_DM9000_BASE      0x20000300
#define DM9000_IO               CONFIG_DM9000_BASE     
#define DM9000_DATA             (CONFIG_DM9000_BASE + 4 ) //data address*/blog

而後定義缺省的環境變量,先添加MAC地址,再修改開發板以及宿主機的IP地址:ip

#define CONFIG_NETMASK          255.255.255.0
#define CONFIG_IPADDR           192.168.1.8         //arm board ip
#define CONFIG_SERVERIP         192.168.1.120       // pc ip  
開發

打開board/samsung/smdk2410/smdk2410.c 文件中的board_eth_init函數 在133行增長以下內容:it

#ifdef CONFIG_DRIVER_DM9000 
        rc= dm9000_initialize(bis);
#endif
io

完成上述步驟,開發板就能正常的使用網絡功能了。function

運行結果如圖所示:

當看到最後一行「host192.168.1.120 is alive」時,說明網絡功能已能正常使用。若是爲了去掉「could not establish link」字樣,並加快運行速度,能夠註釋掉drivers/net/dm9000x.c文件中的dm9000_init函數內的下面語句:

       i= 0;

       while(!(dm9000_phy_read(1) & 0x20)) {   /*autonegation complete bit */

              udelay(1000);

              i++;

              if(i == 10000) {

                     printf("couldnot establish link\n");

                     return0;

              }

       }

 

       /*see what we've got */

       lnk= dm9000_phy_read(17) >> 12;

       printf("operatingat ");

       switch(lnk) {

       case1:

              printf("10M half duplex ");

              break;

       case2:

              printf("10M full duplex ");

              break;

       case4:

              printf("100M half duplex ");

              break;

       case8:

              printf("100M full duplex ");

              break;

       default:

              printf("unknown:%d ", lnk);

              break;

       }

相關文章
相關標籤/搜索