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)。然后单击“确定”按钮。

      image-20240303151702057

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

      image-20240303151744864

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

      image-20240303151929829

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

      image-20240303152019573

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

      image-20240303152205335

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

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

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

      image-20240303110129445

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

      image-20240303110223746

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

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

4.1 FTP方式

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

    1. 虚拟机安装 vsftp 软件

    2. 启动 FTP 服务service vsftpd start

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

      image-20240303125347116

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

      image-20240303125528357

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 服务:

    $ 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 服务,使刚才的更改生效

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

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

    # 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”的一个示例

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

    $ /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 服务在每次系统引导时自动开启,可使用以下命令:

    $ /sbin/chkconfig nfs on 
    
    在 Ubuntu 中应该输入:
    $ /sbin/chkconfig nfs-kernel-server on
    

`:显示 nfs 服务器的挂载信息,其常见选项有:
- -a:列出客户端主机名或 IP 地址,和挂载在主机的目录
- -e:显示 nfs 服务器的导出列表

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

    $ /sbin/chkconfig nfs on 
    
    在 Ubuntu 中应该输入:
    $ /sbin/chkconfig nfs-kernel-server on
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/441715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker学习进阶

一、dockerfile解析 官方文档: Dockerfile reference | Docker Docs 1.1、dockfile是什么? dockerfile是用来构建docker镜像的文本文件,由一条条构建镜像所需的指令和参数构成的脚本。 之前我们介绍过通过具体容器反射构建镜像(docker comm…

第11周,第三期技术动态

大家好,才是真的好。 真没想到,本周是今年第十一周,2024年还有不到三百天就结束了。 今天周五,我们继续介绍与Domino相关产品新闻,以及互联网或其他IT行业动态等。 一、在Windows 10和Windows 11上运行Domino和Trav…

错误和异常之标准异常创建异常

标准异常 表 10.2 列出了所有的 Python 当前的标准异常集,所有的异常都是内建的. 所以它们在脚本启动 前或在互交命令行提示符出现时已经是可用的了. 表10.2 Python内建异常 异常名称描述所有异常的基类 python 解释器请求退出 用户中断执行(通常是输入^C) 常规错误的基类

大模型时代下的自动驾驶研发测试工具链-SimCycle

前言: 最近OpenAI公司的新产品Sora的发布,正式掀起了AI在视频创作相关行业的革新浪潮,AI不再仅限于文本、语音和图像,而直接可以完成视频的生成,这是AI发展历程中的又一座重要的里程碑。AI正在不断席卷着过去与我们息…

仿牛客项目Day02:http、调试、日志、git

http状态码 后端调试 f8:逐行执行 f7:进入语句内部 f9:执行到下一个断点 前端调试 f10:逐行调试 f11:进入语句内部 f8:执行到下一个断点 日志 按照级别开启日志 日志的测试类 比如把application里…

基于交叉表生成风控规则(Python)

大家好,我是东哥。 规则是风控策略中最常用的工具之一,生成、筛选、监控、调优,几乎每天都在打交道,本篇来介绍如何基于交叉表来生成风控规则,并且如何基于评估指标进行筛选。 出品人:东哥起飞 专栏&#…

【字符串】【分类讨论】【KMP】1163. 按字典序排在最后的子串

作者推荐 视频算法专题 本文涉及知识点 字符串 字典序 分类讨论 本题无法使用KMP,因为t1不段变化。 LeetCode1163. 按字典序排在最后的子串 给你一个字符串 s ,找出它的所有子串并按字典序排列,返回排在最后的那个子串。 示例 1&#xf…

图论入门题题解

✨欢迎来到脑子不好的小菜鸟的文章✨ 🎈创作不易,麻烦点点赞哦🎈 所属专栏:刷题_脑子不好的小菜鸟的博客-CSDN博客 我的主页:脑子不好的小菜鸟 文章特点:关键点和步骤讲解放在 代码相应位置 拓扑排序 / 家谱…

基于Docker搭建Maven私服仓库(Linux)详细教程

文章目录 1. 下载镜像并启动容器2. 配置Nexus3. 配置本地Maven仓库 1. 下载镜像并启动容器 下载Nexus3镜像 docker pull sonatype/nexus3查看Nexus3镜像是否下载成功 docker images创建Nexus3的挂载文件夹 mkdir /usr/local/nexus-data && chown -R 200 /usr/local…

cadence 之 Allegro PCB封装 3D模型

Allegro PCB封装怎样赋3D模型 1、方式一 —— 设置器件高度 2、方式二 —— 指定STEP模型 2.1、Step 3D模型库 2.2、软件环境的设置和 STEP 模型库路径设置 D:\Cadence\Cadence_SPB_17.4-2019\share\local\pcb\step 2.3、指定STEP模型 即可打开 STEP 模型指定的对话框&…

【HarmonyOS】ArkTS-对象方法

目录 对象方法实例 对象方法 方法作用:描述对象的具体行为 约定方法类型 interface 接口名称 { 方法名: (参数:类型) > 返回值类型 }interface Person{dance: () > voidsing: (song: string) > void}添加方法(箭头函数) let ym: P…

服务器配置禁止IP直接访问,只允许域名访问

联网信息系统需设置只允许通过域名访问,禁止使用IP地址直接访问,建议同时采用云防护技术隐藏系统真实IP地址且只允许云防护节点IP访问服务器,提升网络安全防护能力。 一、Nginx 修改配置文件nginx.conf,在server段里插入正则表达式…

【C++ 学习】构造函数详解!!!

1. 类的6个默认成员函数的引入 ① 如果一个类中什么成员都没有,简称为空类。 ② 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 ③ 默认成员函数:用户没有显式实现&…

LoadBalancer 客户端的负载均衡器+openFeign 请求转发

LoadBalancer Spring Cloud LoadBalancer是Spring Cloud中负责客户端负载均衡的模块,其主要原理是从nacos中获取服务列表通过选择合适的服务实例来实现负载均衡。 源码跟踪 可以看到这里的intercept()方法,拦截了用户的HttpRequest请求,然…

在IDEA使用HBase Java API连接

一、下载安装Maven并加载到IDEA中 官网地址:Maven – Download Apache Maven 将对应版本的压缩包下载到本地,并新建一个文件夹Localwarehouse,用来保存下载的依赖文件 配置maven的系统环境配置,将maven安装的bin目录地址写入path环境变量: …

机器学习--循环神经网络(RNN)4

一、RNN的学习方式 如果要做学习,需要定义一个损失函数(loss function)来评估模型的好坏,选一个参数要让损失最小。 以槽填充为例,如上图所示,给定一些句子,给定一些标签,告诉机器…

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

📖 前言:随着软件产业的发展,计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂&#xf…

测试环境搭建整套大数据系统(九:docker学习)

一:为什么学习dockder? 对于组件的搭建和部署,可以简化。 二:什么是docker? docker是一个平台。 三:怎么使用docker? 1. 安装,切换仓库。 安装 curl -fsSL https://test.docke…

[java基础揉碎]继承

为什么需要继承: > 继承就可以解决代码复用的问题 继承的基本介绍: 继承的使用细节: 1.子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过公共的方法去访问 解决, 提供公共的方法返回: 2.子类必须调用父类的构造器,完成父…

CACLP预告 | 飞凌嵌入式与您相约山城重庆

第二十一届中国国际检验医学暨输血仪器试剂博览会(CACLP)将于2024年3月16日-18日在重庆国际博览中心举行。本次会议将探讨科技创新趋势,展示最新成果,发现和挖掘颠覆性技术和创新产品,引领实验医学体外诊断科技创新和未…