阅读:3004回复:3
uboot网卡驱动接收总是丢掉第一个数据包(ping PC)
uboot网卡驱动在做PING PC的操作时,首先板子发arp broadcast包给PC,PC回MAC地址给板子时,板子无法收到
此数据包,而是收到PC发出的下一个数据包(wireshark抓包).所以导致板子无法PING通PC(主机)。有谁知道怎么 回事,麻烦指点一下.Marvell arm cpu. |
|
|
沙发#
发布于:2010-06-24 22:58
怎么知道板子没有收到? 最好把数据包往返过程描述清楚。
1 板子发出arp broadcast. 2 pc 是正常,所以应该可以正确回arp reply 3 所以可能出现在板子这边,可能板子丢弃了数据包 以上仅是我猜测,具体还要看lz具体流程描述 |
|
|
板凳#
发布于:2010-06-24 23:30
怎么知道板子没有收到?
谢谢版主。我的驱动的开头部分,此函数被轮询调用的 eth_receive(struct eth_dev_s *p) { int eth_len=0; char *eth_data; eth0_rx_desc_single *rx = &p->eth_rx_desc[(p->rdn)]; INVALIDATE_DCACHE((unsigned int)rx,(unsigned int)(rx+1)); if (rx->command_status & 0x80000000) { return 0; /* No packet received */ } 此处返回了。 等到运行此后的程序开始接收数据包时,收到的是PC发出的第2个数据包。 wireshark抓到的数据包(1号数据包:板子发给pc的broadcast数据包 2号数据包:PC回给板子的数据包 3号数据包:PC发出的数据包(broadcast) ) eth_len = (unsigned int) (rx->buff_size_byte_count) & 0x0000ffff; eth_data = (char *) p->eth_rx_buffer[p->rdn]; /* * packet is now in: * eth0_rx_buffer[RDN_ETH0]; */ /* let the upper layer handle the packet */ NetReceive ((uchar *)eth_data, eth_len); 程序中printf打印出的数据和上面wireshark抓到的第3号数据包内容一样。所以看样子根本没有去接收到PC回给板子的数据。 |
|
|
地板#
发布于:2010-06-25 20:16
谢谢版主,问题解决了。果然是板子丢弃了数据包。hashtable的问题。
|
|
|