本节书摘来自异步社区《树莓派学习指南(基于Linux)》一书中的第1章,第1.4节,作者【英】Peter Membrey ,【澳】David Hows ,译者 张志博,孙峻文,更多章节内容可以访问云栖社区“异步社区”公众号查看。
将Raspbian烧录到SD卡与简单的文件复制稍有不同。我们下载的镜像文件是一份完整的SD卡内容克隆。为了完成烧录的工作,我们需要使用前面提到的一些工具。
注意 你所下载的SD卡镜像文件被打包在一个zip压缩包里。在Windows 7下,双击即可以文件夹的形式打开zip压缩包。将SD卡镜像文件复制到自己的文件夹下以备使用。在Mac OS X下,双击zip压缩包后SD卡镜像文件将会自动被解压缩到“下载”(Downloads)目录中。
使用Image Writer进行烧录(Windows)
在Windows下推荐使用Image Writer这一工具进行烧录,你可以在树莓派下载页上找到它的链接,我们需要的是如图1-7所示的zip压缩包。
将zip压缩包解压到任意文件夹,双击其中的Win32DiskImager,你会看到如图1-8所示的警告信息。
1.单击Extract All(提取所有文件),在弹出的对话框中记得勾选“Show Extracted Files When Complete”(完成时显示提取的文件)。
2.单击Extract(提取),稍等片刻后你就会看到解压后的文件夹了。
3.双击Win32DiskImager程序,你会看到如图1-8所示的警告信息。
4.这是由于Image Writer需要申请一些系统权限来实现诸如磁盘擦写等操作,单击Yes(是)继续。
5.你有可能看到如图1-9所示的出错提示信息。别担心,在我们的测试中,这并不影响正常使用。单击OK继续。
注意 Image Writer只会在程序启动时尝试检测SD卡,所以我们必须在启动程序前将SD连接到电脑上。否则,即便你再插入SD卡,程序也无法检测到它。
6.在Device(驱动器)下拉菜单中选择SD卡相应的盘符(比如G:)。如果下拉菜单是空的,可以尝试关闭Image Writer后再重新打开。在选择盘符时请尽量谨慎,万一错选成了相机的SD卡,你数年积累的照片可能会毁于一旦。
7.选择正确的驱动器(不确定的话,再打开“我的电脑”检查一次吧)和正确的磁盘镜像文件,单击Write(写入)按钮。烧录需要几分钟时间,喝杯咖啡休息一下吧。图1-10是运行中的Image Writer截图,可以看到写入的是写作本书时最新的Raspbian。
8.烧录完成后,将SD卡安装到树莓派上。
万事俱备了,快翻到“首次启动”部分开始折腾吧!
注意 细看图1-10可以发现,我们烧录的镜像文件后缀为.img。很多初学者忘记将镜像(.img)文件从zip压缩包中解压出来再烧录。如果再启动树莓派时再次遭遇黑屏,不妨再检查一下是否烧录了正确的文件。
在Mac系统上使用dd命令
我们很想为Mac用户介绍一种简单的方法,把Raspbian镜像写入到SD卡上,但很可惜,实在没法做到像在Windows系统上使用Disk Imager那么简单。Mac系统上有Disk Utility工具,它很强大,却无法处理我们的Raspbian镜像文件。我们试图将镜像转换成.dmg文件,但还是不起作用。我们也尝试在网络上寻找一些工具来解决这个问题,但是最终我们发现,没有工具能明显地让这件事变得简单。
我们还是不得不使用命令行来解决问题。不过我们不准备在本章详细地解释将要执行的命令,后面的章节还会有介绍,所以先依葫芦画瓢吧。
打开终端(Terminal)
接下来的每个步骤,我们都会一边介绍,一边操作,最后会有一个完整的步骤列表。整个过程还是比较简单的,步骤也不是很多。
第一步,我们在应用程序(Applications)的实用工具(Utilities)目录中打开终端(Terminal)。打开终端后,我们需要使用sudo命令取得root用户权限,相当于Windows系统的Administrator用户。
由于直接操作底层设备是不安全的(比如,不能让病毒直接把数据写入硬盘),所以普通用户无法执行相关的命令。而我们需要将Raspbian镜像直接写入SD卡,必须能够直接操作硬件。root用户对系统拥有完全的操作权限,所以我们可以使用root用户将系统镜像写入SD卡。通过下面的命令来提升为root用户。
这个命令让我们可以在终端中得到root用户权限的交互环境。你也可以通过sudo(不带-i参数)直接以root用户身份执行单条命令,但是这里我们需要执行多条,所以这样做会方便一些。按下回车键后,sudo会询问密码(就是你登录时的账户密码),输入正确后,你就得到了root用户权限。
注意 得到root用户权限后,我们可以在系统上执行任意操作。但是请记住,这时除了可以将树莓派的系统镜像写入SD卡以外,我们也有可能会弄坏Mac系统。在Unix系统中使用root用户时,你需要清楚自己在做什么,因为此时系统几乎没有任何保护。执行命令时请一定小心,仔细检查,确认没有错误再按回车键。而且在执行完命令后,请立即退出终端,以防万一。
使用终端写入镜像
OK,下面做什么?首先,我们遇到的第一个问题是确定SD卡对应的系统设备名称。为了避免一不小心抹掉主硬盘上的数据,我们需要先确定一下主硬盘的设备名称,防止误操作。
请在你的Mac上拔出SD卡,运行以下mount命令。
你应该能看到类似上面的输出,也有可能会有所不同。我们可以忽略devfs和map这几行,因为这些挂载项是操作系统的一部分。我们需要记住的是第一行,可以看到/dev/disk0s2的挂载路径是/。这是系统盘,也就是主硬盘,一定注意不能随便写入这个设备。也许,你还会看到其他一些条目,那可能是因为你还挂载了网络驱动器或者移动硬盘。那你也应该把这些设备名称都记录下来,现在的挂载状态就是系统的基本状态,我们会和挂载了SD卡之后做对比。
接下来,在Mac上插入SD卡。你应该会在Finder边栏的设备(DEVICES)下看到刚刚插入的SD卡,如图1-11所示。
因为Mac会自动挂载插入的SD卡,所以我们可以直接回到终端再次执行mount命令,观察一下发生了什么变化。
我们发现多了一个挂载的设备,在上面的例子中显示的是disk2s2,还能看到该设备的挂载路径是/Volumes/UNTITLED,这个设备正是接下来写入系统镜像的位置。
注意 BSD系统将磁盘划分为多个分区(slice),这个例子里挂载的文件系统位于disk2s2,也就是说文件系统位于第二个磁盘(disk2)的第二个分区(s2)。通过这个路径,可以让用户直接访问指定的分区。不过我们需要的是将数据直接写入设备,也就是磁盘,所以我们接下来将会对/dev/disk2进行操作。
在进行下面的操作之前,我们要先解决一个小问题。由于SD卡的文件系统被自动挂载了,我们无法直接向设备写入数据,而如果我们在Finder中卸载文件系统,SD卡对应的设备也会被Mac系统推出,这样的话我们还是无法直接操作设备。所以我们需要通过Mac系统的diskutil命令手工卸载文件系统,并在设备中保留SD卡。Mac系统也有UNIX标准的umount命令(这个命令在后面的章节会有详细解释),但是如果你想通过umount卸载SD卡,结果就是卸载失败并提示设备正忙。diskutil可以避免这些问题,并成功地完成任务,所以我们通过执行下面的命令来卸载SD卡的文件系统。
至此,我们在超级用户下得到了SD卡对应的设备名称,并从系统上卸载了SD卡的文件系统,这样我们就准备好向SD卡直接写入数据了。
我们将会使用一个古老的命令dd,该命令用于从一个设备读入数据,并写入另一个指定的设备。该命令不会处理文件系统,也不会关心使用的设备是硬盘还是SD卡,而是直接在两个设备上读写二进制数据。我们会在最后一章详细介绍dd命令,这里我们只说明如何将系统镜像写入SD卡。
使用dd命令只需要知道两个参数,读取位置(if参数)和写入位置(of参数)。我们之前已经知道了写入位置是/dev/disk2,那么读取位置呢?如果你按照本章前面的步骤一步步做了,那么树莓派的系统镜像文件应该已经躺在下载(Downloads)文件夹中了,这就是我们的读取位置。首先,在终端中输入:
之后在Finder中打开下载(Downloads)文件夹(或许你放在了其他文件夹中,请打开它),单击并拖动镜像文件到终端窗口。这样镜像文件的路径就会自动输入终端了,你应当会看到类似下面的显示。
这样我们就指定了读取位置,我们还需要为dd指定写入位置。在之前的操作中,我们已经得到了SD卡的设备名称:/dev/disk2。我们还要加上bs=512这个参数,让dd以较大的数据块写入SD卡(这样可以让写入过程快一些,否则可能需要等上4个小时)。最终整个命令是这样的:
按回车键执行命令,dd需要一些时间来完成整个操作(可能还是需要1、2个小时)。由于系统镜像有2GB大,而SD卡的写入速度并不是很快,所以我们的MacBook Pro也花了接近2个小时才完成整个镜像的写入。你可以出去逛一圈,回来之后应该能看到dd完成了写入,终端回到了命令提示符状态。
在Mac上写入镜像确实比在Windows系统上麻烦许多,不过仔细观察一下这些命令,你会发现通过命令执行操作更简单,更准确,第3章我们还会详细介绍命令行的其他优点。
我们将前面所有的操作步骤整理了一下。如果对于之前的介绍还有什么问题,或者你还有什么不太明白的,可以参考下面的内容。
到这里,我们准备好了SD卡,让我们来准备启动树莓派吧。