可以了解并学习Uboot的tftp流程.doc

上传人:白大夫 文档编号:3399871 上传时间:2019-08-21 格式:DOC 页数:4 大小:23KB
返回 下载 相关 举报
可以了解并学习Uboot的tftp流程.doc_第1页
第1页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《可以了解并学习Uboot的tftp流程.doc》由会员分享,可在线阅读,更多相关《可以了解并学习Uboot的tftp流程.doc(4页珍藏版)》请在三一文库上搜索。

1、可以了解并学习Uboot的tftp流程int tftp_download(char *filename, ulong msec_max, int cnt_max, ulong addr).TftpRRQTimeoutMSecs = msec_max;/100TftpRRQTImeoutCountMax = cnt_max;/0setenv(netretry, no);load_addr = addr;/下载到内存的地址copy_filename(BootFile, filename, sizeof(BootFile);size = NetLoop(TFTP);if(size PING:Ping

2、Start();break;case NFS:NfsStart();break;case CDP:CDPStart();break;case NETCONS:NcStart();break;case SNTP:SntpStart();break;case DNS:DnsStart();break;.voidTftpStart (void)./设置参数NetSetTImeout (TftpTImeoutMSecs * CFG_HZ, TftpTImeout);NetSetHandler (TftpHandler);./发送TftpSend ();.static voidTftpSend (voi

3、d)./容错/开始组包pkt = NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE;/针对各种状态组包switch (TftpState)case STATE_RRQ:xp = pkt;s = (ushort *)pkt;if(TftpState = STATE_WRQ)*s+ = htons(TFTP_WRQ);else*s+ = htons(TFTP_RRQ);pkt = (uchar *)s;strcpy (char *)pkt, tftp_filename);pkt += strlen(tftp_filename) + 1;strcpy (char

4、 *)pkt, octet);pkt += 5 /*strlen(octet)*/ + 1;strcpy (char *)pkt, timeout);pkt += 7 /*strlen(timeout)*/ + 1;sprintf(char *)pkt, %lu, TftpTimeoutMSecs / 1000);pkt += strlen(char *)pkt) + 1;memcpy(char *)pkt, tsize00000, 8);pkt += 8;if(TftpState = STATE_WRQ)pkt += sprintf(char *)pkt,blksize%c%d%c,0,Tf

5、tpBlkSizeOption,0);elsepkt += sprintf(char *)pkt,blksize%c%d%c,0,TftpBlkSizeOption,0);if (!ProhibitMcastBitmap=NULL;pkt += sprintf(char *)pkt,multicast%c%c,0,0);len = pkt - xp;break;case STATE_WRQ:.case STATE_OACK:.case STATE_DATA:.case STATE_TOO_LARGE:.case STATE_BAD_MAGIC:.case STATE_ACK:./发送NetSe

6、ndUDPPacket(NetServerEther, TftpServerIP, TftpServerPort, TftpOurPort, len);intNetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)/容错:目标IP/容错:ether 发ARPif (memcmp(ether, NetEtherNullAddr, 6) = 0)NetArpWaitPacketIP = dest;NetArpWaitPacketMAC = ether;pkt = NetArpWaitTxPacket;p

7、kt += NetSetEther (pkt, NetArpWaitPacketMAC, PROT_IP);NetSetIP (pkt, dest, dport, sport, len);memcpy(pkt + IP_HDR_SIZE, (uchar *)NetTxPacket + (pkt - (uchar *)NetArpWaitTxPacket) + IP_HDR_SIZE, len);NetArpWaitTxPacketSize = (pkt - NetArpWaitTxPacket) + IP_HDR_SIZE + len;NetArpWaitTry = 1;NetArpWaitT

8、imerStart = get_timer(0);ArpRequest();return 1;/容错:time发ARPif (times = 10000)times = 0;NetArpWaitPacketIP = dest;NetArpWaitPacketMAC = ether;pkt = NetArpWaitTxPacket;pkt += NetSetEther(pkt, NetArpWaitPacketMAC, PROT_IP);NetSetIP(pkt, dest, dport, sport, len);memcpy(pkt + IP_HDR_SIZE, (uchar *)NetTxP

9、acket +(pkt - (uchar *)NetArpWaitTxPacket) +IP_HDR_SIZE, len);NetArpWaitTxPacketSize = (pkt - NetArpWaitTxPacket) +IP_HDR_SIZE + len;NetArpWaitTry = 1;NetArpWaitTimerStart = get_timer(0);ArpRequest();/组包发送times+;pkt = (uchar *)NetTxPacket;pkt += NetSetEther (pkt, ether, PROT_IP);NetSetIP (pkt, dest, dport, sport, len);(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len);.至此,(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len);开始转向各个网卡驱动的发送函数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1