6. 虚拟机及Linux安装

虚拟机及Linux安装

进行嵌入式项目开发,第一步就是要建立嵌入式开发环境,主要包括安装 Bootloader 工具 、不同平台的交叉编译器 (如ARM 平台的arm-linux-gcc)、内核源码树 (在需要编译和配置内核时)、在调试时使用的一些终端软件TFTP 或FTP软件 以及内核和文件系统的烧写工具(一般硬件厂家会提供)。下面逐一讲解。

1. 虚拟机的安装

  • 很多工具都是 Windows 版本的,而要求的开发环境是 Linux 环境。在 Windows 系统中安装虚拟机,然后再虚拟一个 Linux 环境,使 Linux 和 Windows 能够互相通信。这种方案解决了很多软件不兼容两种平台的问题。
  • 虚拟机软件 Vmware 的安装和普通软件的安装过程一样,此处就不详细介绍了。 下面介绍安装 Linux 的主要步骤 :
    1. 准备Linux系统安装镜像(如Ubuntu、fedora等),如 Fedora-Live-Desktop-i686-19-1.iso,可以在网上下载;
    2. 运行 VMware,选择"文件" |"新建虚拟机"命令,或者直接单击"新建虚拟机"图标;
    3. 在"新建虚拟机向导"窗口中选择"自定义"选项;
    4. 虚拟机硬件兼容性窗口按默认选择安装;
    5. 在"安装客户机操作系统"窗口中,选择"我以后再安装操作系统"选项;
    6. 在选择客户机操作系统的时候选择 Linux 选项。在"版本"下拉菜单中选择准备安装的 Linux 版本;
    7. 单击"下一步"按钮,进入主题为虚拟机取名称的对话框,同时确定安装路径。注意选择安装的分区应该有足够的空间安装 Linux系统。因为在后面还要安装 Linux 源码树,所以建议安装在一个至少有 8GB~10GB 空闲空间的分区上;
    8. 单击"下一步"按钮,进入处理器配置对话框,在其中根据你电脑实际情况选择处理器个数;
    9. 在对虚拟机内存进行划分时,可以根据实际主机硬件的配置进行划分,一般可以按默认的配置安装。如果实际主机配置比较高,可以给虚拟机多分配点内存;
    10. 在网络连接类型中可以选择任意一种类型,该设置在后面需要修改的时候可以进行修改,此处可以按默认选项进行安装;
    11. I/O 适配器窗口可以按照默认配置安装;
    12. 在"选择磁盘"对话框中,选择"创建一个新的虚拟磁盘"单选按钮 ;
    13. 在"选择磁盘类型"对话框中,根据电脑实际情况选择 IDE或SCSI按钮;
    14. 在"指定磁盘容量"对话框中,确定磁盘大小,为 Linux 系统预留 20GB 空间,并且选择"立即分配所有磁盘空间"复选框;
    15. 指定磁盘文件对话框按默认名字和路径进行安装,单击"下一步"按钮,确认虚拟机设置。然后单击"完成"按钮,创建虚拟磁盘。
    16. 单击"CD/DVD(IDE) 自动检测"选项,选择"使用 ISO 镜像文件"选项,然后单击"浏览"按钮,选择下载好的Linix系统镜像文件。然后单击"确定"按钮,关闭对话框。
    17. 在VMware工具栏中单击绿色的按钮,或者单击"打开此虚拟机电源"选项进入虚拟机安装界面,此时用户不需要操作,系统会自动加载进入 系统安装 界面;
    18. 在选择语言选项的时候,建议选择"简体中文"选项。然后单击"继续"按钮,依次确认或设置后,单击"开始安装"按钮,进入"配置"界面;
    19. 进入该界面后,系统就默认开始安装。同时,该界面提供 ROOT 密码设置和创建用户功能。依次设置后,等待系统自动安装。安装完成后,系统提示重新启动计算机;
    20. 在 VMware 软件中,选择"虚拟机" |"发送 Ctrl+Alt+Del"命令,重新启动操作系统,进入Linux 启动界面,由于是第一次登录,需要对语言、输入源、在线账号做一个简单设置。设置完成后,进入操作系统桌面。

