00.嵌入式Linux开发环境搭建

时间:2021-12-16 06:52:00
 3、虚拟机上网配置

虚拟机如果要从网上获取资源,就要能够访问外网。虚拟机有三种上网方式:桥接上网,NAT上网,单主机模式【没用过】。本节从原理和操作2个方面讲了NAT方式和桥接方式这2种不同的虚拟机上网模式。

3.1、 原理

3.1.1 NAT 方式上网

在NAT模式下,虚拟系统需要借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式虚拟系统可把物理主机作为路由器访问互联网。(虚拟机在主机的下一级)
NAT网络环境下需要做到:
(1)主机需要开启vmdhcp和vmnat服务。(服务的开启,在我的电脑当中右键“管理”可以设置)
(2)NAT模式下的虚拟机的TCP/IP配置信息将由VMnet8(NAT)虚拟网络的DHCP服务器自动分配,需要开启DHCP功能。

3.1.2 桥接方式上网

在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一*立的主机(主机和虚拟机处于对等地位,直接与外网通信),它可以访问该类网段内任何一台机器。
桥接网络环境下需要做到:
(1)手动为虚拟机系统配置IP地址、子网掩码。
(2)在桥接的模式下虚拟机必须与物理机处于同一网段,(举个例子,物理机IP:192.168.1.2,虚拟机IP:192.168.1.3)这样虚拟系统才能和真实主机进行通信。

00.嵌入式Linux开发环境搭建
图像来源:https://jingyan.baidu.com/article/546ae1852778811149f28c8c.html

3.2、 操作步骤

3.2.1 NAT 方式上网

  • [ ] (1),确定本地windows电脑能够上网(我的电脑是无线上网)
  • [ ] (2),虚拟机选择“设置--->网络适配器[NAT模式]--->确定”
    00.嵌入式Linux开发环境搭建
  • [ ] (3),虚拟机ubuntu设置为dhcp方式。
    • 步骤1:打开一个终端,执行命令:sudo vi /etc/network/interfaces。
    • 步骤2:转为编辑模式,编译内容保存推出:
interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#auto ens33
#iface ens33 inet static //静态分配ip
iface ens33 inet dhcp //动态分配ip
address 192.168.1.141
netmask 255.255.255.0
gateway 192.168.1.1
  • [ ] (4),重启网卡得到合法的IP地址。
    • 步骤0:打开终端,执行以下命令
    • 步骤1:sudo ifdown ens33 【功能:关闭网卡】
    • 步骤2:sudo ifup ens33 【功能:开启网卡】
    • 步骤3:ifconfig 【功能:查看是否成功分配ip地址,dhcp分配ip地址是随机分配的】
      • 我的现象:ens33 Link encap:Ethernet HWaddr 00:0c:29:24:c8:03
        inet addr:192.168.133.128 Bcast:192.168.133.255 Mask:255.255.255.0
  • [ ] (5),终端输入ping www.baidu.com 测试=是否能够上网。

3.2.2 桥接方式上网

  • [ ] (1),确定本地windows电脑能够上网(我的电脑是无线上网)
  • [ ] (2),虚拟机选择“设置--->网络适配器[桥接模式]--->确定”
  • [ ] (3),虚拟机选择“编辑-->虚拟网络编译器-->更改设置-->桥接到无线网卡(因为我是无线上网)-->确定”
    00.嵌入式Linux开发环境搭建
    • Inter(R) Ethernet Connection[有线网卡]
    • Inter(R) Wireless-N[无线网卡]
  • [ ] (4),打开虚拟机终端,输入sudo vi /etc/network/interfaces,选择dhcp动态分配IP,然后重启网卡。
    • 具体操作参考3.2.1 NAT 方式上网
  • [ ] (5),执行命令ping www.baidu.com测试虚拟机是否能够上网。

验证:ifconfig得到Ubuntu的ip192.168.1.112,而我的电脑ip无线上网为192.168.1.109,他们在同一个网段。

3.3 使用总结

在嵌入式开发中,如果虚拟机要实现上网,建议使用NAT方式访问外网[最简单]。桥接方式一般用来和开发板通信。
注意:主机一定要能上网。

4.Ubuntu连接开发板的网络设置

关键点:桥接到有限网卡;使得开发板,window主机,ubuntu在同一局域网中。也就是设置PC机、虚拟机、以及开发板的IP在同一个网段【同一局域网】,即192.168.1.*,其他掩码、网关、DNS都设置一样。

相关操作如下:
  • [ ] (1),虚拟机配置ip地址为192.168.1.141
    • 步骤1:虚拟机选择“设置--->网络适配器[桥接模式]--->确定”
    • 步骤2:虚拟机选择“编辑-->虚拟网络编译器-->更改设置-->桥接到有线网卡-->确定”
    • 步骤3:终端执行sudo vi /etc/network/interfaces,选择静态ip地址分配
      00.嵌入式Linux开发环境搭建
    • 步骤4:重启网卡
    • 步骤5:ifconfig
      00.嵌入式Linux开发环境搭建

