永发信息网

如何在uboot中添加ping命令

答案:3  悬赏:80  手机版
解决时间 2021-01-03 18:25
  • 提问者网友:姑娘长的好罪过
  • 2021-01-03 15:39
如何在uboot中添加ping命令
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-01-03 16:52
首先icmp和arp是没有关系的!icmp承载于网络层他的协议号好像是1,其中有8种类型比如host不可达、超时等这是用来测试网络连通性的一种控制信息协议。ARP是以太网技术中最重要的一种协议地址解析协议,它承载于osi第二层类型号好像是806,因为以太网是多路访问的一种,所以为了解析其以太网物理MAC地址必须要用ARP协议,这种协议发送的request包中目标MAC地址为全1广播地址,reply包以自己的mac和IP地址为源,目标地址以目标主机MAC和IP地址为目标封装成帧后发送出去!虽然说它是链路层协议,但是他有网络层的概念IP地址,我抓包看到过ARP协议中有协议类型800这是IP协议的类型,因为他要用IP地址来解析MAC地址,所以每个网络层以上的设备都会有基于ARP的缓存,路由交换设备中的命令是showarp!windows中的命令是arp-a,有了这种缓存大大提高了互联网访问速度!好了说了这么多可能楼主认为我说的是废话!那么我就开始所问所答了!第一,ping命令是ICMP的一种形式,它属于ICMP,当然tracert也属于ICMP!ICMP与ARP没有任何关系,一个是网络层协议,一个是数据链路层协议!在功能方面上也没有什么交集的地方,唯一共同点就是都涉及IP地址。第二,我不会写什么UBOOT代码,但是既然承载在internet上那么他就应该遵循网络体系结构为了让网络统一化,IEEE和国际标准化组织iso统一定义了接入层及上层协议标准!当你ping时会发送ARP帧是因为你在以太网的环境中,为什么会发送ARP是因为在计算机刚刚启动的时候是没有对方主机的通信地址的!ping是为了测试与对方主机的连通性,所以需要知道对方主机的地址虽然你知道了目的的IP地址,但还需要其MAC地址,所以在ping之前就会发送ARP帧,主机中ARP默认缓存老化时间应该是10分钟。也就是说,自ARP解析10分钟后ARP缓存条目会自动清除。第三,arp帧发送和恢复确实不一样!一个用广播一个是单播好了!不管我写的是不是废话!辛辛苦苦写了这些不容易啊!接下来就看LZ你的了!^_^!
全部回答
  • 1楼网友:天凉才是好个秋
  • 2021-01-03 17:15
NetLoop函数调用的PingStart()函数。 static void PingStart(void) { #if defined(CONFIG_NET_MULTI)//这个我们不用理 printf ("Using %s device\n", eth_get_name()); #endif NetSetTimeout (10 * CFG_HZ, PingTimeout); NetSetHandler (PingHandler); PingSend(); } 第一、CFG_HZ 在fs2410.h中,我们队CFG_HZ的定义如下: #define CFG_HZ 1562500,看看smdk2410开发板的作者是怎么注释的 //the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need it to wrap 100 times //(total 1562500) to get 1 sec. fs2410.h就是仿smdk2410.h改写的,所以这个值没变, 这个时间应该就是cpu查询CS8900的时间间隔,通过定时的查询检查是否收到数据包。 第二、NetSetTimeout 函数 下面让我们来看看NetSetTimeout 这个函数: void NetSetTimeout(ulong iv, thand_f * f) { if (iv == 0) { timeHandler = (thand_f *)0; } else { timeHandler = f; timeStart = get_timer(0); timeDelta = iv; } } 在NetSetTimeout函数中,因为CFG_HZ不为0,所以执行else分支。 timeHandler 的定义如下(定义在net.c中): static thand_f *timeHandler; // Current timeout handler 而thand_f的定义如下(定义在net.h中) typedef void thand_f(void);//thand_f是一个无参数无返回的函数,typedef的作用是定义一种类型,例如上面的static thand_f *timeHandler就相当于static void (*thand_f)(void)即定义了一个函数型指针,所谓函数型指针就是指向函数入口地址的指针。 NetSetTimeout函数的参数2也是一个指向函数的指针,这个函数将指向PingTimeout函数,timeHandler=f其实是调用了PingTimeout函数。这个函数内容如下: static void PingTimeout (void) { eth_halt(); NetState = NETLOOP_FAIL; } 显然PingTimeout 使CS8900停止工作,并将NetState赋值为NETLOOP_FAIL表示没有收到应答 随后将当前时间赋给timeStart,并或的时间的间隔值 这个函数:NetSetHandler (PingHandler);调用了PingHandler函数。PingHandler函数将ping的ip地址和返回的ip数据报的ip地址进行对标,如果相同则执行该语句NetState = NETLOOP_SUCCESS; 三、pingSend函数 这个函数不在分析,函数的功能是组建ARP请求报文并发送
  • 2楼网友:夜余生
  • 2021-01-03 17:07
首先icmp和arp是没有关系的!icmp承载于网络层他的协议号好像是1,其中有8种类型比如host不可达、超时等这是用来测试网络连通性的一种控制信息协议。ARP是以太网技术中最重要的一种协议地址解析协议,它承载于osi第二层类型号好像是806,因为以太网是多路访问的一种,所以为了解析其以太网物理MAC地址必须要用ARP协议,这种协议发送的request包中目标MAC地址为全1广播地址,reply包以自己的mac和IP地址为源,目标地址以目标主机MAC和IP地址为目标封装成帧后发送出去!虽然说它是链路层协议,但是他有网络层的概念IP地址,我抓包看到过ARP协议中有协议类型800这是IP协议的类型,因为他要用IP地址来解析MAC地址,所以每个网络层以上的设备都会有基于ARP的缓存,路由交换设备中的命令是showarp!windows中的命令是arp-a,有了这种缓存大大提高了互联网访问速度!好了说了这么多可能楼主认为我说的是废话!那么我就开始所问所答了!第一,ping命令是ICMP的一种形式,它属于ICMP,当然tracert也属于ICMP!ICMP与ARP没有任何关系,一个是网络层协议,一个是数据链路层协议!在功能方面上也没有什么交集的地方,唯一共同点就是都涉及IP地址。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