2. 虚拟机和主机通信设置

  • 很多资料和软件往往都放在主机上,当需要在虚拟机环境下对这些资料进行访问时, 或者将虚拟机编译好的文件传送到主机上时,就需要建立两者之间的通信。

  • 建立虚拟机和主机通信的过程如下:

    1. 选择"虚拟机" |"设置"命令,打开"虚拟机设置"对话框。选择"硬件"选项卡中的 "网络适配器"选项。在"网络连接"选项区域中选择"自定义:指定虚拟网络"单选按钮,在下拉列表框中设置网络连接为 VMnet8 (NAT)。然后单击"确定"按钮。

    2. 选择"编辑" |"虚拟网络编辑器"命令,进入"虚拟网络编辑器"对话框。选择NAT 标签,将 VMnet host 设置为 VMnet8。然后单击"确定"按钮,在该对话框中,显示 NAT 子网的 IP 和子网掩码分别为 192.168.81.0 和255.255.255.0。

    3. 接着设置网卡连接状态。双击虚拟机窗口右下角的网络适配器标志,在"设备状态"选项框中,选择"已连接"和"打开电源时连接"复选框;

    4. 打开一个终端,通过 ifconfig 查看虚拟机的 IP 地址,下图中显示网卡地址为 192.168.81.136。

    5. 确定主机的 VMware net8 网卡为已连接状态,在主机端 ping 虚拟机查看主机 VMware net8 网卡的 IP 地址。一般和虚拟机网关为一个网段,并且其IP 地址为 192.168.81.1。在虚拟机中 ping 该 IP,结果如图 所示。互相都可以 ping 通说明主机和虚拟机通信成功。

3. 虚拟机与主机共享文件

  • 设置文件共享后,能够在主机和虚拟机之间进行文件传输:

    1. 打开虚拟机设置对话框,选择"选项"标签,在其中选择"共享文件夹 "选项,之后选择"总是启用"单选按钮;

    2. 单击"添加"按钮,弹出"添加共享文件夹向导"对话框。单击"下一步"按钮,弹出"共享文件夹名称"对话框:

    3. 设置完成后,单击"下一步"按钮,进入"指定共享文件夹属性"对话框,选择"启用该共享"选项,然后单击"完成"按钮,保存设置。进入/mnt 目录下,会发现多了一个目录 share。进入 share,可以看到在 Windows 系统下的文件。

4. 虚拟机与主机文件传输

4.1 FTP方式

  • 某些版本的虚拟机或者 Linux 系统对文件共享支持不够完美,此时可以选择 FTP 方式进行文件传输,该方法操作方便,在实际开发中被普遍使用。该方法包括服务器端(虚拟机)和客户端(主机)两部分安装,并且包括服务器端和客户端的配置。下面详细讲述其使用方法:

    1. 虚拟机安装 vsftp 软件

    2. 启动 FTP 服务service vsftpd start

    3. 在虚拟机防火墙中设置 FTP 策略,使得实体机可以访问虚拟机中的 FTP 服务。

    4. 在实体机中使用 IE浏览器等客户端工具访问 FTP 服务器,就可以看到 FTP 所共享的文件,下图中虚拟机IP地址为192.168.81.136。

4.2 SFTP( SSH)方式

  • 除了使用FTP服务器进行文件传输外,目前使用最广的是采用FileZilla软件进行文件传输,下面介绍其使用方法:

    1. 查看ssh服务的状态

      • 输入命令:sudo service sshd status
        • 如果出现Loaded: error (Reason: No such file or directory)提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。
        • 如果出现Active: inactive (dead)说明已经安装了ssh服务,但是没有开启。按照第三步:开启ssh服务。
    2. 安装ssh服务

      • 如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入命令sudo yum install sshd或者sudo yum install openssh-server
      • 如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入sudo apt-get install sshd或者sudo apt-get install openssh-server然后按照提示,安装就好了。
    3. 开启ssh服务

      • 在终端敲入命令sudo service sshd start
      • 执行完命令后,用第一步:查看ssh服务状态的命令,如果出现以下提示说明你的ssh服务已经启动了。如果失败来的话,那试着卸载一下再安装。
        • ctive: active (running) since Sun 2013-04-07 13:43:11 CST; 15s ago
    4. FileZilla连接虚拟机

      • 文件-->站点管理器 中新建 站点 ,然后选择SFTP协议即可;

      • 点击连接之后,提示:

      • 成功连接

