对于刚接触嵌入式 Linux 系统开发的同学来说,搭建开发环境是一个不小的挑战,我看到过很多在入门边缘的新人为了搭建一个开发环境,苦苦尝试好几天还不得要领的情况,因此写下了这篇文章,希望能为大家做一些参考。
为什么要用虚拟机
首先要明确,这里的目的是搭建一套 Linux 开发环境。
其实只要你有一台 X86 的笔记本或者台式机,你可以像安装 Windows 系统一样直接在上面安装 Ubuntu 等 Linux 操作系统的,但是很多同学身边只有唯一的一台笔记本或者台式机,如果直接把上面的 Windows 操作系统替换成 Linux,对于初学者来说,在后面使用的过程中挑战还是蛮大的 —— Linux 系统的操作风格和 Windows 系统差别还是很大的。
或许有人会说,可以装双系统 —— 在一台电脑上装两个操作系统(Windows + Ubuntu),然后在启动的时候选择是进入 Windows 还是 Ubuntu。这样做也可以,但是还是会面临着前面的问题,当进入 Ubuntu 后,你需要在纯 Linux 环境下工作,一家习惯了 Windows 的你不一定会习惯。
幸好有虚拟化这种技术 —— 它可以让你在 Windows 电脑上通过 Vmware 之类虚拟机管理软件直接安装另外一个操作系统,比如 Ubuntu。这样你在一台电脑上就同时拥有了 Windows 和 Linux 两种操作系统,你可以用 Windows 办公、写文档,同时用 Linux 编译代码,多好。
当然、如果你有两台电脑,那事情就简单多了,一台装 Windows, 另外一台装 Ubuntu,这样能获得最佳的性能。如果你只有一台电脑的话,我建议你使用虚拟机的方式。其实不用太担心性能不够,我的笔记本是 Thinkpad E480(I7 8550U + 16G 内存),不开虚拟机的时候 CPU 大部分时间的占用了都很小,开了虚拟机也没觉得卡。
在这里我们选用 Windows 上最常用的虚拟机管理软件 —— Vmware,最新版本为 VMware Workstation Pro 15.5.0, 可以在这里 下载。
为什么选 Ubuntu
其实 Linux 操作系统(发行版)非常多,可能很多同学都能道出一两个:Ubuntu、Debian、Fedora、Red Hat、CentOS。作为嵌入式 Linux 开发来说,Ubuntu 应该是首选。
如果做一些调研你可能会发现:目前最流行的 Android 操作系统,Google 推荐的开发环境是 Ubuntu、另外在Google 内部,他们的工程师使用的开发环境也是 Ubuntu、NXP、Rockchip 等芯片原厂的开发指导文档里面,推荐使用的开发环境也是 Ubuntu、另外现在火热的 AI,各种框架,也都是优先提供 Ubuntu 系统的安装包,如果你使用 Fedora 等发行版,很可能找不到现成的安装包,然后你得从源码开始编译这些框架,中间会遇到各种头疼的库依赖关系。我曾经玩过一个主打 AI 的开发板,上面运行的是 Fedora 系统,当时我想安装 Caffe 这个 AI 框架,对不起,没有现成的安装包,只能从源码编译,整个编译过程相当痛苦,后来我干脆为这块板子移植了一个 Ubuntu 系统。
所以搭建嵌入式 Linux 开发环境,你应该选择 Ubuntu。
如果打开 Ubuntu 的 下载页面:Ubuntu Downloads,你会发现有很多版本可供下载:
可以看到不仅有 19.04、18.04 LTS、16.04 LTS、还有 Desktop、Server、64-bit、32-bit,那这些版本到底有什么区别,我们该选择哪个版本呢?
这里就需要解释一下 Ubuntu 的发布规律:Ubuntu 采用滚动开发的策略,一般一年会发布两个大版本 —— 4 月份一个版本,10 月份一个版本,比如 2019 年 4 月份发布的就叫做 Ubuntu 19.04,2019 年 10 月份发布的叫做 Ubuntu 19.10,以此类推。同时,每隔两年,会在当年的 4 月份发布一个 LTS 版本,比如 Ubuntu 18.04 LTS 和 Ubuntu 16.04 LTS,所谓的 LTS 就是 Long Time Support,即长期支持版本,Ubuntu 官方会对 LTS 版本提供长达数年的补丁升级和支持,而且 Ubuntu 官网说明, Ubuntu 18.04 会提供长期免费的安全更新维护支持至2023年4月, 而普通版本则不会有这种待遇。所以做开发环境的话,建议大家选 LTS 版本,我从去年开始就从 Ubuntu 16.04 切换到 Ubuntu 18.04 了,使用体验良好。
Desktop 版本和 Server 版本有什么区别呢?简单讲,Desktop 版本是带有图形界面的版本,你可以像使用 Windows 系统一样用鼠标去点击操作,Server 版本则没有图形界面,基本都是通过命令行操作,对于初学者,建议使用 Desktop 版本,Ubuntu 桌面也是越来越好使用了。
64-bit、32-bit :目前大家的手上的电脑,如果不是特别特别老,应该都是 64 位的,所以请选择 64-bit 的系统,这样性能会更好。如果你以后做 Android 系统开发,你会发现,Google 强制要求,必须在 64-bit 的 Ubuntu 下编译 Android。
所以,到这里你应该明白了,我们将选择 Ubuntu 18.04 LTS , 可以点击这里 下载 。
另外多说一句,对于这种背后有可靠的组织开发的软件,大家要习惯去官网下载,尽量不要通过其他的第三方来链接下载,因为你无法保证这种第三方链接是否靠谱。
安装
安装 Vmware
直接双击下载下来的 VMware-workstation-full-15.5.0-14665864.exe 文件,可能会遇到下面的提示:
要求重启系统,直接选择 “是” 重启系统,重启完之后尽量等一会让再点击 exe 安装文件,可能需要重启好几次才会成功。
后面就是一路选择下一步,直到安装完成。
点击 Windows 开始 菜单,启动 Vmware。
然后可能会提示让输入许可证,这个去网上搜一下,应该能找到。
安装 Ubuntu 18.04
选择创建新的虚拟机
在弹出的选项中选择 典型,然后下一步。
这里也告诉大家一个经验,一般安装软件,如果是第一次安装,自己对这个软件又不是很熟悉,尽量选择典型配置,这样比较容易避免出错,踩进不必要的坑里。等后面你对这个软件玩的比较熟悉了,再根据自己的喜好选择自定义设置。
选择安装程序 iso 镜像,即前面下载的 Ubuntu 18.04 ISO 镜像,下载后的镜像保存在什么位置,这里就选对应的位置。
如果这一步设置正确,会看到提示信息 已经检测到 Ubuntu 64 位 18.04。
设置登录用户名和密码
这里按照自己的喜好设置即可,不过设置完后要记清楚,后面你要用来登陆 Ubuntu 系统。
设置安装的 Ubuntu 系统的存储位置以及名称
这里指的是安装后 Ubuntu 系统的存储位置,最好选选一个磁盘性能比较好的位置,这样有利于提高虚拟机性能。
设置磁盘容量
为了安全起见,一般最好把系统盘和数据盘分开,即 Ubuntu 系统安装在一个硬盘,然后再加另外一个硬盘到 Ubuntu 系统中,用来存放数据,比如你下载的程序代码。这样做的好处是,万一你把 Ubuntu 系统整崩溃了,重装 Ubuntu 系统即可,你的那些程序和数据还在另外一个独立的盘上,不会因为你重装系统而丢失。
这和 Windows 下面把系统装到 C 盘,然后其他的资料放到 D、E 盘是同样的道理。
所以这里我们可以设置一个比较小的磁盘装 Ubuntu 系统,30G 就够了,后面再加一个大的磁盘进去。
自定义硬件
设置内存容量
这个要根据自己物理机内存的大小酌情设置,相当于把实际的物理机内存分出来一部分给 Ubuntu 系统,如果设置的太大,Windows 系统剩下的内存就变小了,Windows 性能会变差,如果设置的太小,Ubuntu 的性能也上不去。可以留意下,平时不开虚拟机的时候,Windows 系统内存的使用情况,然后来设置。我的笔记本有 16G 内存,我平时发现 Windows 系统内存占用大概在 8G 左右,所以这里就把剩下的 8G 分给了虚拟机。
设置虚拟机 CPU 数量
我的笔记本 CPU 是 I7 8550 U,4 核心 8 线程,所以我这里就按照同样的参数设置。
设置完成后选择 关闭。
点击 完成,Ubuntu 系统会自动启动开始安装。
如果发现报如下错误:
可以按照如下方法解决:
在 Windows 上右键 此电脑 ——》 管理 ,双击服务和应用程序——》服务 找到HV 主机服务,双击禁用
以管理员模式打开 Windows PowerShell,执行如下命令
bcdedit /set hypervisorlaunchtype off
重启电脑生效
Ubuntu 启动安装
这个过程可能会需要一些时间,请耐心等待。
最终安装成功,会自动进入登录界面。
点击,输入密码(账号和密码都是前面设置的,你一定要记得),然后就会进入 Ubuntu 桌面。
一路选择 Next 到最后 Done 即可。
设置时区
你可能会发现系统时间不对,不要慌,点击 Ubuntu 桌面右上角,会弹出设置选项。
再点击那个像扳手一样的图标:
在弹出的设置界面中依次选 Detials—》Date&TIme —》Time Zone
在弹出的界面中搜索 Shanghai,关闭界面后,时间就正确了。
设置软件源
软件源是指定 Ubuntu 系统在更细或者下载软件的时候,对应的服务器地址,默认设置的是从美国下载,速度比较慢,设置成国内的源,后面更新系统或者安装软件就会快很多。
点击 Ubuntu 桌面右下角,然后选择 Software&Updates 这个图标。
在 Dowload from选项里选 other
然后在弹出的选项匡里找到china,选一个对应的服务器,我这里选的是 ustc,即中科大的源,然后点击chose server。
返回上一级界面后,点击 close,在弹出的对话框中选择 reload。
在整个操作过程中,如果有弹出对话框要求输入密码,直接输入你的账户密码即可,这是因为有些操作需要 root 权限。
在这里再补充一点知识:Ubuntu 等 Linux 操作系统,是有着严格权限管理的系统,它把用户分为普通用户和 root 用户,比如我们在安装虚拟机的过程中设置的用户名对应的用户就是普通用户,普通用户的权限有着限制,比如有些设备不能访问,有些目录无法删除,root 用户和 Windows 系统中的管理员一样,他拥有最大权限,可以在系统中做任何操作,删除任意文件、目录,安装任意程序。又因为 Linux 系统是一个需要使用大量命令去操作的系统,对于 root 用户来说,如果一个命令使用错误,就有可能把系统里面重要的文件甚至连系统本身都删除,这是非常危险的。所以一个有 经验的开发者,一般都不会默认以 root 用户登录系统,而是用普通用户登录,当它执行某项操作,权限不够的时候,系统会自动提示它权限不够,这时候再在对应的命令前面加 sudo 重新执行,并输入密码,即可。
如图所示,我直接执行 apt install openssh-server 命令安装 openssh-server 这个软件,系统里面报错,并提示 Permission denied ,这就是说没有权限执行这条命令,因为安装软件时需要有 root 权限才能执行的操作,所以这里需要以 sudo 的方式执行这条命令 sudo apt install openssh-server ,然后系统会提示输入密码,输入对应的密码后,顺利安装完成。
这种操作只是让这一条命令在执行的时候拥有 root 权限,命令执行完,我们还是以普通用户的身份继续执行其他的操作,这样就最大的限度避免了错误操作导致灾难性后果的可能。
而且在正规的企业中做开发,大家的开发都是在服务器上进行,这时候只有管理员才拥有 root 账户密码,其他的开发者是不知道 root 密码的,大家都以普通用户的身份操作,如果遇到需要安装软件之类的操作,都是通过管理员进行。所以大家一定要从一开始就养成尽量以普通用户去操作的习惯。避免 Linux 从入门到删库跑路这种故事的发生。
ssh 远程登录
ssh 是 Secure Shell 的缩写 ,它是一种远程登录协议,有了它,我们可以在局域网内从一台机器登录到另外一台机器上,然后通过命令在这台其实上进行各种操作,Linux 相关的开发,大部分是以这种方式进行的。启用 ssh 前需要在 Ubuntu 上安装 openssh-server,安装命令如下:
sudo apt install openssh-server
注意上图中打箭头的地方,命令执行完后,可能会让你输入密码,另外还会有一个 Do you want to continue? [Y/n] 的提示,这里需要输入 Y 才能继续安装。
大部分软件的安装都是这个流程。
执行 ifconfig 命令查看 Ubuntu 虚拟机的 ip 地址:
从图中可以看到,第一次执行 ifconfig 命令的时候,提示这个命令找不到,并提示了安装方法,直接按照提示安装即可。这也是我们在使用 Ubuntu 系统中,遇到其他未安装命令的类似处理方法。
安装完成后再次执行 ifconfig 命令,可以看到 Ubuntu 系统的 ip 地址是 192.168.153.128, 这个和我们本机 Windows 系统的 IP 地址是不一样的。
然后我们在 Windows 系统上安装 SecureCRT 软件,利用该软件我们可以通过 ssh 登录到 Ubuntu 系统中。
SecureCRT 软件大家可以去网上自己下载,然后安装。安装完成后启动。
点击 + ,选择 ssh2,下一步。
Hostname 填 Ubuntu 系统的 IP 地址,Username 填 Ubuntu 系统的用户名,然后下一步,Session name 可以自己随意取,我这里取名位 Monarch,完成。
双击左边对应的会话,即启动 ssh 连接。
第一次连接会有上面的提示,选择 Accept & Save 即可。然后输入 Ubuntu 的登录密码,即可登录成功。
有一点需要大家注意的是,这里安装的 Ubuntu 默认 IP 地址是动态分配的,也就是说可能会变化,如果某一天你发现 ssh 通过这个地址连接不成功了,请记得通过 Ubuntu 界面进去用 ifconfig 命令确认下 IP 地址。
也许有人有疑问:既然安装的是 Desktop 版本,而且通过虚拟机也能很好的通过鼠标进行界面操作,为什么还需要通过 ssh 远程登录呢?ssh 是一个全命令行的操作界面,太难用了。
这里就牵扯到一个 Linux 的使用哲学问题:Linux/Unix 这类操作系统,最开始设计的时候就是以命令行为基础提供操作接口,即使到现在,一直到 Android 系统出现之前,Linux 操作系统应用最多的领域是各种服务器,我们登录的各种网站、我们的家庭路由器甚至给我们的手机传递信号的各种基站,它们上面跑的就是Linux 系统,而且基本不代图形桌面。以服务器(Server)为例,它是不带图形界面的,即使有的小型服务器上安装了桌面版的 Linux 系统,这个桌面一般也只有管理员在维护系统的时候才用,正常的开发用户都是通过 ssh 登录上去,用命令行完成自己的工作。
也许有人会觉得 Linux 命令行操作没有图形界面操作高效,其实这是大部分刚开始接触 Linux 系统的人的一种错觉:对于开发而言,尤其是涉及到很大工程的代码的开发,比如 Linux kernel、U-Boot、Android,这种项目里面的代码文件可能有几十万上百万个,如果通过图形界面去查找某个文件,查找某个函数的使用参考,是非常慢的,而通过 Linux 的命令行查找却非常高效 —— 你不用记得完整的文件名、只要知道一些简单的关键字,甚至文件类型,就能通过 Linux 命令行强大的模糊匹配功能,把这些文件搜出来,对于一些函数或者特定表达式的用法,搜索出来的结果带有颜色的高亮显示,你甚至不用知道表达式相关的关键字,只需要知道大概是什么格式什么样的,你也能很快的把它通过 grep 命令搜出来。
Linux kernel、U-Boot 以及几乎所有其他的 Linux 系统开源项目的编译,固件打包、分析、都是通过命令行进行的。
从我平时接触到的大量的从事 Linux 相关开发的极客来看,基本上开发能力比较强的人,命令行玩的都很溜。
就连之前一直把 Linux 作为头号敌人的微软,最近也开发了一个叫做 WindowsTerminal 的工具,旨在让用户在Windows 系统上也可以方便的进行命令行操作。可见 Linux 命令行的魅力之大。
我自己在 Windows 下面写的各种文档,需要用 git 进行版本管理,虽然 git 在 Windows 上有一个图形界面,但是我用不太习惯,而且用了一个叫做 Cmder 的命令行工具,因为它给了我像 Linux 环境下一样高效的使用体验。
也许你还会担心:Linux 命令行下没有 IDE,我喜欢用 Keil、Source Insight 这样的 IDE 来写代码。没问题,后面我会告诉大家怎么通过 Samba 服务把 Linux 下面的工作目录映射到 Windows 系统下面,这样你就可以在 Windows 下面用你喜欢的 IDE 写代码了。其实 Vim 写代码也可以很高效的。
有一点需要说明的是:上面说的这些 Linux 命令行的优点都是针对在 Linux 下面做开发,如果是娱乐,那什么都比不上图形界面,这一点还是 Windows 和 MacOS 强大。
VMware Tools
可能有人已经开始着急了,怎么还没开始安装大名鼎鼎的 VMware Tools 啊。
根据 VMware 官网的说明:VMware Tools 是用来增强虚拟机功能的,而且 Ubuntu 系统已经自带了 Open VM Tools,VMware 官方推荐大家用 Ubuntu 自带的这个版本,我们可以用以下命令在系统下查看下:
可以看到系统已经默认安装了 Open VM Tools,所以我们就不用再安装了。
根据我观察到的现象看,安装完 Ubuntu,只要重启一次,系统系统就会自动安装这个 Open VM Tools。
为虚拟机再增加一块硬盘
前面有说到,建议大家把 Ubuntu 系统装在独立的盘里,现在Ubuntu 系统基本装好了,是时候为 Ubuntu 再增加一块硬盘来放数据了。
按照上图所示,从左到右依次操作。
按照推荐设置,选 SCSI、然后下一步。
选择 创建新虚拟磁盘,当然如果你是重装系统,已经有之前使用过的现成的磁盘的话,可以选择 使用现有的虚拟磁盘 ,这样你原来磁盘中的数据就能够直接用了。
这个磁盘是用来装数据的,容量尽量设置大一点。
选择新磁盘存放路径,完成。
创建磁盘的过程需要时间,可能要等一会儿。
创建完成,启动 Ubuntu。
点击桌面左下角,打开 Utilities 选择里面的 Disks 工具。
选择新添加的磁盘,然后点击那个设置按钮,选择 Format Partitions
Name 按照你的喜好写。格式一般我们选 Linux 下最通用的 EXT4.
然后 Next——》Format ,格式化磁盘。
已经被格式化成 EXT4 格式了,
选择 Edit Mount Options
这里主要设置磁盘挂载目录,我一般把他挂载在 Home 目录下。
点击 Mount 选项,就会成功挂载磁盘。后面系统再次启动的时候,会自动挂载。
通过 df-hl 命令,可以看到系统里面已经多挂载了一个 150G的磁盘。
通过 Samba 在 Ubuntu 虚拟机和 Windows 之间共享数据
我们现在已经可以在一台电脑上同时运行 Windows 和 Ubuntu 操作系统了,那如果我需要在这两个操作系统直接按共享数据,该怎么做呢。
这里推荐用 Samba 服务来实现。
首先在 Ubuntu 系统上安装 Samba:
sudo apt install samba
编辑 samba 配置文件 :
sudo vim /etc/samba/smb.conf
在文件的最后加入以下内容:
其中 path 就是你 Ubuntu 上需要共享出去的目录路径。
执行如下命令启动 samba 服务:
sudo service smbd restart
sudo ufw allow samba
添加 samba 账户:
sudo smbpasswd -a yourusername
yourusername 就是你后面进行 samba 连接的适合需要用到的登录名,我一般设置成和 Ubuntu 系统的登录名一样。然后会提示你设置密码。
在 Windows 系统上邮件 此电脑 ——》映射网络驱动器 :
在文件夹选项中填入 Ubuntu 电脑的 IP 地址跟上 smb.conf 文件中配置的名字(就是方括号中的那个名字),完成。
然后输入前面设置的 samba 账户和密码就能连接到 到 Ubuntu 系统下的目录中了。
可以看到我们 Windows 电脑本地就映射了出来了一个磁盘,这个磁盘和你 Ubuntu 下面的一致,你在这磁盘中对代码文件的修改等效于在 Ubuntu 中对文件的修改。
总结
到这里 ,我们基本通过 Vmware 虚拟机构建了一个可以进行嵌入式 Linux 开发的虚拟机环境。你可以在这个环境上进行各种探索和尝试,不用怕出错,也不用担心把系统弄坏,因为按照这个流程重新装一次系统,大概也就需要一个小时左右的时间,而且对你的电脑不会有任何损害。
全部0条评论
快来发表一下你的评论吧 !