嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

使用Linux虚拟机在新的Raspberry Pi计算模块3上安装Raspbian Jessie Lite

树莓派基金会一直在努力,开发下一代的树莓派Compute Module 计算模块(计算模块3, 简称CM3)的Raspberry Pi计算模块。 “下一代的计算模块有什么特点?”我听到你说。 我很高兴你问...

CM3有分两种类型:Standard标准版和Lite精简版。

标准版模块具有与Raspberry Pi 3 B型相同的1.2GHz Broadcom BCM2837(64位四核ARM Cortex A53 CPU和VideoCore IV GPU)、1GByte LPDDR2 RAM和4GBytes eMMC闪存。 它与现有的计算模块引脚兼容。

精简版模块没有eMMC内存。 而它的SD / eMMC接口路由到以前未使用的边缘连接器引脚,使该接口可供用户连接到自己的SD卡或eMMC设备。

还有一个新版本的计算模块I / O板,CMIO V3。 此版本的分线板具有支持精简版模块的SD卡插槽,但其它方面与原始CMIO板相同。

为了在标准版模块上使用所有Pi的处理能力,我们需要在eMMC内存中闪存一个操作系统。 虽然用一个备用的Raspberry Pi也可以达到这个目标,但我认为在标准Windows 10 PC上运行的虚拟机上安装Linux,然后使用这个虚拟机来闪存计算模块是很有趣的。 但是,为了保持Linux为Raspbian用户所熟悉(因为我一直喜欢它),我决定在这个小项目中使用Debian发行版(Raspbian的祖父)。 如果您想继续的话,请先下载安装系统(大多数64位PC用户的amd64系统)再阅读下去,这个系统是我们将要使用的。

入门

在我们做任何事情之前,确保我们不浪费时间在运送途中坏掉的模块总是一个好主意。 最快的方法是使用Windows的“RPi Boot”工具来证明手上的Pi有没有坏掉。 您可以找到'RPi Boot'的安装程序Raspberry Pi Boot Installer。 下载了CM-Boot-Installer.exe文件后,双击它,并使用安装向导提供的默认设置。 完成后,当您单击Windows开始菜单按钮时,您将在“最近添加的”列表中找到RPi Boot。

在点击“RPi Boot”之前,请确保您已将模块设置为从USB启动[J4应位于EN位置,如图1中的红色框內显示],并正确连接电缆,如图2所示。使用USB到micro USB电缆将PC上的备用USB端口到USB连接器。 请注意,由于CMIO V3板上只有一个USB连接器,因此您肯定需要一个带电的USB集线器将USB键盘、鼠标和任何其他USB外围设备连接到计算模块。 如果您的显示器已使用多年的话,您可能还需要HDMI-DVI-D适配器。

把USB集线器和CMIO板都接上電源,并在PC上运行“RPi Boot”。 如果一切正常,红色的PWR LED和绿色的ACT LED应该都亮起来,并且将打开命令提示框以显示握手进度的信息。 消失前它应该看起来像图3,然后Windows会通知你它已经找到一个新的大容量存储设备,你需要格式化才能使用它。 不要格式化。 只需想想“是啊! 看起来我有一个好的模块“,并现在关闭它。

 

图 1

 


图 2


图 3

主机UEFI设置

如果我们想在64位PC上运行64位虚拟机,我们需要确保在BIOS / UEFI固件中启用了虚拟化设置。 提示:如果你点击VirtualBox工具栏左上角的“新建”,一个称为“创建虚拟机”的新窗口会弹出。 点击「版本:」 的下拉菜单 - 如果您看到有32位和64位的选项,则不需要编辑UEFI,可以跳到下一部分。 但如果您只看到有32位的选项,请按照以下说明。 从Windows 10:

点击[Windows键] + [i]以弹出设置窗口。

点击“更新和安全(Update & Security)”,然后将显示:

点击“恢复”,然后点击“进阶启动”下的“立即重新启动”按钮。 然后你会看到这样:

选择“问题排查”,您应该会看到类似以下内容:

从这里,选择“高级选项”:

然后选择UEFI固件设置:

点击重启按钮,并用电脑告诉您将会做的关键,中断启动顺序。

我们现在在UEFI / BIOS设置中。 查找“虚拟化”并选择它。

确保虚拟化功能已设置为“已启用”。 点击F10保存并退出。 我们现在准备创建64位虚拟机。

安装Debian Linux虚拟机