4.3 TFTP方式

  • tftp 是一个传输文件的简单协议,它基于 UDP 协议实现。此协议设计时是进行小文件 传输的,因此它不具备通常的 FTP 的许多功能,只能从文件服务器上获得或写入文件,不 能列出目录,不进行认证,只能传输 8 位数据。
  • tftp 服务分为客户端服务和服务器端服务两种。
    • 首先在宿主机上开启 tftp 服务器端服务,设置好 tftp 的根目录内容(也就是供客户端下载的文件)
    • 然后,在目标板上开启 tftp 的客户端程序(tftp 客户端主要在 Bootloader 交互环境下运行,几乎所有 Bootloader 都 提供该服务,用于下载操作系统内核和文件系统)。
    • 最后,把目标板和宿主机用直连线相连。之后就可以通过 tftp 协议传输可执行文件。下面分别讲述在 Linux 下和 Windows 下的配 置方法。
4.3.1 Linux 下的 tftp 服务配置

Linux 下 tftp 的服务是由 xinetd (还有 openbsd-inetd 等其他服务)所设定的,默认情况 下是处于关闭状态。

  1. 首先,要修改 tftp 的配置文件(将"disable=yes"改为"disable=no"),开启 tftp 服务:

    bash 复制代码
    $ vim /etc/xinetd.d/tftp
    service tftp
    {
        socket_type = dgram
        protocol = udp
        wait = yes
        user = root
        server = /usr/sbin/in.tftpd
        server_args = -s /tftpboot
        disable = no
        per_source = 11
        cps = 100 2
        flags = IPv4
    }
    • 通过"server_args"可 以看出,tftp 服务器端的默认根目录为"/tftpboot",用户可以根据需要更改为其他目录。
  2. 重启 xinetd 服务,使刚才的更改生效

    bash 复制代码
    $ /etc/init.d/xinetd restar
  3. 确认 tftp 服务是否已经开启

    bash 复制代码
    $ netstat --au | grep tftp
    Proto 	Recv-Q 	Send-Q 	Local 	Address 	Foreign Address 	State
    udp 	0 		0 				*:tftp 			*:*
  • 这时,用户就可以把所需的传输文件放到"/tftpboot"目录下,这样,主机上的 tftp 服务就建立起来。用网络交叉线把目标板和宿主机连起来,并且将其配置成一个网段的地址, 再在目标板上启动 tftp 客户端程序(注意:不同的 Bootloader 所使用的命令会有所不同,读者可以查看帮助来获得确切的命令名及格式,本书以 U-Boot 为例讲解),如下所示:

    bash 复制代码
    # tftp 0x30008000 zImage
    TFTP from server 192.168.1.112; our IP address is 192.168.1.120
    Filename 'zImage'.
    Load address: 0x33000000
    Loading:###########################################################
    ###########################################################
    ###########################################################
    done
    Bytes transferred = 881988 (d7544 hex)
    • 可以看到,此处目标板使用的 IP 为"192.168.1.120",宿主机使用的 IP 为"192.168.1.112", 下载到目标板的地址为 0x33000000,文件名为"zImage"。
4.3.2 Windows 下的 tftp 服务配置
  • 在 Windows 下配置 tftp 服务需要使用 tftp 服务器软件,常见的有 Tftpd32,读者可以自 行从网上下载。要注意的是,该软件是 tftp 的服务器端,而目标板上则是 tftp客户端。
  • 在Settings 选项卡中配置服务器端的各个选项,如IP 地址等。
  • 在 Browse 中选择 tftp 的服务器端根目录。
  • 此时可以用直连线连接目标机和 宿主机,且在目标机上开启 tftp。

