1、嵌入式Linux开发环境搭建

时间:2022-04-08 07:00:02

1、前提准备

  • 硬件环境:
    笔记本电脑
  • 软件环境:
    裸机安装Windows10_64位
    VMWare版本:VMWare WorkStation 14Pro
    Ubuntu版本:Ubuntu16.04LTS

总结:开发环境是主机安装windows10家庭版,然后使用vmware创建Ubuntu虚拟机,在windows10进行代码的编写开发,在Ubuntu上进行部署编译。具体安装创建方法【待补充】

2、共享文件夹与samba服务器创建。

因为我是在windwows上开发,Ubuntu编译。因此windwows之间的文件共享是非常重要的。通常有两种方式:samba服务器或者共享文件夹

2.1 共享文件夹与VMtools

2.1.1 作用

VMtools是Vmware的一组工具。主要用于虚拟主机显示优化与调整,另外还可以方便虚拟主机与本机的交互,如允许共享文件夹,甚至可以直接从本机向虚拟主机拖放文件、鼠标无缝切换、显示分辨率调整等,十分实用。
通过共享文件夹,我们可以很方便的在Windows和Ubuntu之间同步的传输更改文件。

2.1.2 搭建步骤

  • [ ] (1),解决VMtools安装的问题

    • 步骤1:点击vmware菜单项中的虚拟机--->设置--->选项-->共享文件夹
      1、嵌入式Linux开发环境搭建
      错误原因:需要在客户机操作系统中安装了最新版本的 VMware Tools。

    • 步骤2:点击vmware菜单项中的虚拟机--->重新安装VMwareTool工具。
      现象:1、嵌入式Linux开发环境搭建

    • 步骤3:点击DVD-->open 【里面有一个WMwareTools-xx.xx.tar.gz压缩包】,将此压缩包复制到Documents目录下。关闭这个对话框
      1、嵌入式Linux开发环境搭建

    • 步骤4:用快捷键ctrl+Alt+T创建一个新终端,执行以下命令

      • cd Documents/ 进入Documents目录
      • ls 查看【发现有刚刚复制进入的WMtool文件夹】
      • tar xvf VMwareTools-10.2.0-7259539.tar.gz 解压【现象是出现了vmware-tools-distrib文件夹】
      • cd vmware-tools-distrib/
      • sudo ./vmware-install.pl 【一直选择enter默认】
    • 步骤5:关机重启确保运行了最新版本的VMware tools。

  • [ ] (2),创建共享文件夹

    • 步骤1:点击vmware菜单项中的虚拟机--->设置--->选项-->共享文件夹--->总是启用--->添加【出现共享文件夹向导对话框】--->下一步
      1、嵌入式Linux开发环境搭建

    • 步骤2:选择主机路径--->浏览---->【自己在Windows下创建一个文件夹用来做共享目录,这里的我起名位winshare】--->确定--->下一步
      1、嵌入式Linux开发环境搭建

    • 步骤3:选择启动此共享【必须】---->完成
      1、嵌入式Linux开发环境搭建

    • 步骤4. 这个时候我们可以看到出现了共享文件夹目录路径,然后点击确定。
      1、嵌入式Linux开发环境搭建

  • [ ] (3),测试共享文件夹是否创建成功。
    • 步骤10:用快捷键ctrl+Alt+T创建一个新终端。

      • cd /mnt/hgfs
      • ls 【可以看到创建的共享目录名字,我的是winshare】
      • touch a.c 【创建一个a.c的文件,如果在Windows下也出现a.c说明创建成功】

2.2 搭建samba服务器

2.2.1 samba作用

       Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。它可以实现windows和Unix-Like两个平台之间互相分享文档和数据。
       Samba服务器的工作原理是:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限,则允许客户端访问,最后将访问过程中系统的信息以及采集的用户访问行为信息存放在日志文件中。

2.2.2 操作步骤

  • [ ] (1),确定ubuntu能上网

  • [ ] (2),安装samba

        sudo apt-get install samba
  • [ ] (3),测试是否安装成功

        smb[按TAB TAB补全]

1、嵌入式Linux开发环境搭建

  • [ ] (4),配置samba

        cd /home/aston
        mkdir sambashare               //在home/aston下创建sambashare文件夹
        cd /etc/samba/
        sudo cp smb.conf smb.cong.bkp  //配置samba配置文件
        sudo vi smb.conf  //确保里面的内容与下面一致
    
                [share]
                comment=samba    ##这个是说明,随意填
                path=/home/aston/sambashare
                public=yes
                create mask=0777
                directory mask=0777
                writable=yes
                available=yes
                ##要能修改文件夹,要么就将/var/www/html权限设置为777,或者加上如下设置
                forceuser=root
                forcegroup=root
  • [ ] (5),重启samba

        sudo /etc/init.d/smbd restart   【现象是:[ ok ] Restarting smbd (via systemctl): smbd.service.】
        ifconfig      【发现Ubuntu的ip地址是:192.168.1.112】
  • [ ] (6),windows下访问samba服务器

    • 步骤:此电脑--->\192.168.1.112--->Enter回车键:发现出现了一个share文件夹
      1、嵌入式Linux开发环境搭建
  • [ ] (7),测试

    • 步骤1:在share文件夹下创建一个test.txt。
    • 步骤2:ubuntu中 cd sambashare/,ls发现出现了一个test.txt

2.3 使用总结

在嵌入式开发中,如果要实现windows和ubuntu之间的文件共享,从开发的方便程度来看,能用共享文件夹就不要用samba。

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)这样虚拟系统才能和真实主机进行通信。

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

3.2、 操作步骤

3.2.1 NAT 方式上网

  • [ ] (1),确定本地windows电脑能够上网(我的电脑是无线上网)
  • [ ] (2),虚拟机选择“设置--->网络适配器[NAT模式]--->确定”
    1、嵌入式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),虚拟机选择“编辑-->虚拟网络编译器-->更改设置-->桥接到无线网卡(因为我是无线上网)-->确定”
    1、嵌入式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地址分配
      1、嵌入式Linux开发环境搭建
    • 步骤4:重启网卡
    • 步骤5:ifconfig
      1、嵌入式Linux开发环境搭建

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

  • [ ] (2),WindowsPC机的IP配置为192.168.1.20
    • 步骤1:打开网络共享中心
      1、嵌入式Linux开发环境搭建
    • 步骤2:选择“更改适配器设置-->以太网-->属性-->TCP/IPv4--->手动制定ip地址--->确定”
      1、嵌入式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

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

-  - 步骤2:ubuntu终端执行

    ping 192.168.1.10

1、嵌入式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服务器成功搭建
    1、嵌入式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