-
Notifications
You must be signed in to change notification settings - Fork 7
不同平台下烧写SD卡镜像的方法
本篇文章包含以下的内容:
- 了解全卡镜像和分区镜像的区别
- 在Windows下安装烧录软件、烧录img或wic格式的镜像
使用SD卡运行HiFive Unmatched主板程序是一种较为便捷的方式。您可能在网上见到过多种用于SD卡的镜像,这些镜像的烧录方式与注意事项是不同的。但总的来说,这些镜像可以分为以下两类:
- 全卡镜像
- 分区镜像
全卡镜像是应用于整张SD卡的完整镜像。全卡镜像会包含SD卡的分区格式。拿到全卡镜像,应当针对描述整张SD卡的设备来烧录。烧录全卡镜像,一般需要先删除SD卡上已有的所有分区,才能开始烧录。烧录全卡镜像后,SD卡的所有内容将丢失,从而改变为全卡镜像准备好的分区内容。烧录全卡镜像后,如果从硬盘分区软件读取SD卡,您会发现SD卡被分为了若干个分区,覆盖了原有分区的设置。
从互联网下载的Ubuntu或者官方Linux(wic格式)镜像,都属于全卡镜像。
分区镜像是应用于一个SD卡分区的镜像文件。分区镜像不包含分区格式,它应当被烧录到一个分区,替代此分区的内容。烧录分区镜像不需要先删除原有的分区。不要烧录分区镜像到错误的分区,以免覆盖有用的数据。正确烧录分区镜像到一个分区后,其它分区的数据不变,SD卡完整的分区格式不变。
如果将RustSBI打包为img镜像格式,它属于分区镜像。
本章内容将描述如何使用Windows磁盘管理器和dd-windows工具操作SD卡分区。
准备一个Windows系统主机、一个读卡器和一张SD卡。你还需要安装dd-windows软件。
如果你的系统安装了scoop,可以使用下面的命令安装dd-windows。dd-windows工具可以轻松地烧写和读取存储设备的分区。
scoop install dd
检查安装的有效性。安装完毕后,打开管理员权限的Powershell或Cmd,输入:
dd --list
如果此时能列举出系统已经安装的所有存储设备,就说明安装成功了。
SiFive提供的Linux镜像属于全卡镜像。这些镜像是xz压缩格式提供的,应当将它烧录到SD卡中,才能启动位于其中的Linux系统。开始之前,准备一个Windows系统主机,准备好xz格式的镜像,确保你的Windows系统已经安装了dd-windows和xz指令。
烧录全卡镜像前,应当删除SD卡上已有的分区。
(危险!所有数据都会丢失!务必确保SD卡上没有有用的数据后再继续)
按下Win+X,点击磁盘管理,找到目标SD卡。此时可能会显示为“磁盘 x 数据分区 x”,是因为SD卡上已有的文件系统无法被Windows识别,这是正常现象。然后右键卷,点击删除卷,这样可以删除所有的分区。
准备好.wic.xz格式的下载包,使用xz命令解压。如果您的电脑上没有xz命令,请参阅本章附录来安装。
xz -d <文件名>.wic.xz
解压结果会输出到不含xz后缀的文件名(如<文件名>.wic),而且会删除源文件。注意,xz格式的压缩率较高,较小的压缩包解压后在数个GB级别,在执行命令之前,记得保留足够的磁盘空间。
接下来使用dd烧写。如果您的电脑没有安装dd-windows,请参阅本章第一节的内容。首先列出所有的磁盘,在管理员权限下运行以下的命令:
dd --list
找到你的SD卡。它可能是不同的编号,以下假设为\\?\Device\Harddisk???\Partition0
。
在Windows下,每个数据盘可以被表示为完整的数据盘,也可以表示为它不同的分区。通常,“Partition0”表示完整的数据盘,但非0的数据盘不同的分区。因此如果你的数据盘没有分区,“dd --list”会将整个数据盘表示为“Partition0”。本次我们烧录全卡镜像,我们将烧录到“Partition0”的表示位置。
烧录镜像到SD卡。注意,必须使用管理员权限的控制台,否则会提示拒绝访问。
dd if=<文件名>.wic of=\\?\Device\Harddisk???\Partition0 --progress bs=512k
--progress
会实时提示已经写进去的字节数量。bs=512k
表示同时写入或写出的块大小,在这次刷写任务中,设置为512k能增加读写速度。
稍等片刻,命令执行完毕时,SD卡就已经刷写好,这样就能插入Unmatched开发板中使用了。
注意:有时候命令会提示“Error reading file: 87 参数错误。”,但是此时烧写已经成功完成,不需要处理这个错误。如果命令提示“Error native opening file: 0 操作成功完成。”,事实上它发生了错误,说明命令找不到待写入的设备。
准备好img格式的镜像。本次的例子中,镜像位于'target/sd-card-partition-2.img'。
使用管理员控制台运行“dd --list”指令。如果您的电脑没有安装dd-windows,请参阅本章第一节的内容。正确安装和运行后,可能会看到如下的输出:
\\?\Device\Harddisk2\Partition0
link to \\?\Device\Harddisk2\DR39
Removable media other than floppy. Block size = 512
size is 31914983424 bytes
\\?\Device\Harddisk2\Partition1
link to \\?\Device\HarddiskVolume151
Removable media other than floppy. Block size = 512
size is 1048576 bytes
\\?\Device\Harddisk2\Partition2
link to \\?\Device\HarddiskVolume152
Removable media other than floppy. Block size = 512
size is 4194304 bytes
\\?\Device\Harddisk2\Partition3
link to \\?\Device\HarddiskVolume153
Removable media other than floppy. Block size = 512
size is 136314880 bytes
\\?\Device\Harddisk2\Partition4
link to \\?\Device\HarddiskVolume154
Removable media other than floppy. Block size = 512
size is 6979321856 bytes
通过确认分区数量是4个(其中,'\?\Device\Harddisk2\Partition0'是一个虚拟的分区,表示整个数据盘,因此显示的分区数量看起来是5个),提示“Removable media other than floppy”说明是可以移除的介质,而且第1、2分区的大小大致是1MB、4MB,说明这是一个按Unmatched主板要求而正确分区的SD卡。
我们以烧录到该SD卡的第二个分区为例。
(危险!原有数据将会丢失,确认原有数据可以覆盖后继续)
dd if=target/sd-card-partition-2.img of=\\?\Device\Harddisk2\Partition2
稍等片刻后,分区烧录就会完成。注意,“Error reading file: 87 参数错误。”不需要处理,虽然报告了错误,但烧录本身确实已经完成。如果命令提示“Error native opening file: 0 操作成功完成。”,事实上它发生了错误,找不到需要烧录的设备,此时需要查看SD卡是否已经插入到烧录主机上。
将烧录好第2分区的SD卡从Windows系统的主机弹出,插入Unmatched主板,就可以开始后续的工作了。
xz软件提供了xz格式的解压命令。
如果你的系统安装了scoop,可以使用下面的命令安装xz。
scoop install xz
安装后输入“xz --help”命令,如果给出了使用帮助,就说明安装成功。