通过使用uboot的网络功能可以更新ubook,烧写内核,文件系统,如果网络功能不可能,那还不如同变砖了一样.当然如果支持sd卡启动,可能通过sd卡完成这些功能,但是也太过麻烦了.飞凌的6410开发板提供的uboot的网络驱动是cs8900,但是实际上网卡是dm9000ae.

烧入后发无法ping通,tftp不可用,输出:

  1. CS8900 Ethernet chip not found?!
CS8900 Ethernet chip not found?!

下面,提供简单的修改方法,把驱动改为dm9000,让网络功能用起来.

1.修改include/configs/smdk6410.h

  1. #ifdef  CONFIG_DRIVER_SMC911X
  2. #undef  CONFIG_DRIVER_CS8900
  3. #define CONFIG_DRIVER_SMC911X_BASE  0x18800300
  4. #else
  5. //注释掉下面3行
  6. //#define CONFIG_DRIVER_CS8900  0   /* we have a CS8900 on-board */
  7. //#define CS8900_BASE       0x18800300
  8. //#define CS8900_BUS16      1   /* the Linux driver does accesses as shorts */
  9. //增加下面4行
  10. #define CONFIG_DRIVER_DM9000                1
  11. #define CONFIG_DM9000_BASE          0x18000000
  12. #define DM9000_IO                   CONFIG_DM9000_BASE
  13. #define DM9000_DATA                 (CONFIG_DM9000_BASE+4)
  14. #define CONFIG_DM9000_USE_16BIT
  15. //#define CONFIG_DM9000_DEBUG
  16. #endif
#ifdef 	CONFIG_DRIVER_SMC911X
#undef	CONFIG_DRIVER_CS8900
#define CONFIG_DRIVER_SMC911X_BASE	0x18800300
#else
//注释掉下面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 */
//增加下面4行
#define CONFIG_DRIVER_DM9000                1
#define CONFIG_DM9000_BASE          0x18000000
#define DM9000_IO                   CONFIG_DM9000_BASE
#define DM9000_DATA                 (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT
//#define CONFIG_DM9000_DEBUG
#endif

2.303行

从环境变量中读取MAC地址

