首页 > 代码库 > uboot dm9000驱动故障
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\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有了更深入了解后再来看这个问题。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。