我们现在需要的是一些虚拟机 (VM)软件。 本着保持一切开源的精神,我们将使用Oracle的VM VirtualBox。下载Windows主机的安装程序版本(在编写本文时,这是版本5.1.10)和用户手册。 虽然这不是我们今天必須要做的,但可能也值得下载VirtualBox Extension Pack。 确保扩展包版本号与VirtualBox软件相同。

运行安装程序(您下载的VirtualBox-5.1.10-112026-Win.exe文件)并接受安装向导提供的默认选项,其中应包括USB和网络支持。 您可以在过程中检查这些设置是否正确:

当你结束安装并启动VirtualBox,你应该看着这样的界面:

我们现在准备设置将安装Linux发行版的虚拟环境,所以再次点击“新建”按钮。

我们需要做的第一件事是命名虚拟机。 给它一个反映其安装的名称(而不是“MyVirtualMachine”或类似的名称),尤其是如果你打算为其他操作系统也创建虚拟机。

接下来,我们设置VM将使用多少主机计算机的RAM。 VM有更多内存当然是更好的,但需确保你不會用尽你主机操作系统的RAM,因为当VM运行时,这内存不可用于主机操作系统。

与主机一样,VM将需要一个硬盘用于其文件系统。 我们为此创建一个虚拟硬盘。

动态分配通常是一种方式,因为这意味着创建用于保存硬盘文件系统的文件尽可能小,并且在用虚拟磁盘填充数据时会增长(类似于用空气填充的气球)。

此窗口设置虚拟磁盘的最大容量。 你可以很容易设置8-10Gbytes,但我将设置更大,因为我有足够的空间,且我想在未来的项目使用这个虚拟机。

这就是我们的虚拟环境设置。 现在我们只需要安装Debian。 双击我们新制作的虚拟机图标。

当您启动此新虚拟环境时,将会弹出“首次启动向导”,以便您可以选择要安装的内容。 在这种情况下,您可以选择您先前下载的Debian ISO文件。

继续,按回车键安装Debian。 在大多数情况下,安装说明非常简单,默认设置就足够了。 我在下面强调一下一些可能不太明显的事情:

磁盘分区顺序:

引导加载器序列:

 

调整我们的Debian安装

当我们完成所有的安装和重新启动VM,我们应该找到一个看起来像这样的窗口:

恭喜! 您现在已擁有一台Debian Linux虚拟机。 您可以改变壁纸和个性化外观。但是我们还需要执行一些细微的调整,以使我们的安装井然有序。

Guest Additions

完成之后,最先需要安装的是 VirtualBox Guest Additions。这能够使主机计算机和客户操作系统之间的互动操作变得更加顺畅(这样的好处包括按当前窗口尺寸自动调整 VM 大小、在主机与客户机之间共享剪贴板和共享文件夹、在主机与客户机之间实现拖放等无缝鼠标操作等等)。在用户手册第 4章里详细介绍了安装 Guest Additions 的所有好处,不过现在只需要知道它们能让您的体验变得更好、更有用处就够了。

我们可以单击顶部左侧类似于 Windows“开始”图标的“活动”以开始使用。这样侧面将会显示一个包含图标的菜单。我们需要使用 3 x 3 点组来显示“显示应用程序”:

在此处,我们需要选择右侧最下面的点来显示最后一页应用程序:

在此处,打开一个“终端”窗口(您同样可以定制此窗口的外观):

此时,我们需要管理员权限来执行操作,因此请在提示框(其中将填入您在安装时设置的用户名和主机名)中键入:

treadstone@blackbriar:$ su

密码:

“su”命令将为您提供根用户权限,所以您需要提供在安装时创建的根用户密码。如果您是 Linux 新用户,从这里开始应该要注意了。“Root”对 Linux 环境拥有不受限制的权限,并且 Linux 会将“root”视为成年人一样。即使您正在执行一些愚蠢的操作,例如以递归方式删除整个文件系统,它也不会问您“是否确定?”。Linux 将会完全遵循您的命令…系统早就警告过您这一点了。

随后,您的提示框将变为根用户提示框,看上去应该与下面类似:

root@blackbriar:/home/treadstone#

在此提示框中,键入以下命令:

apt-get install dkms build-essential

这样将安装一些基本编译器及内核包,使我们能够构建内核模块以支持 Guest Additions。

现在我们已经完成了基础工作,可以安装 Guest additions(虚拟)CD 了。方法是在 VirtualBox 顶部的“设备”下拉菜单中,单击“插入 Guest Additions CD 映像…”。

如果一切顺利,将会弹出一个窗口,其中显示了消息“VBOXADDITIONS_yourversion 包含了会自动启动的软件。是否希望运行?”。此时,您可以点击运行按钮以安装 Guest Additions。