把((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);替换为:

  1. char *s, *e;
  2. s = getenv ("ethaddr");
  3. for (i = 0; i < 6; ++i)
  4. {
  5. bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;
  6. if (s)
  7. s = (*e) ? e + 1 : e;
  8. }
char *s, *e;
s = getenv ("ethaddr");
for (i = 0; i < 6; ++i)
{
	bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;
	if (s)
		s = (*e) ? e + 1 : e;
}

3.修改318行,修改0x00为0xff

修改MAR寄存器(Multicast Address Register)的值,修正第一次收不到数据的错误

  1. for (i = 0, oft = 0x16; i < 8; i++, oft++)
  2. DM9000_iow(oft,0x00);
  3. //DM9000_iow(oft, 0xff);
for (i = 0, oft = 0x16; i < 8; i++, oft++)
	DM9000_iow(oft,0x00);
	//DM9000_iow(oft, 0xff);

4.413行

注释掉下面2行

修正一直无法收到数据的错误,不要每次调用halt的时候都对PHY进行复位操作,否则会引起无法接受到数据的情况

  1. void
  2. eth_halt(void)
  3. {
  4. DM9000_DBG("eth_halt\n");
  5. /* RESET devie */
  6. //phy_write(0, 0x8000); /* PHY RESET */
  7. //DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */
  8. DM9000_iow(DM9000_IMR, 0x80);   /* Disable all interrupt */
  9. DM9000_iow(DM9000_RCR, 0x00);   /* Disable RX */
  10. }
void
eth_halt(void)
{
	DM9000_DBG("eth_halt\n");

	/* RESET devie */
	//phy_write(0, 0x8000);	/* PHY RESET */
	//DM9000_iow(DM9000_GPR, 0x01);	/* Power-Down PHY */
	DM9000_iow(DM9000_IMR, 0x80);	/* Disable all interrupt */
	DM9000_iow(DM9000_RCR, 0x00);	/* Disable RX */
}

这里只是根据别人的文章进行实现,的确可行,但是具体为什么这么做还有些问题需要自己去弄明白.

修正uboot网络不可用的更多相关文章

  1. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  2. Android 检查手机网络是否可用

    添加网络状态权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 代 ...

  3. android 检测网络是否可用

    /**     * 检测网络是否可用     *      * @return     */    public boolean isNetworkConnected() {        Conne ...

  4. Android中判断当前网络是否可用

    转载原文地址:http://www.cnblogs.com/renqingping/archive/2012/10/18/Net.html 当前有可用网络,如下图: 当前没有可用网络,如下图: 实现步 ...

  5. Android-判断当前网络是否可用

    1.声明权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 2. ...

  6. CetnOS minimal 网络不可用

    系统版本: CentOS-6.6-i386-minimal 问题说明: CentOS minimal 在安装完成之后,网络不可用,一些常见的命令报错,如: ping: unknow host xxxy ...

  7. mono 判断系统的网络是否可用

    /**  * 判断系统的网络是否可用  * @return  */        private bool isNetworkConnected()        {            bool ...

  8. Android程序检测网络是否可用

    在做Android应用程序中,连接网络的时候,常常要用到检测网络状态是否可用,在这里分享一个比较好用的方法. 本人参考:http://blog.csdn.net/sunboy_2050/article ...

  9. tiny210 u-boot 网络ping不通主机解决方案

    站在巨人的肩膀上: http://blog.csdn.net/liukun321/article/details/7438880 http://www.arm9home.net/read.php?ti ...

随机推荐

  1. 一个特殊的List去重问题的解决方案

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7039842.html 场景描述:公司新活动,需要在活动页面显示指定利率的四种投资项目,并且 ...

  2. java基础(六) switch语句的深入解析

    引言   switch 语句是非常的基础的知识,掌握起来也不难掌握,语法比较简单.但大部分人基本是知其然,不知其所以然.譬如 早期JDK只允许switch的表达式的值 int及int类型以下的基本类型 ...

  3. 是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...

  4. CSS核心内容之浮动

    1.浮动涉及到左浮动,右浮动,清除浮动. 2.浮点的特点: 1.向指定的方向浮动,并且让出空间 2.如果后面的元素也是浮动的,那么后面的元素就会在碰到前面的浮动的元素或者边框时,就定位在那里 3.如果 ...

  5. python扒取百宝彩网站江西快三当日期号及开奖结果

    一.环境 windows10+python27 二.需求: 1.获取百宝彩网站中,江西快三当日的开奖期号和中奖号码: 2.根据输入期号,输出开奖号码: 三.上代码 #!/bin/env python ...

  6. BZOJ 4216: Pig [分块]

    传送门 询问区间和...内存3M 分块前缀和... 我连swap都是这么l=l^r , r=l^r , l=l^r写的.... #include <cstdio> typedef long ...

  7. HDU 4333 Revolving Digits [扩展KMP]【学习笔记】

    题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数. SAM乱搞失败 当然要先变SS了 然后考虑每个后缀前长为n个字符,把它跟S比较就行了 如 ...

  8. BZOJ 3771: Triple [快速傅里叶变换 生成函数 容斥原理]

    题意:n个物品,可以用1/2/3个不同的物品组成不同的价值,求每种价值有多少种方案(顺序不同算一种) [生成函数]: 构造这么一个多项式函数g(x),使得n次项系数为a[n]. 普通型生成函数用于解决 ...

  9. 联合查询到gridview

    using com.DAL.Base; using DAL.ruanmou; using System; using System.Collections.Generic; using System. ...

  10. Language Modeling with Gated Convolutional Networks

    语言模型 所谓的语言模型,即是指在得知前面的若干个单词的时候,下一个位置上出现的某个单词的概率. 最朴素的方法是N-gram语言模型,即当前位置只和前面N个位置的单词相关.如此,问题便是,N小了,语言 ...