注意:在开发过程中,发现一个bug,如果静态IP地址分配失败,请重启ubuntu再进行设置

  • [ ] (2),WindowsPC机的IP配置为192.168.1.20
    • 步骤1:打开网络共享中心
      00.嵌入式Linux开发环境搭建
    • 步骤2:选择“更改适配器设置-->以太网-->属性-->TCP/IPv4--->手动制定ip地址--->确定”
      00.嵌入式Linux开发环境搭建
  • [ ] (3),开发板配置ip地址为192.168.1.10
    • 步骤1:用网线,串口线将开发板与电脑连接起来
    • 步骤2:securtCRT与开发板串口连接[具体步骤见SecurtCRT软件的使用]
    • 步骤3:虚拟机开机,进入uboot模式,执行以下命令
      • set ipaddr 192.168.1.10
      • set serverip 192.168.1.141
      • set netmask 255.255.255.0
      • save
      • print 【分别对照上面3个环境变量ipaddr、serverip、netmask 看是否一致】
  • [ ] (4),测试Ubuntu与开发板能否相互ping通

      • 步骤1:在开发板的uboot模式下执行命令:

      ping 192.168.1.141

00.嵌入式Linux开发环境搭建
说明开发板能和ubuntu虚拟机ping通

-  - 步骤2:ubuntu终端执行

    ping 192.168.1.10

00.嵌入式Linux开发环境搭建
说明ubuntu能和开发板ping通

5. ubuntu中搭建tftp服务器

5.1 为什么要安装tftp服务器

TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。
TFTP是用来下载远程文件的最简单网络协议,在嵌入式开发中,由于嵌入式开发板资源有限,不能进行文件编译,因此我们都是将写好都代码在宿主机(Linux虚拟机)上进行调试编译好后生成二进制文件,然后通过tftp或NFS来进行传输到开发板上运行。也就是ARM开发板当做客户端, 使用虚拟机 Ubuntu来当做服务器。

5.2 如何安装tftp服务器

前提脚尖:使得虚拟机ubuntu能够连接外网

  • [ ] (1), 安装 tftp 所需的软件

    • 步骤1:安装 tftp-hpa,tftpd-hpa[前者是客户端,后者是服务程序]:
      • 在终端下输入

      sudo apt-get install tftp-hpa tftpd-hpa

    • 步骤2:安装xinetd[xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务] :
      • 在终端下输入

      sudo apt-get install xinetd

  • [ ] (2),配置相关服务。

终端执行命令sudo vi /etc/xinetd.conf,查看内容是否与下面的一致,若不一致则修改:

    # Simple configuration file for xinetd
##
Some defaults, and include /etc/xinetd.d/
defaults
{
#Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d
  • [ ] (3),配置 tftp 服务器

终端执行命令sudo vim /etc/default/tftpd-hpa,将内容修改成

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
sudo chmod 777 /tftpboot
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
  • [ ] (4),配置/etc/xinetd.d/tftp

然后进入 xinetd.d 文件夹(cd /etc/xinetd.d),查看是否有一个 tftp 文件,如果没有就新建一个,如果有的话就查看内容是否与下面的一致,不一致则修改(sudo vi tftp),内容如下:

service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}

其中 server_args 一行是配置服务器的文件存放的位置,就是进行 tftp 传输的时候,都是从该文件夹中搜索文件的

  • [ ] (5),修改权限

终端执行以下命令:

- sudo chmod 777 /tftpboot
  • [ ] (6),重启

终端执行以下命令:

- sudo service tftpd-hpa restart
- sudo /etc/init.d/xinetd reload
- sudo /etc/init.d/xinetd restart
  • [ ] (7), 本地测试tftp服务器成功搭建
    00.嵌入式Linux开发环境搭建

6.ubuntu中搭建nfs服务器

6.1 为什么要搭建nfs服务器

NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享文件。NFS可以让你的PC通过网络将远端的NFS 服务器共享出来的文件mount到自己的系统中,在客户端看来使用NFS的远端文件就象是在使用本地文件一样。 使用NFS可以使应用程序的开发变得十分方便, 客户端不需要大容量的存储器,更不需要进行映像文件的烧录和下载,只要mount到服务器端的特定目录下,然后运行该目录下的程序即可观察到结果。嵌入式项目中常用nfs来挂载文件系统。

6.2 如何搭建nfs服务器

  • [ ] (1),安装nfs服务器

终端执行以下命令:

sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
  • [ ] (2),将nfs服务器挂载到/home/aston/rootfs

    • 步骤1:在/home/aston下创建rootfs:

终端执行以下命令:

    mkdir rootfs
cd rootfs
pwd(显示/home/aston/rootfs) - 步骤2:配置/etc/exports

终端执行以下命令:

    sudo vi /etc/exports

在命令行终端添加:

    /home/aston/rootfs *(rw,sync,no_root_squash,no_subtree_check)
  • [ ] (3),进入/home/aston目录修改rootfs的权限

终端执行以下命令:

    cd ..
chmod 777 -R rootfs/
  • [ ] (4), 更新导出nfs服务器到本地并重启nfs服务

终端执行以下命令:

    sudo showmount -e
sudo exportfs -r(更新)
sudo showmount localhost -e(导出本地/home/aston/rootfs)
sudo /etc/init.d/nfs-kernel-server restart(重启nfs服务)
  • [ ] (5),测试nfs服务器是否成功挂载到了/home/aston/rootfs

终端执行以下命令:

    sudo mount -t nfs -o nolock localhost:/home/aston/rootfs /opt  【功能:将nfs服务器挂载到opt目录下】

    cd rootfs/
touch a.c
ls /opt(显示a.c,rootfs目录下的挂载点opt目录下同步了,证明本地测试成功)

具体nfs相关参考:https://blog.csdn.net/tigerjibo/article/details/9748561