uboot是一个很优秀的开源项目。不只能够学习bootloader。嵌入式,各种总线协议。

还能够了解网络协议栈。在嵌入式开发中,常常使用uboot的tftp和nfs来加快开发的效率。那么在tftp能够使用之前,我们要保证host和pcDuino3能够ping通。

在uboot下能够ping通host。可是host不能ping通uboot,这是由于uboot不是操作系统,我们须要做了个命令来循环等待来自host的ping命令。

在为uboot加入命令接受来自host的ping之前。我们先了解一下ping的过程:

硬件环境:host主机的ip是192.168.1.11,mac地址是5c:26:0a:5c:91:50.

pcDuino3的ip是192.168.1.188,mac地址是12:34:56:78:11:22.

我们从uboot往host发送ping 192.168.1.188时,这个过程能够用wireshark抓下来:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG5keGhlag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

首先是广播发送一个ARP请求,然后host会回复该请求。这样uboot端就得到了host的mac地址;

接下来就是发送ICMP协议的Echo request,收到Echo reply,就表示ping通了。

事实上从host往pcDuino3发送ping过程也是一样的,我们只须要加入几行简单的代码就能够了。

为uboot加入一条recvping命令:

static int recv_ping(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
printf("recv ping command excute \n");
if (NetLoop(RECVPING) < 0) {
printf("ping failed; ");
return 1;
} printf("host is alive\n"); return 0; } U_BOOT_CMD(
recvping, 2, 1, recv_ping,
"recv ICMP ECHO_REQUEST from network host",
"wait the ping from other host"
);

接着在NetLoop中加入处理RECVPING的处理分支:

		case RECVPING:

			recvping_start();
break;

当中recvping_start函数例如以下:

void recvping_start(void)
{ printf("Using %s device\n", eth_get_name());
NetSetTimeout(100000UL, ping_timeout); }

这样,我们再次从主机ping,使用wireshark抓包:

由于host会发送四次ICMP包。所以就有多次Echo request。

这么一看。网络协议栈也蛮简单清晰的。透过这个过程。只为了对网络协议栈的理解。而不不过会UNIX网络编程中的socket。listen,bind等。

一步步玩pcDuino3--uboot下的ping,加入命令能够接受来自host的ping的更多相关文章

  1. 一步步玩pcDuino3--mmc下的裸机流水灯

            第一部分是玩pcduino3下的裸机.这个过程能够让我们更好的理解嵌入式系统,熟悉我们使用的这个平台.         首先介绍下开发环境: 虚拟机:VMware® Workstati ...

  2. uboot下的命令行

    1.典型嵌入式linux系统启动过程: 嵌入式系统上电后先执行uboot.然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就 ...

  3. Linux和Uboot下eMMC boot分区读写

    关键词:eMMC boot.PARTITION_CONFIG.force_ro等. 1. eMMC的分区 大部分eMMC都有类似如下的分区,其中BOOT.RPMB和UDA一般是默认存在的,gpp分区需 ...

  4. [命令]在uboot下查看文件系统的目录结构

    在uboot下敲help可以查看该版本的uboot支持哪些命令 ls mmc 1:1 ls mmc 1:2 可以查看mmc设备上对应的文件目录,支持多种文件系统格式,如fat32/ext

  5. uboot下emmc内容烧写(拷贝)步骤

    一.目的:嵌入式开发板,通过emmc上的内核文件加载启动linux操作系统,以及存放其他程序文件.需要将所需文件先写入emmc中. 二.总体步骤是:uboot启动后,进入linux下,将emmc分区并 ...

  6. uboot下的网络终端/控制台

    许多linux设备可能没有外置串口,这是就需要一个网络终端来在uboot下操作设备,如升级镜像等. uboot下的网络终端为netconsole,代码drivers/net/netconsole.c. ...

  7. uboot 下更改NAND的分区 fdisk

    uboot 下更改NAND的分区 fdisk 分类: S5PXX(三星)2012-07-01 18:59 8946人阅读 评论(7) 收藏 举报 flash平台cacheandroid三星null 关 ...

  8. uboot下tftp传输文件

    uboot下通过tftp工具传输文件,tftp与ftp是完全不同的工具或协议. 1) 下载并安装程序 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是 ...

  9. uboot下netconsole的原理及用法

    近期发现uboot下一个非常有意思也非常有用的功能:netconsole,uboot下的netconsole相似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在 ...

随机推荐

  1. chroot下二进制程序迁移

    #!/bin/bash # #define function#Copy binary programcp_bin(){ cmd_dir=${cmd_path%/*} [ ! -d /mnt/sysro ...

  2. 牛客网 牛客小白月赛1 A.简单题-控制输出格式setiosflags()函数+setprecision()函数

    水一水博客,都不好意思写这篇博客,毕竟已经不是大一的了. 难得能把一整套题都写出来(日常智障).但是在这里不写G题あなたの蛙は旅⽴っています的题解. 有毒,G题关了流同步只能过94%的样例,说我运行超 ...

  3. 服务器SSL/TLS快速检测工具TLLSSLed

    服务器SSL/TLS快速检测工具TLLSSLed   现在SSL和TLS被广泛应用服务器的数据加密中,如网站的HTTPS服务.所以,在渗透测试中如何快速检测服务器的SSL和TLS配置寻找安全漏洞,就显 ...

  4. POJ1430 Binary Stirling Numbers

    @(POJ)[Stirling數, 排列組合, 數形結合] Description The Stirling number of the second kind S(n, m) stands for ...

  5. Codeforces Round #295 (Div. 1) C. Pluses everywhere

    昨天ZZD大神邀请我做一道题,说这题很有趣啊. 哇,然后我被虐了. Orz ZZD 题目大意: 你有一个长度为n的'0-9'串,你要在其中加入k个'+'号,每种方案就会形成一个算式,算式算出来的值记做 ...

  6. spring事务详细理解

    数据并发的问题 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库.数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏数据的完整性.这些 ...

  7. 7.【nuxt起步】-Nuxt与后端数据交互

    接下来就是对接服务端接口,展示真实的数据 1.做了个虚拟接口地址:http://test.yms.cn/testjson.asp 输出数据: { "title": "单间 ...

  8. 分布式服务框架选型:面对Dubbo,阿里巴巴为什么选择了HSF?

    转载:http://www.sohu.com/a/141490021_268033 阿里巴巴集团内部使用的分布式服务框架 HSF(High Speed Framework,也有人戏称“好舒服”)已经被 ...

  9. 视图交互--表视图(UITableView)的cell交互析略

    在表视图UITableView的cell上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范.总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用.用一个简单的例子来举例说明一下,其他 ...

  10. Ubuntu 安装 spark

    环境: Unbunt 12.04 Hadoop 2.2.x Sprak 0.9 Scala scala-2.9.0.final.tgz 步骤 1. 下载 scala 2. 解压scala,然后改动/e ...