但是,如果今天恰巧不能安装,您可能会发现以上操作不起作用。这时就需要启用“B”计划了。

返回到您以根用户身份登录的终端,更改目录:

root@blackbriar:/home/treadstone# cd /media/cdrom

之后是:

root@blackbriar:/home/treadstone# ls

您应该会看到自己的目录列表,与下图类似:

现在,我们可以使用以下命令来运行安装脚本:

root@blackbriar:/home/treadstone# sh ./VBoxLinuxAdditions.run

结束时的打印输出应该与下图类似:

要开始利用这些 Guest Additions,我们需要断开虚拟机的电源。单击右上角的向下小箭头,然后按下电源按钮:

再次开启虚拟机电源之前,您可以进行一些调整,使自己能够更好地利用新的 Linux 虚拟机。在 VirtualBox 中,右键单击您的虚拟机:

选择“设置…”,在“常规”->“高级”中进行设置,使我们能够在主机与客户机之间轻松地共享数据。将“共享剪贴板”和“拖放”设置为“双向”。

我们还可以调整系统和显示设置:

完成调整之后,重新开启虚拟机电源。太好了!您终于有了工作正常的 Linux 虚拟机。

重新开启您的终端电源,因为在处理 Raspberry Pi 之前,我们还有一些软件包需要安装。

第一个软件包是 sudo,它允许我们以根用户身份运行单个命令。使用“su”命令切换到根用户,然后键入:

root@blackbriar:/home/treadstone# apt-get install sudo

运行此命令的结果与下图类似:

现在,我们需要将自己添加到可以使用“sudo”命令的用户组中:

root@blackbriar:/home/treadstone# adduser treadstone sudo

将“treadstone”替换为您自己的用户名。我们还需要将自己添加到“sudoers”文件中:

root@blackbriar:/home/treadstone# nano /etc/sudoers

在 nano 编辑器中向下滚动浏览文件,直至找到带有以下文字的行:“%sudo ALL=(ALL:ALL) ALL”
在该行下面,插入以下命令:

treadstone ALL=(ALL:ALL)ALL

同样,使用您的用户名替换“treadstone”。现在按下 [Ctrl] + [x] 组合键,然后按下 [y] 键加 [Enter] 键,以退出并保存文件。

关闭终端窗口,然后打开另外一台。我们准备测试一下新的功能。在常规命令提示框下,键入:

treadstone@blackbriar:$ sudo ls

输入您的密码:

现在,剩下需要做的就是安装 Git,以便能够获得 Github 对 Raspberry Pi 的支持:

treadstone@blackbriar:$ sudo apt-get install git-core

Git 使用两个主要设置来实施版本控制:

  • 用户名
  • 用户电子邮件

因此,我们现在将键入以下命令以配置这些参数:

$ git config --global user.name "treadstone"

然后键入:

$ git config --global user.email treadstone@blackbriar.com

当然,您同样需要将“treadstone”和“treadstone@blackbriar.com”替换为您自己的用户名和电子邮件地址。可以使用以下命令来检查输入是否正确:

$ git config --list

此命令的结果应该类似于下图:

现在,我们已准备好了执行主要活动。

刷入 Raspberry Pi 计算模块 3

首先要做的事就是获取用于 Raspberry Pi 的 USB 启动工具。我们获取的方法从 GitHub 中复制工具:

$ sudo git clone --depth=1 https://github.com/raspberrypi/usbboot

准备好复制之后,将目录更改为 usbboot 目录,然后安装 USB 库:

$ cd usbboot

$ sudo apt-get install libusb-1.0-0-dev

一切准备就绪后,可以使用能帮助我们的 makefile 来构建我们所需的

USB 工具:

$ sudo make

如果您此时还未将 Raspbian OS 映像下载到自己的虚拟机,现在就可以使用 Debian 发行版所附带的 Firefox 浏览器,从 https://www.raspberrypi.org/downloads/raspbian/ 中下载。由于我们的存储容量总共只有 4GB,因此需要下载“lite”版本。

在终端上,我们可以将下载文件复制到当前目录中:

$ sudo cp ../Downloads/2016-11-25-raspbian-jessie-lite.zip .

很显然,您需要将其调整为自己所下载 Raspbian 版本的文件名。请注意该命令末尾的点号,它在命令中代表您的当前目录,切勿遗漏!

随后,解压缩映像:

$ sudo unzip 2016-11-25-raspbian-jessie-lite.zip

