zoukankan      html  css  js  c++  java
  • uboot dm9000驱动故障

    手头有一块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 16 bit mode
    MAC: 00:12:39:8f:ad:b3
    operating at 100M full duplex mode
    Using dm9000 device
    sending ARP for 02d3a8c0
    ARP broadcast 1
    packet received
    packet received
    Receive from protocol 0x806
    Got ARP
    Got ARP REPLY, set server/gtwy eth addr (00:e0:4c:26:51:75)
    Got it
    packet received
    packet received
    Receive from protocol 0x800
    Got IP
    len=28, v=45
    host 192.168.211.2 is alive

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

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

    另外,如果添加#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 版本号生成过程》。

  • 相关阅读:
    微信小程序购物商城系统开发系列-工具篇
    如何用js获取浏览器URL中查询字符串的参数
    Vue.js——vue-resource全攻略
    多个 ng-app 中 Controllers & Services 之间的通信
    前端分页功能的实现以及原理
    纯css实现轮播图
    最好的Angular2表格控件
    2017年要学习的三个CSS新特性
    Kafka数据安全性、运行原理、存储
    Hbase与hive集成与对比
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3753264.html
Copyright © 2011-2022 走看看