解决ok6410 uboot下ping不通的问题

时间:2021-04-18 17:49:59

    ok6410官方光盘中所带uboot是不支持ping和tftp等网络功能的。因此需要对uboot源代码稍作修改,否则会提示:CS8900 Ethernet chip not found?!
原因就是因为在boot1.1.6/include/configs/smdk6410.h,里面确实是配置为网卡使用CS8900。而实际上开发板的网卡配的是DM9000。

解决这个问题,网上有很多资料可以作为参考,但我还是想把自己的修改以及遇到的问题分享回来,避免其他像我这样的初学者再走弯路。

1)修改smdk6410.h
/******************************************************************************/
        /*              把驱动改为dm9000,让boot的网络功能用起来                                */
/******************************************************************************/
// 注释掉下面3行  
// #define CONFIG_DRIVER_CS8900  0 /* we have a CS8900 on-board */
// #define CS8900_BASE       0x18800300
// #define CS8900_BUS16     1 /* the Linux driver does accesses as shorts */

/* 2013/08/19  修改uboot实现tftp下载内核 */
// 增加下面4行  
#define   CONFIG_DRIVER_DM9000      1
#define   CONFIG_DM9000_BASE    0x18000300 /*XM0CSN1*/ 
#define   DM9000_IO              CONFIG_DM9000_BASE
#define   DM9000_DATA                 (CONFIG_DM9000_BASE + 4) /*ADDR2*/
#define   CONFIG_DM9000_USE_16BIT

2)使用天嵌的光盘资料下的dm9000x.c和dm9000x.h替换OK6410的u-boot里的同名文件即可。
(dm9000x.c和dm9000x.h这两个文件可在网上下到)

3)编译
#make clean;       
#make smdk6410_config       
#make

4)升级uboot.bin文件

5)修改boot参数
例如;
netmask=255.255.255.0
serverip=192.168.0.101
gatewayip=192.168.0.1
ipaddr=192.168.0.232

我当时升好boot之后忘了改参数,导致ping的时候提示:
SMDK6410 # ping 192.168.0.100
Found DM9000 ID:90000a46 at address 18000300 !
DM9000 work in 16 bus width
bd->bi_entaddr: 00:40:5c:26:0a:b5
[eth_init] MAC:0:40:5c:26:a:b5:
ping failed; host 192.168.0.100 is not alive(网络不通)
当时还没意识到要改ip,结果还去反复的对比了一下源代码,以为自己哪里漏改掉了。