移植linux内核到s3c6410(板子u-boot网口link-down问题解决)
来源:互联网 发布:淘宝有名的动漫店 编辑:程序博客网 时间:2024/05/30 05:06
uImage/ramdisk准备好后,准备tftp到单板上小式一把,结果将单板停在uboot后,网口一直link down,ping host后还打印“could not establish link”。真是抑郁啊。
细想,板子回来后,在uImage起来后,我是验证过网口的,是OK的,所以硬件应该没啥问题,应该是u-boot的支持问题。研究一下ping的流程:
do_ping-->NetLoop(PING)-->eth_halt-->eth_init-->PingStart-->PingSend-->ArpRequest-->eth_rx-->NetReceive-->eth_send-->eth_rx-->NetReceive-->NETLOOP_SUCCESS-->eth_halt。
do_ping-->NetLoop(PING)-->eth_halt-->eth_init
初始化网口,准备发包,
PingStart-->PingSend-->ArpRequest-->eth_rx-->NetReceive
请求arp包,一直等待收arp响应包,并设置5S超时。
eth_send-->eth_rx-->NetReceive-->NETLOOP_SUCCESS-->eth_halt。
如果收到arp响应,发出ping包,等待收包,ping为10S超时,收包或者超时都调用eth_halt。
DM9000,eth_init-->dm9000_reset-->DM9000_iow(DM9000_GPR, 0);里面会power up DM9000 内置的phy,这个时候会linkup。
eth_halt-->DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */里面会power down DM9000 内置的phy,这个时候会linkdown。
也就是说当执行ping或者tftp是,才会触发eth_init,这个时候网口才会linkup,执行完成后会调用eth_halt,这个时候网口会link down。
但是我的板子是执行ping后,还是不能link-up,且打印could not establish link,查阅代码是:
while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */
udelay(1000);
i++;
if (i == 10000) {
printf("could not establish link\n");
return 0;
}
}
也就是eth_init之后10S还没有自协商成功。后来我决定手动将其power up试一下,也就是在u-boot里执行:
nm.b 0x18000300 回车
1f回车
nm.b 0x18000304 回车
0 回车
phy link up 了,而且此时执行ping后,能够正常ping通,tftp也能正常进行了。
爽啊!~~
- 移植linux内核到s3c6410(板子u-boot网口link-down问题解决)
- 移植linux内核到s3c6410(板子u-boot网口link-down问题解决)
- u-boot移植到s3c2410板子
- S3C6410移植u-boot
- S3C6410移植u-boot
- 移植linux内核到s3c6410(配置内核make menuconfig)
- 移植linux内核到s3c6410(编译内核make uImage)
- 移植u-boot-1.3.4到AT91RM9200板子
- S3C6410移植u-boot-2013.01
- S3C6410移植u-boot-2010.3(3)正常化配置
- 成功移植u-boot-2009.06到qt2410的板子上(Nand Boot)
- 移植linux内核到s3c6410(根文件系统加载失败问题解决:Kernel panic - not syncing: VFS: Unable to mount root fs)
- 移植最简单linux-3.5.4内核到s3c6410
- 移植U-BOOT到S3C2440板子上对读flash的device ID不对的分析
- u-boot-1.1.4移植到pxa255板子上所做的修改
- u-boot过度到linux内核
- 移植linux内核到s3c6410(使用busybox构建initrd ramdisk)
- 移植Linux内核到s3c6410(使用busybox构建initrd ramdisk)
- android note1
- fedora14中配置ARM裸奔程序下载环境
- 什么是脚本
- iOS 多版本,编程技巧
- 认知世界(2)--心理暗示
- 移植linux内核到s3c6410(板子u-boot网口link-down问题解决)
- iOS 通过HTTP获取和解析XML或者JSON 的类
- VBScript 中的回车换行符
- 关于报表,搜集的资料,放一份备用
- C#重载操作符“==”执行时引发“Process is terminated due to StackOverflowException.”的解决办法
- 一句话总结:XBRL的精髓
- Windows 找不到文件 'c:\windows\system32\telnet.exe'
- Objective-C 弱类型的大弱点
- 二战德国坦克十大王牌