现在您应该已经有了映射文件(结尾扩展名为 .img),可以加载到 CM3 上。最后还可以作一点准备,让您的工作变得更加轻松。进入“活动”菜单并打开“文件”工具(从上到下的第 6 项),然后浏览至 /dev 目录(在左侧单击计算机,然后单击“dev”文件夹)。按文件的修改时间排列文件,然后将窗口移至终端窗口旁边。现在已经准备好了加载映射。启动 Quattro 计算机模块输入/输出板吧!

开启板的电源之后,PC 将正确地识别 USB 上出现了新内容。为了让虚拟机同样识别,您必须在“设备”菜单上查找:

在此过程中,您将需要执行几次此操作。现在已经能看到 USB 芯片,可以运行 rpiboot:

$ sudo ./rpiboot

这样将注入我们的启动代码 (usbbootcode.bin),随后需要在“设备”菜单中查找 USB 连接的下一项枚举:

程序随后将发送一个 .elf 文件,它要求我们再次在“设备”菜单上查找新的 USB 枚举:

此时文件浏览器将会发挥作用,因为我们需要查看 USB 磁盘安装在哪个名称之下。要执行此操作,只需查找刚刚列出的全新设备即可。您可能需要手动向上滚动,以查看刚刚列出的内容:

这通常显示为 sd(something)。在本例中是 sdb – 我们只需第一项枚举。随后,使用以下命令将映像加载到此磁盘:

$ sudo dd if=2016-11-25-raspbian-jessie-lite.img of=/dev/sdb bs=4MiB

现在等待大约 5 到 10 分钟,让文件系统映像完成加载。全部完成之后,会通过以下类似的屏幕向我们发出通知:

现在到了关键的时刻。

关闭 Raspberry Pi 的电源。在集管 J4 上禁用从属 USB(按下图高亮显示,交换跳线位置),然后移除从属微型 USB 连接器:

图 4

接通电源。

显示启动输出并出现登录提示后,就表示您已经成功了

默认用户登录名为 pi,默认密码为 raspberry

添加 Wi-Fi

现在,最后要做的就是让 Pi CM3 拥有通信功能,方法是在 USB 集线器中添加一个 USB Wi-Fi 适配器。我使用的是 Raspberry Pi 适配器,但是同样也有其他适配器可用。

幸好这一步骤非常简单,因为我们需要的软件已经在文件系统上了。我们要做的只是修改一些配置文件而已。

首先,查找我们想要连接的网络。在命令行中键入:

$ sudo iwlist wlan0 scan

此时将显示一个滚动列表,其中包含了您所在地点的所有 Wi-Fi 网络。如果网络很多,您可能需要使用分页工具“more”:

$ sudo iwlist wlan0 scan ¦ more

使用空格键,一次向下滚动一页。此时您要查找的是网络的 ESSID。在此例中,我使用了自己的 iPhone 个人热点,因此 ESSID 将显示为“iPhone”。

现在,我们需要使用 nano 编辑器将此信息和 Wi-Fi 密码添加到 wpa-supplicant 文件:

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

转至文件底部,然后添加以下内容:

network={

ssid="Your_ESSID_from_earlier"

psk="Your_wifi_password"

}

这样,我的文件结尾看上去类似于:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="iPhone”
psk="password"
}

现在,我们可以使用 [Ctrl]-X 加上“Y”,然后按 [Enter] 键保存此文件。

我们需要做的另一件事是让 Raspberry Pi 使用 DHCP 加入网络,使其 IP 地址可以自动分配。此操作在接口文件中完成:

$ sudo nano /etc/network/interfaces

您的文件看上去应该类似于:

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:

psk="Your_wifi_password"

}

这样,我的文件结尾看上去类似于:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="iPhone”
psk="password"
}

现在,我们可以使用 [Ctrl]-X 加上“Y”,然后按 [Enter] 键保存此文件。

我们需要做的另一件事是让 Raspberry Pi 使用 DHCP 加入网络,使其 IP 地址可以自动分配。此操作在接口文件中完成:

$ sudo nano /etc/network/interfaces

您的文件看上去应该类似于:

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback


iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

我们需要更改以下行:

iface wlan0 inet manual

iface wlan0 inet dhcp

然后使用 [Ctrl]-X 加上“Y”,并再次按 [Enter] 键保存。

现在已经完成了配置,只需要重新加载网络接口即可:

auto lo
iface lo inet loopback


iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

我们需要更改以下行:

iface wlan0 inet manual

iface wlan0 inet dhcp

然后使用 [Ctrl]-X 加上“Y”,并再次按 [Enter] 键保存。

现在已经完成了配置,只需要重新加载网络接口即可:

$ sudo service networking reload

