在刚开始学习嵌入式入岛的最大的问题就是开发板、PC机、虚拟机三者之间如何ping通的问题。首先须要了解在vmware中设置Linux链接网络的方法。linux
网路链接属性 | 意义 |
---|---|
bridged(桥接模式) | 链接vmnet0虚拟交换机,此时虚拟机至关于网络上的一台独立计算机。与主机同样,拥有一个IP。 |
NAT(网络地址转换模式) | 使用VMnet8虚拟交换机,此时虚拟机能够经过主机单向访问其余主机,而Vmnet8存在的意义实现主机和虚拟机之间的通讯。 |
host-only(主机模式) | 使用VMnet1虚拟交换机,此时只能实现主机的VMnet1网卡和虚拟机之间的通讯。 |
1、经过路由器链接开发板与PC机ios
经过这种方式链接是最容易实现的网上资料也不少,这里再也不赘述。其链接原理图可用下图表示。
2、开发板与PC机直接相连
有时,因为路由器离咱们比较远,而开发板没法直接链接到路由器时,咱们会将开发板直接链接PC机,但此时就会出现不少的问题。此时我对如下3种状况进行了分析。
一、开发板上有操做系统,虚拟机桥接模式选择有线网卡
在这种方式下须要开发板中有操做系统,此时开发板直接运行操做系统,而不是进入U-BOOT引导程序。此时三者的IP分别设置为:服务器
设备 | IP |
---|---|
开发板 | 192.168.2.10 |
主机 | 192.168.2.20 |
虚拟机 | 192.168.2.30 |
开发板ping pc机与虚拟机的结果:网络
[root@EmbedSky /]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 10:23:45:67:89:AB inet addr:192.168.2.10 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:79 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:13824 (13.5 KiB) TX bytes:770 (770.0 B) Interrupt:51 Base address:0x8000 [root@EmbedSky /]# ping -c 5 192.168.2.20 PING 192.168.2.20 (192.168.2.20): 56 data bytes 64 bytes from 192.168.2.20: seq=0 ttl=128 time=1.374 ms 64 bytes from 192.168.2.20: seq=1 ttl=128 time=1.067 ms 64 bytes from 192.168.2.20: seq=2 ttl=128 time=1.044 ms 64 bytes from 192.168.2.20: seq=3 ttl=128 time=1.040 ms 64 bytes from 192.168.2.20: seq=4 ttl=128 time=1.045 ms --- 192.168.2.20 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 1.040/1.114/1.374 ms [root@EmbedSky /]# ping -c 5 192.168.2.30 PING 192.168.2.30 (192.168.2.30): 56 data bytes 64 bytes from 192.168.2.30: seq=0 ttl=64 time=2.467 ms 64 bytes from 192.168.2.30: seq=1 ttl=64 time=1.220 ms 64 bytes from 192.168.2.30: seq=2 ttl=64 time=1.050 ms 64 bytes from 192.168.2.30: seq=3 ttl=64 time=1.424 ms 64 bytes from 192.168.2.30: seq=4 ttl=64 time=1.408 ms --- 192.168.2.30 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 1.050/1.513/2.467 ms
二、开发板进入uboot引导程序,虚拟机桥接模式选择无线网卡ide
设备 | IP |
---|---|
开发板 | 192.168.2.10,服务器IP为192.168.2.20(PC机) |
PC机 | 有线:192.168.2.20;无线 :192.168.155.2 |
虚拟机 | 192.168.155.3 |
在这种模式下开发板和PC机之间二者能够ping通,PC机和虚拟机二者之间能够ping通,可是开发板没法ping通虚拟机,那么就没法在开发板和虚拟机之间使用NFS传输文件。
开发板:oop
EmbedSky> printenv bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 bootcmd=boot_zImage bootdelay=0 baudrate=115200 ethaddr=0a:1b:2c:3d:4e:5f netmask=255.255.255.0 ostype=linux mtdids=nand0=nandflash0 mtdparts=mtdparts=nandflash0:256k@0(bios),128k(params),128k(toc),512k(eboot),1024k(logo),3m(kernel),-(root) ipaddr=192.168.2.10 serverip=192.168.2.20 gatewayip=192.168.2.1 stdin=serial stdout=serial stderr=serial partition=nand0,0 mtddevnum=0 mtddevname=bios Environment size: 460/131068 bytes EmbedSky> ping 192.168.2.20 dm9000 i/o: 0x20000300, id: 0x90000a46 MAC: 0a:1b:2c:3d:4e:5f host 192.168.2.20 is alive
PC机:学习
C:\Users\Administrator>ping 192.168.155.3 正在 Ping 192.168.155.3 具备 32 字节的数据: 来自 192.168.155.3 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.155.3 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.155.3 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.155.3 的回复: 字节=32 时间<1ms TTL=64 192.168.155.3 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 0ms,平均 = 0ms
虚拟机:操作系统
book@www.100ask.org:~$ ping 192.168.155.2 PING 192.168.155.2 (192.168.155.2) 56(84) bytes of data. 64 bytes from 192.168.155.2: icmp_seq=1 ttl=128 time=0.596 ms 64 bytes from 192.168.155.2: icmp_seq=2 ttl=128 time=0.834 ms 64 bytes from 192.168.155.2: icmp_seq=3 ttl=128 time=0.665 ms 64 bytes from 192.168.155.2: icmp_seq=4 ttl=128 time=0.741 ms ^C --- 192.168.155.2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3021ms rtt min/avg/max/mdev = 0.596/0.709/0.834/0.088 ms
三、开发板进入uboot引导程序,虚拟机桥接模式选择有线网卡命令行
设备 | IP |
---|---|
开发板 | 192.168.2.10,服务器IP为192.168.2.20 |
PC机 | 有线:192.168.2.20; |
虚拟机 | 192.168.2.30 |
这种模式下,开发板与虚拟机之间能够ping通,开发板与PC之间能够ping通,可是PC机和虚拟机之间没法ping通。要想解决PC机与虚拟机之间的ping同问题,能够经过增长虚拟网卡的方式解决,即再增长一块网卡选择NAT模式链接PC机与虚拟机。
此时还要注意的是,在虚拟机中使用命令行设置网卡IP时,有时会出现问题,我在作实验时发现,若是仅命令行下设置使用ifconfig命令设置ip,当使用开发板pingPC机或虚拟机以后,虚拟机的IP有时会自动消失,所以建议在图形界面下设置虚拟机的IP保存或者在/etc/network/interfaces文件中设置永久ip。3d
EmbedSky> ping 192.168.2.20 #开发板ping通PC机 dm9000 i/o: 0x20000300, id: 0x90000a46 MAC: 0a:1b:2c:3d:4e:5f host 192.168.2.20 is alive #开发板ping通虚拟机 EmbedSky> ping 192.168.2.30 dm9000 i/o: 0x20000300, id: 0x90000a46 MAC: 0a:1b:2c:3d:4e:5f host 192.168.2.30 is alive EmbedSky> printenv bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 bootcmd=boot_zImage bootdelay=0 baudrate=115200 ethaddr=0a:1b:2c:3d:4e:5f netmask=255.255.255.0 ostype=linux mtdids=nand0=nandflash0 mtdparts=mtdparts=nandflash0:256k@0(bios),128k(params),128k(toc),512k(eboot),1024k(logo),3m(kernel),-(root) ipaddr=192.168.2.10 stdin=serial stdout=serial stderr=serial partition=nand0,0 mtddevnum=0 mtddevname=bios serverip=192.168.2.30 gatewayip=192.168.2.1 Environment size: 460/131068 bytes
对于以上的模式进行总结能够发现,PC机与开发板不使用路由器,直接有网线链接会出现很是多的问题。对其总结能够获得以下的关系:
为了使开发板能同时ping通虚拟机与PC机、而PC机与虚拟机也能ping通,此时应该使用两块网卡,配置结果以下:
参数配置为:
book@www.100ask.org:~$ ifconfig ens33 Link encap:Ethernet HWaddr 00:0c:29:92:c0:85 inet addr:192.168.2.30 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe92:c085/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:46 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:420 (420.0 B) TX bytes:6834 (6.8 KB) ens38 Link encap:Ethernet HWaddr 00:0c:29:92:c0:8f inet addr:192.168.3.30 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe92:c08f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15 errors:0 dropped:0 overruns:0 frame:0 TX packets:32 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2491 (2.4 KB) TX bytes:4494 (4.4 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:9388 errors:0 dropped:0 overruns:0 frame:0 TX packets:9388 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:694536 (694.5 KB) TX bytes:694536 (694.5 KB)
经过这种方式能够达到开发板、PC机、虚拟机相互ping通的问题。
开发板:
EmbedSky> ping 192.168.2.20 dm9000 i/o: 0x20000300, id: 0x90000a46 MAC: 0a:1b:2c:3d:4e:5f host 192.168.2.20 is alive EmbedSky> ping 192.168.2.30 dm9000 i/o: 0x20000300, id: 0x90000a46 MAC: 0a:1b:2c:3d:4e:5f host 192.168.2.30 is alive
PC机:
C:\Users\Administrator>ping 192.168.3.30 #PC机ping通虚拟机NAT卡网 正在 Ping 192.168.3.30 具备 32 字节的数据: 来自 192.168.3.30 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.3.30 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.3.30 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.3.30 的回复: 字节=32 时间<1ms TTL=64 192.168.3.30 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 0ms,平均 = 0ms