一步步玩pcDuino3--uboot下的ping,加入命令能够接受来自host的ping
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的更多相关文章
- 一步步玩pcDuino3--mmc下的裸机流水灯
第一部分是玩pcduino3下的裸机.这个过程能够让我们更好的理解嵌入式系统,熟悉我们使用的这个平台. 首先介绍下开发环境: 虚拟机:VMware® Workstati ...
- uboot下的命令行
1.典型嵌入式linux系统启动过程: 嵌入式系统上电后先执行uboot.然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就 ...
- Linux和Uboot下eMMC boot分区读写
关键词:eMMC boot.PARTITION_CONFIG.force_ro等. 1. eMMC的分区 大部分eMMC都有类似如下的分区,其中BOOT.RPMB和UDA一般是默认存在的,gpp分区需 ...
- [命令]在uboot下查看文件系统的目录结构
在uboot下敲help可以查看该版本的uboot支持哪些命令 ls mmc 1:1 ls mmc 1:2 可以查看mmc设备上对应的文件目录,支持多种文件系统格式,如fat32/ext
- uboot下emmc内容烧写(拷贝)步骤
一.目的:嵌入式开发板,通过emmc上的内核文件加载启动linux操作系统,以及存放其他程序文件.需要将所需文件先写入emmc中. 二.总体步骤是:uboot启动后,进入linux下,将emmc分区并 ...
- uboot下的网络终端/控制台
许多linux设备可能没有外置串口,这是就需要一个网络终端来在uboot下操作设备,如升级镜像等. uboot下的网络终端为netconsole,代码drivers/net/netconsole.c. ...
- uboot 下更改NAND的分区 fdisk
uboot 下更改NAND的分区 fdisk 分类: S5PXX(三星)2012-07-01 18:59 8946人阅读 评论(7) 收藏 举报 flash平台cacheandroid三星null 关 ...
- uboot下tftp传输文件
uboot下通过tftp工具传输文件,tftp与ftp是完全不同的工具或协议. 1) 下载并安装程序 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是 ...
- uboot下netconsole的原理及用法
近期发现uboot下一个非常有意思也非常有用的功能:netconsole,uboot下的netconsole相似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在 ...
随机推荐
- Yii关联查询(转载)
原文链接:http://keshion.iteye.com/blog/1607994 一.多表关联的配置 在我们使用 AR 执行关联查询之前,我们需要让 AR 知道一个 AR 类是怎样关联到另一个的. ...
- MinGW 使用和创建 DLL 应注意的问题
MinGW 是 GCC 的 Windows 版本,稳定版已经到了 4.5.2,功能和性能上很好,感觉不比 Microsoft 自家的 VC 差啊.但是 MinGW 下使用和创建 DLL 倒是要特别注意 ...
- hdu 1242(搜索)
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- poj 3614(网络流)
Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6672 Accepted: 2348 Descrip ...
- sed理论讲解、实战
1.Sed是操作.过滤和转换文本内容的强大工具,常用功能有增删改查.过滤.取行. options(常用参数): -n:使用安静(silent)模式,在一般 sed 的用法中,所有来自 STDIN 的数 ...
- 51NOD 1833 环
考虑一下简单环覆盖这个图的意义,其实就是找出原序列的所有排列,满足所有<i,a[i]>都是原图中的一条有向边. 因为一个置换就是由很多简单环构成的. 于是我们可以设 f[i][S] 为考虑 ...
- uitableview执行deleteRowsAtIndexPaths时出错
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid updat ...
- MVP的理解和使用
MVP大家应该差不多都知道了,他其实是MVC的升华版,差不多是在view和model中加了一个调节器,这样view不能直接调用model中得数据,而是通过presenter来进行操作,此外Presen ...
- 记Weblogic采用RAC方式链接数据库遇到的问题
前几天,去客户现场部署系统,WEBLOGIC连接数据库使用RAC方式连接,好几个人弄了一下午愣是没搞定,总是报SID错误 开始一致认为是防火墙的原因,后来SSH登陆应用服务器后,再TELNET数据 ...
- JavaScript中的Math方法演示
<html> <head> <script type="text/javascript"> var num = 12.4; alert(Math ...