我们可以使用以下命令来检查网络接口是否正常:

$ ifconfig

使用 wlan0 时,显示的结果应该类似于:

wlan0 Link encap:Ethernet HWaddr 80:1f:02:aa:12:58

inet addr:172.20.10.3 Bcast:172.20.10.15 Mask:255.255.255.240

inet6 addr: fe80: :416b:a810:b9b2:be34/64 Scope:link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:154 errors:0 dropped:173 overruns:0 frame:0

TX packets:65 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:32399 (31.6 KiB) TX bytes:13036 (12.7 KiB)

如果您的 inet addr 看上去正常,就表示一切顺利。我们可以通过对 Google 服务器执行 ping 命令来进一步测试:

$ ping –c10 8.8.8.8

此命令将传输并接收 10 个数据包,这样将让我们了解自己的网络表现如何。

 

远程登录

最后还可以做一件事,就是将其设置为可以远程登录,从而让计算模块更容易使用。这意味着当我们需要连接到 CMIO 板时,只需要开启电源和 Wi-Fi 适配器即可,从而使我们能够将键盘和显示器收回用于其他项目!

在命令行中键入:

$ sudo raspi-config

此命令将显示配置实用程序。使用箭头键浏览至“高级选项”并按 [Enter] 键。然后向下浏览至“A4 SSH”并按 [Enter] 键。显示“是否需要启用 SSH 服务器?”问题时,选择 <是>。

启用操作至此完成。您可以从网络上的其他计算机连接至自己的 CM3。有一种方法可以轻松测试此功能,就是在 Windows PC 上使用 Putty。启动 Putty 时,操作十分简单,就像在“主机名(或 IP 地址)”框中输入 Pi 的 IP 地址一样。这样,您就可以从 PC 上的一个窗口中登录自己的 Pi。

如果您需要从 Linux 虚拟机连接,则可以使用 nmap 工具来查找自己的 Raspberry Pi,然后与其建立连接。

首先,在一台开放式终端的虚拟机上安装 nmap:

$ sudo apt install nmap

我们需要确定正在使用的子网,因此使用:

$ hostname –I

此命令将显示我们的地址,在本例中显示为 172.20.10.15

有了此信息,我们就可以检查其他所有已连接至此子网的设备:

$ nmap -sn 172.20.10.0/24

此命令将运行一次 ping 扫描,对所有 IP 地址执行 ping 以查看它们是否响应。对于响应了 ping 命令的每台设备,输出中都会显示其主机名和 IP 地址。

在列表中的某处应该能看到:

Nmap scan report for raspberrypi (172.20.10.3)

Host is up (0.0020s latency).

我们使用该地址来登录:

$ ssh pi@172.20.10.3

如果出现超时,请重新检查 IP 地址;如果未超时,则表示您可以在自己需要的任何时候远程登录到 Pi。至此,您已经成为了 Raspberry Pi CM3 大师,开启冒险之旅吧!愿原力与您同在…

附录 A – 虚拟机

现代 PC(即使是较低端的机型)都提供了出色的计算能力,足以同时运行多个操作系统。虚拟机软件将创建一个可在其中安装操作系统的环境,从而充分利用这一能力。而安装后的操作系统则是依靠 PC 硬件来运行。实际上,这一“客户机”操作系统是在与模拟硬件响应的软件进行交互,也就是与虚拟硬件进行交互,所以称为虚拟机。

通过使用虚拟机软件,启动后运行 Windows 10 的 PC 还可以继续运行 Linux、Solaris 或 Mac OSX。您甚至还可以运行古董级的操作系统,例如在现代硬件上可能再也无法运行的 DOS 或 OS/2。这是因为您可以使用自己喜欢的任何虚拟硬件来显示操作系统,即使是软盘驱动器等退役已久的硬件都可以使用。

除了允许您运行 Populous 的第一个 DOS 版本之外,虚拟机还有其他很多存在的理由,特别是它们所处的沙箱“容器”环境。这意味着您可以在独立于主机计算机之外的环境下测试软件(例如,您怀疑可能是特洛伊木马的软件),此环境可以随意冻结并重启、回滚到保存点,然后复制并共享,或者备份并从头开始重新启动。如果最后发现可疑文件是可对文件系统加密的勒索软件下载程序,那就非常有用了:只需要将该虚拟机密封起来,然后使用您之前保存的另一个虚拟机就行了。

Mark completed his Electronic Engineering degree in 1991 and worked in real-time digital signal processing applications engineering for a number of years, before moving into technical marketing.
DesignSpark Electrical Logolinkedin