• 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 版本号生成过程》。

  • 相关阅读:
    用友软件T3出纳通提示单据锁定
    保存单据时提示“计量单位组不正确”
    cxgrid导出数据的格式设置(转载)
    会话打印机不会自动删除解决方法
    用友U8总账对账不平问题总结
    存货核算期初无法从库存取数
    SQL Server 2000 数据库日志太大!如何管理,清除,变小,压缩它
    Delphi控件cxGrid 如何动态创建列?
    关于Treeview 选中节点高亮有关问题
    U8远程接入客户端重新安装问题
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3753264.html
Copyright © 2020-2023  润新知