4.4 NFS方式

  • NFS 可以让不同的主机通过网络将远端的 NFS 服务器共享出来的文件安装到自己的系 统中,从客户端看来,使用 NFS 的远端文件就像是使用本地文件一样。在嵌入式系统中使 用 NFS 会使应用程序的开发变得十分方便,并且不用反复地烧写镜像文件。

  • NFS 的使用分为服务器端和客户端,其中服务器端提供要共享的文件,而客户端则通 过挂载"mount"这一动作来实现对共享文件的访问操作。在嵌入式开发中,通常 NFS 服务 端在宿主机上运行,而客户端在目标板上运行。

  • NFS 服务器端是通过读入它的配置文件"/etc/ exports"来决定所共享的文件目录的,在 这个配置文件中,每一行都代表一项要共享的文件目录,以及所指定的客户端对其的操作权 限。客户端可以根据相应的权限,对该目录下的所有目录文件进行访问。

  • 配置文件中每一行的格式为: 共享的目录 客户端主机名称或 IP (参数 1,参数 2...)。主机名或 IP 是可供共享的客户端主机名或 IP,若对所有的 IP 都可以访问,则 可用"*"表示。这里的参数有很多种组合方式,下表列出了常见的参数:

    选 项 参 数 含 义
    rw 可读写的权限
    ro 只读的权限
    no_root_squash 客户端分享目录使用者的权限,即如果客户端使用的是 root 用户,那么对于这个共享的目 录而言,该客户端就具有 root 的权限
    sync 资料同步写入内存与硬盘中
    async 资料会先暂存于内存中,而非直接写入硬盘
    • 配置文件"/etc/exports"的一个示例

      bash 复制代码
      $ cat /etc/exports
      /home/david/project *(rw,sync,no_root_squash)
  • 设定完配置文件之后,需要启动 nfs 服务和 portmap 服务,这里的 portmap 服务允许NFS 客户端查看 NFS 服务所用的端口,在它被激活之后,就会出现一个端口号为 111 的 sun RPC(远端过程调用)的服务,这是 NFS 服务中必须实现的一项,因此,也必须把它开启, 如下所示:

    bash 复制代码
    $ /etc/init.d/portmap restart
    启动 portmap: 				 [确定]
    $ /etc/init.d/nfs restart  //在 Ubuntu 中应为/etc/init.d/nfs-kernel-server
    启动 NFS 服务: 					[确定]
    关掉 NFS 配额: 					[确定]
    启动 NFS 守护进程: 			   [确定]
    启动 NFS mountd: 				 [确定]
    • 系统在启动 NFS 服务时就已经启动了 mountd 进程,它是 NFS 挂载服务, 用于处理 NFSD 递交过来的客户端请求。
    • 另外还会激活至少两个以上的系统守护进程,然后开始监听客户端的请求,用 dmesg 命令(或者 cat /var/log/messages)可以看到操作是否成 功。
  • 与 NFS 相关的还有两个命令,可以方便 NFS 的使用:

    • exportfs:它可以重新扫描"/etc/exports",使用户在修改"/etc/exports"配置文 件时不需要每次重启 NFS 服务,其格式为:exportfs [选项]。其常见选项有:
      • -a:全部挂载(或卸载)/etc/exports 中的设定文件目录
      • -r:重新挂载/etc/exports 中的设定文件目录
      • -u:卸载某一目录
      • -v :在 export 时,将共享的目录显示到屏幕上
    • showmount:显示 nfs 服务器的挂载信息,其常见选项有:
      • -a:列出客户端主机名或 IP 地址,和挂载在主机的目录
      • -e:显示 nfs 服务器的导出列表
  • 若希望 NFS 服务在每次系统引导时自动开启,可使用以下命令:

    bash 复制代码
    $ /sbin/chkconfig nfs on 
    
    在 Ubuntu 中应该输入:
    $ /sbin/chkconfig nfs-kernel-server on

`:显示 nfs 服务器的挂载信息,其常见选项有:

  • -a:列出客户端主机名或 IP 地址,和挂载在主机的目录

  • -e:显示 nfs 服务器的导出列表

  • 若希望 NFS 服务在每次系统引导时自动开启,可使用以下命令:

    bash 复制代码
    $ /sbin/chkconfig nfs on 
    
    在 Ubuntu 中应该输入:
    $ /sbin/chkconfig nfs-kernel-server on
相关推荐
大树883 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 小时前
Linux 11 动态监控指令top
linux
Inhand陈工4 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩5 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_5 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈5 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix