手头有一块6410开发板,已经有别人提供的uboot代码(基于2011.06),但是在检测dm9000时显示下面的输出:

Net:   No ethernet found.

当然其他网络命令例如ping等都执行失败。

但是在(include/configs/*6410*.h)下添加一行(增加debug)信息:

#define DEBUG

那么就能够检测到dm9000:

Net:   dm9000

配置ip地址后执行ping命令结果如下:

hwgw # setenv ipaddr 192.168.211.212
hwgw # ping 192.168.211.2
Trying dm9000
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in bit mode
MAC: :::8f:ad:b3
operating at 100M full duplex mode
Using dm9000 device
sending ARP for 02d3a8c0
ARP broadcast
packet received
packet received
Receive from protocol 0x806
Got ARP
Got ARP REPLY, set server/gtwy eth addr (:e0:4c:::)
Got it
packet received
packet received
Receive from protocol 0x800
Got IP
len=, v=
host 192.168.211.2 is alive

当前开发板没有jtag口,只能通过打印的方式来进行调试,大概试了有一天多时间,

在dm9000_initialize等函数中加入类似printf("hello\n");之类的代码时,会出现错误.

另外,如果添加#define CONFIG_DM9000_DEBUG配置,也会出现相同的错误。

具体错误信息就是在显示下面的信息后就重启uboot:

DRAM: 128M

而该信息恰好是board_init_f中接近于最后几行的代码,board_init_f中最后一行是调用relocate_code函数,

所以我怀疑这种情况下有可能relocate_code失败引起的。而2011.06版本乃至以后版本的uboot都采用类似的代码,
都是在board_init_f最后执行relocate_code,然后再执行board_init_r。而这个relocate_code是用汇编代码编写,

出错后很难找出故障原因,可能还不如老版本(老版本中relocate_code在board_init_f之前就执行完毕了)的更容易移植。

这个bug暂时也没法调试成功,但不影响正常使用 ,留到以后对uboot有了更深入了解后再来看这个问题。

备注:几天后我解决了这个问题,上述表述有些是不准确的,bug详细描述及解决方法见我的博文《uboot 版本号生成过程》。

uboot dm9000驱动故障的更多相关文章

  1. Mini2440 DM9000 驱动分析(一)

    Mini2440 DM9000 驱动分析(一) 硬件特性 Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系: PW_RST 连接到复位按键,复位按键按下,低电平 ...

  2. 【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现

    一.dm9000_init 打印出驱动的版本,注冊dm9000_driver驱动,将驱动加入到总线上.运行match,假设匹配,将会运行probe函数. 1 static int __init 2 d ...

  3. uboot的驱动模型理解

    uboot的驱动模型,简称dm, 具体细节建议参考./doc/driver-model/README.txt 关于dm的三个概念: uclass:一组同类型的devices,uclass为同一个gro ...

  4. 基于335X的UBOOT网口驱动分析

    基于335X的UBOOT网口驱动分析 一.软硬件平台资料 1.  开发板:创龙AM3359核心板,网口采用RMII形式 2.  UBOOT版本:U-Boot-2016.05,采用FDT和DM. 参考链 ...

  5. Xilinx Uboot网卡驱动分析

    1.MAC控制器.网卡.PHY.MDIO.mii.gmii.rgmii概念扫盲 网卡在功能上包含OSI模型的两个层,数据链路层和物理层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准 ...

  6. 【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析

    [linux驱动分析]之dm9000驱动分析(一):dm9000原理及硬件分析 [linux驱动分析]之dm9000驱动分析(二):定义在板文件里的资源和设备以及几个宏 [linux驱动分析]之dm9 ...

  7. DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一

    关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...

  8. [国嵌攻略][065][DM9000驱动程序设计]

    移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...

  9. uboot 网络驱动模型

    原文:https://blog.csdn.net/zhouxinlin2009/article/details/45390065 UBOOT的PHYCHIP配置 PHYCHIP的配置位于 includ ...

随机推荐

  1. angular2+ 引用layDate日期选择插件

    layDate日期选择插件使用npm安装好像是行不通的,但angular2+的日期选择控件库又不能够支持时分秒的选择 在angular项目中引用layDate 1. 首先官网下载layDate独立版, ...

  2. Java调用http保留访问状态

    package com.coracle; import com.coracle.yk.xframework.util.yunTongXun.HttpRequest; import java.io.*; ...

  3. URI 、URL 和 URN

    URI URI 是 Uniform Resource Identifier 的缩写. Uniform 统一不同类型的资源.比如 txt.mp3.jpeg 等不同的类型的资源都可以使用 URI 来标识 ...

  4. Every write operation executed on a document, deletes included

    Delete API | Elasticsearch Reference [6.5] | Elastic https://www.elastic.co/guide/en/elasticsearch/r ...

  5. IE8数组不支持indexOf方法的解决办法

    在使用indexof方法之前加上以下代码就可以了. if (!Array.prototype.indexOf){           Array.prototype.indexOf = functio ...

  6. Spring Boot 编写入门程序

    1. SpringBoot 入门 快速创建独立运行的Spring项目以及与主流框架集成; 使用嵌入式的Servlet容器,应用无需打成WAR包; starters自动依赖与版本控制; 大量的自动配置, ...

  7. 转!mysql备份与还原数据库

    备份数据库:1) mysqldump -uroot -p db_name > 20181018_preprod_bak.sql2) 输入数据库密码 还原数据库:1. 系统命令行:mysqladm ...

  8. ssh登录服务器

    ssh -i /home/zhangsuosheng/mykey.pub myusername@111.111.111.111

  9. 解决 Invalid signature file digest for Manifest 问题

    idea打包的jar文件在spark执行是报错: Invalid signature file digest for Manifest 通过以下命令解决: zip -d myjob.jar META- ...

  10. Python 开发中高级技巧

    列表推导式 >>> chars = [ c for c in 'python' ] >>> chars ['p', 'y', 't', 'h', 'o', 'n'] ...