一步步玩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抓下来:

首先是广播发送一个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等。

时间: 2024-10-13 08:54:52

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

一步步玩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之前,我们先了解一下

一步步玩pcduino3--mmc下的bootloader

pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的. 我们首先介绍下SPL框架,可以先看下<GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法>和<GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析>,NAND_SPL也算是SPL框架下的一种模式. 当使用Nand f

一步步玩pcduino3--mmc下的裸机流水灯

第一部分是玩pcduino3下的裸机,这个过程可以让我们更好的理解嵌入式系统,熟悉我们使用的这个平台. 首先介绍下开发环境: 虚拟机:VMware? Workstation 10.0.2 build-1744117 系统:Linux slackware 3.2.29-smp #2 SMP 交叉编译器:arm-linux-gnueabihf-    版本号:gcc version 4.8.2 20130805 (prerelease) (crosstool-NG linaro-1.13.1-4.8

uboot下tftp传输文件

uboot下通过tftp工具传输文件,tftp与ftp是完全不同的工具或协议. 1) 下载并安装程序 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是客户端程序,tftpd-hpa是服务器端程序. 2) 建立tftp服务器目录 建立一个tftp客户端访问服务器的目录,如下: 先进入到ubuntu系统的根目录,然后再建立一个目录,并修改目录属性: cd / sudo mkdir tftpboot sudo chmod 777 tftpboot 若在

uboot下netconsole的原理及使用方法

最近发现uboot下一个很有意思也很实用的功能:netconsole,uboot下的netconsole类似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在PC端通过网络登录设备uboot中运行命令(更准确的说是通过网络向uboot发送命令和接收uboot的反馈信息,netconsole没有登录检查). kernel下也有netconsole机制,不过由于内核下的console只有write功能(因为内核启动是没有交互的,只有输出信息),因此kernel下

Uboot下的Nor Flash的驱动以及使用

Uboot 下 CFI Nor Flash 的使用 韩大卫@吉林师范大学 2015.1.23 Flash : Micron Technology. 32MB. Uboot: 2_3_0 CPU平台: Cavium Inc 交叉编译器: mips64-octeon-linux-gnu-gcc (Cavium Inc. Version: 2_3_0 build 128) 4.3.3 nor flash 的使用特点是 :  读操作可以按地址读, 写之前必须进行擦除, 一旦擦除必须擦除整个扇区. 新型的

关于uboot下data abort的问题

在uboot下,经常会出现一些非常让人揪心的问题.解决这些问题的关键就是方法与方向,把握好这两点,一切问题都可以迎刃而解.同时也要自信.如下: 有时我们会遇到如下的出错信息,这时CPU会reboot, data abort MAYBE you should read doc/README.arm-unaligned-accesses pc : [<1ff60148>] lr : [<1ff6019c>] sp : 1fb0a508 ip : 00000000 fp : 000000

uboot下的网络终端/控制台

许多linux设备可能没有外置串口,这是就需要一个网络终端来在uboot下操作设备,如升级镜像等. uboot下的网络终端为netconsole,代码drivers/net/netconsole.c. netconsole的使用方法如下: 1 在uboot的配置头文件中加入netconsole支持,#define CONFIG_NETCONSOLE,重编uboot 2 启动uboot后首先设备netconsole的服务器ip,set ncip serverip.然后修改uboot下的默认输入输出

Win 管理器 运行命令 大全(Windows下的DOS运行命令)

DOS 运行命令管理器字符大全 Win 管理器  运行命令 大全(Windows下的DOS运行命令) Nslookup-------IP 地址侦测器 explorer-------打开资源管理器 devmgmt.msc--- 设备管理器 progman--------程序管理器 taskmgr-----任务管理器(2000/ xp/ 2003 ) ntmsmgr.msc----移动存储管理器 eventvwr-------事件查看器 sysedit--------系统配置编辑器 regedt32