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

int tftp_download(char *filename, ulong msec_max, int cnt_max, ulong addr)
{
...
tftprrqtimeoutmsecs = msec_max; //100
tftprrqtimeoutcountmax = cnt_max;//0
setenv(netretry, no);
load_addr = addr; //下载到内存的地址
copy_filename(bootfile, filename, sizeof(bootfile));
size = netloop(tftp);
if(size mcast)
{
free(bitmap);
bitmap=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:
...
}
//发送
netsendudppacket(netserverether, tftpserverip, tftpserverport, tftpourport, len);
}
intnetsendudppacket(uchar *ether, ipaddr_t dest, int dport, int sport, int len)
{
//容错:目标ip
//容错:ether 发arp
if (memcmp(ether, netethernulladdr, 6) == 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 *)nettxpacket + (pkt - (uchar *)netarpwaittxpacket) + ip_hdr_size, len);
netarpwaittxpacketsize = (pkt - netarpwaittxpacket) + ip_hdr_size + len;
netarpwaittry = 1;
netarpwaittimerstart = get_timer(0);
arprequest();
return 1;
}
//容错:time发arp
if (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 *)nettxpacket +(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);开始转向各个网卡驱动的发送函数。

华为P11什么时候上市?华为Mate10还没来,华为P11就强势曝光了:走小轻薄路线
随着OLED电视销量的迅猛增长 OLED阵营的不断扩容
东莞华为扩展坞厂家六口扩展更便捷
备受工程师青睐的高性价比5V1A充电器方案
华为Mate10什么时候上市?最新消息:华为Mate10备货量达4000万,性能、续航、外观、配置、价格汇总
可以了解并学习Uboot的tftp流程
SSD固态硬盘与机械硬盘哪一个更稳定耐用些
Chrome 89正式版开放更新下载
人力资源会被AI技术所影响吗
联发科第四季度的整体出货可望优于第三季度
数字化的深耕与构建:华为数字能源的立体版图
魅族MX首张官方图曝光 M9降价为其开道
强油循环风冷变压器发生“备用冷却器投入”信号时,怎么办?
多方面因素扰乱供需平衡 2023年内存市场依旧不平稳
高质温控阀的选购方法
小雅Nano智能音箱评测 十分适合在家庭环境中使用
PLC表格指令说明
Airbnb内部的AI工具,从图纸到代码一步到位
一文详解RC低通滤波器的原理
人工智能目前存在哪些技术瓶颈