跳到主要内容

Milk-V Meles 镜像刷写教程

此页面是 Milk-V Meles 镜像刷写教程,适用于 Linux

如想查看镜像刷写教程请从下面的表格中点击链接进行查看。

其他刷写教程链接
LicheePi4A (在 Linux 上刷写)Linux 刷写教程
LicheePi4A (在 Windows 上刷写)Windows 刷写教程
Milk-V pioneer刷写教程

注意!

在查看此教程前,请对照下面的图片确认手中板卡是否和图片一致,请在确认一致后再继续按照教程操作。

Milk-V Meles 示例图

演示环境介绍

此教程中所有镜像刷写的相关操作都使用以下环境:

  • 系统及版本: Ubuntu 22.04.5 LTS
  • 架构: x86_64
  • Milk-V Meles 板卡规格:8G RAM
  • python版本 3.10.12

在此环境中,本教程中的所有操作都是可复现的,如在此环境中进行镜像刷写遇到问题请参考此页提交issue。

请注意,python 版本过高可能导致将 Bootloader 写入 SPI Nor Flash中的操作失败,请使用 pyhton 3.12 前的版本进行操作

工具安装

此部分用于介绍后续在镜像的下载以及刷写过程中都需要用到的软件包和工具,请先通过下面的教程下载安装完成后再进行后续的镜像刷写操作。

文件下载工具

在处于图形界面时,在镜像站下载镜像时可以通过直接点击链接下载的方式进行下载。而如果想通过命令行进行下载,有许多种方式例如:wget、curl等,在这里我们选择 wget 作为下载工具。

演示环境中,wget通常会预装,可以通过在命令行查询 wget 版本的方式来查看是否已安装 wget。

wget --version

如果没有安装 wget 的情况下请使用以下命令进行安装

sudo apt install wget

wget-install

请注意,sudo命令执行时需要用户输入密码进行确认才可执行,请确保自己知道密码后再执行此命令,后续不再赘述。

文件解压工具

在上述的演示环境中,zst文件压缩包有多种方式进行解压,例如zstd、tar、7z。此教程只列举其中一种。通过命令行使用 zstd 工具进行解压,此方式需要我们先在系统中安装 zstd 软件包,再进行解压。

如果不知道系统中是否已经安装 ztsd,请执行下面的命令,此命令是通过查看 zstd 版本的命令,通过回显可以判断系统是否已经预装 ztsd 软件包。

zstd --version

zstd-version

如果正常回显版本号证明已安装成功,例如下面的回显表示 zstd 已安装:

*** zstd command line interface 64-bits v1.4.8, by Yann Collet ***

如果回显没有版本号的情况下,请通过命令行安装zstd,

sudo apt update
sudo apt install zstd

zstd-install

启动方式介绍

Milk-V Meles 目前支持两种启动方式,分别是从SD card 启动从 eMMC 启动,对于两种不同的启动方式,此教程中都有进行说明,请根据自己所需的刷写方式点击进行跳转查看。

请注意,不论使用哪种刷写方式,原有的用户数据都会丢失,所以在进行刷写前请一定确保做好数据备份的工作!

在介绍两种刷写方式前需要注意,不论使用那种刷写方式,都要确保 SPI Nor Flash 中刷入了正确的固件。接下来将介绍如何刷写 SPI Nor Flash 固件。

刷写 SPI Nor Flash 固件

Milk-V Meles 开发板上有一个 SPI nor Flash。它被用来存放 Bootloader,以实现引导系统启动和 SoC 下载模式,Soc 本身不支持 从 Micro SD 卡或 USB 等其他储存介质启动。

当您更换了全新的 SPI Nor Flash 或者固件损坏时,您可能需要为其烧写镜像,这时您需要采用连接串口的方式进行烧录。

关于串口如何连接请参考官方的硬件介绍,与主机应遵循TX到RX,RX到TX,GND到GND的接线。

准备工作

首先需要安装 yoctools 到本地设备中,在演示环境下,可以直接通过pip命令安装

sudo pip install yoctools -U

如果pip命令无法执行,在没有安装 pip 的情况下,请先安装 pip

sudo apt install python3-pip

pip-install

yoctools 安装完成后可以通过检查版本的方式查看是否安装成功,如果成功回显版本号则表示安装成功。

yoc --version
2.1.11

yoc-version

其次需要下载镜像烧录软件

wget https://github.com/milkv-meles/thead-bin/raw/main/image-writer/iw-single-line.bin

最后需要下载板卡的 U-Boot 文件,请在下载链接中选择您手中板卡对应的U-Boot文件。若您的开发板是 8GB 版本,则您需要下载 u-boot-with-spl-meles.bin。若您的开发板是 16GB 版本,则下载 u-boot-with-spl-meles-16g.bin。本演示环境下使用的是8GB版本的板卡,所以下载的是 u-boot-with-spl-meles.bin

wget https://fast-mirror.isrc.ac.cn/revyos/extra/images/meles/20250323/u-boot-with-spl-meles.bin

在上述准备完成后即可进行刷写 SPI Nor Flash 固件的操作。

将 Bootloader 写入 SPI Nor Flash

首先需要使用 cct 工具检查可用设备

在此之前我们需要确认串口设备的地址,/dev/ttyUSB0 通常是 当您插入第一个 USB 转串口适配器或某些具有内置 USB 转串口功能的设备时,系统分配的第一个串口设备名称。我们在终端中运行以下命令:

sudo cct list -u /dev/ttyUSB0
Wait ..............

cct-list

此处输出的日志 “Wait ......” 代表 cct 程序正在等待 Meles 响应,在未接入串口的情况下会一直等待,直到接入串口后才会继续执行。所以是正常现象,按照下面的步骤继续执行操作即可。

如果过长时间没有接入,终端会显示如下文字

timeout

  • 首先将 USB to TTL 串口模块连接到 Meles 调试接口

    • 连接 TXD 到 RXD
    • 连接 RXD 到 TXD
    • 连接 GND 到 GND
  • 然后按住下载按钮

  • 接入电源让 Meles 上电

  • 松开下载按钮

此时在终端中会打印储存器列表,如下显示:

sudo cct list -u /dev/ttyUSB0
Wait ............................
Memory device list:
dev = ram0 , size = 1.1MB
dev = qspi0 , size = 16.0MB

cct-list1

然后我们将镜像烧录软件下载到 SRAM 中

sudo cct download -u /dev/ttyUSB0 -d ram0 -f iw-single-line.bin -v checksum -r

执行此命令后会有一个百分比进度条,请等待大约30秒

cct-download

随后下载完成

sudo cct download -u /dev/ttyUSB0 -d ram0 -f iw-single-line.bin -v checksum -r
Wait
Send file 'iw-single-line.bin' to 2:0 ...
File iw-single-line.bin download success.
Start to verify data with method:[checksum]
checksum value is: 0x880572
读出并校验成功!
Start to run image...

cct-download1

最后将下载 Bootloader 到 SPI Nor Flash 中,在这步前请再一次确认板卡规格和下载好的.bin文件是否对应,演示使用的是8GB版本的板卡,所以下载的是u-boot-with-spl-meles.bin,复制命令时请自行替换文件名。

同时请注意文件目录,演示文件在当前目录下,如果不在当前目录下请自行替换文件路径。

$ sudo cct download -u /dev/ttyUSB0 -d qspi0 -f u-boot-with-spl-meles.bin -v checksum -r -t 1200

cct-download2

执行此命令后同样会有一个百分比进度条,请等待大约一分钟。

随后下载完成

sudo cct download -u /dev/ttyUSB0 -d qspi0 -f u-boot-with-spl-meles.bin -v checksum -r -t 1200
Wait
Send file 'u-boot-with-spl-meles.bin' to 23:0 ...
File u-boot-with-spl-meles.bin download success.
Start to verify data with method:[checksum]
checksum value is: 0x43bce40
读出并校验成功!
Start to run image...

cct-download3

至此刷写完成,后续通过不同的启动方式分为从SD card 启动从 eMMC 启动,请根据需要进行选择刷写。

从 SD card 启动

硬件准备

准备MicroSD 读卡器和一张MicroSD 卡,目前 MicroSD 卡存在兼容性问题,RevyOS 提供了目前已测试过的 MicroSD 卡列表

如果您使用的 MicroSD 卡不在已知可用的列表上,出现无法正确刷写镜像和刷写后无法启动镜像的问题,请参考此页提交issue,并尝试参考从 eMMC 启动镜像的刷写教程进行镜像刷写。

SD 卡镜像准备

最新版本的 SD 卡镜像为20250323,可通过以下命令下载:

wget https://fast-mirror.isrc.ac.cn/revyos/extra/images/meles/20250323/sdcard-meles-20250323_154525.img.zst

此文件为.zst压缩包,下载完成后需要进行解压缩。可以使用 zstd 工具进行解压缩。

unzstd sdcard-meles-20250323_154525.img.zst

解压完成后会生成一个名为sdcard-meles-20250323_154525.img的镜像文件。

烧录方式介绍

如果您选择从SD card 启动,可以选择使用两种不同的方式将镜像烧录到 MicroSD 卡中。一种是通过图形界面软件烧录,一种是通过命令行使用dd命令在命令行进行烧录。 在此我们将介绍两种烧录方式的操作步骤,您可以根据自己的需求选择其中一种进行操作。

使用BalenaEtcher写入镜像到 MicroSD 卡

从官网获取烧录工具 BalenaEtcher https://etcher.balena.io/,下载时请根据本机情况选择文件进行下载。根据演示环境中的说明,选择Etcher for Linux x64 (64-bit) (zip)进行下载并解压安装。

BE-version

把 SD 卡插入读卡器,并将其插入电脑。

运行 BalenaEtcher用于写入镜像到SD 卡。

在 BalenaEtcher 窗口中, 首先点击 "Flash from file" 来选择镜像文件。

BE5

选择完镜像文件后在第二栏选择需要写入的设备。

BE6

两项都选择完以后点击"Flash"写入镜像。

在等待一段时间后会显示烧录已完成。

BE7

使用dd写入镜像

dd 是 Linux 和类 Unix 系统中的一个功能强大的命令行工具,主要用于按指定大小和格式复制文件或数据,一般会预装在系统中。

使用 dd 命令写入镜像需要根据以下步骤进行

首先需要查看设备列表,在插入 SD 卡前后分别运行以下命令,找到 SD 卡对应的设备名:

lsblk

SD 卡的设备名可能是 /dev/sda 或 /dev/mmcblk0,在演示环境中,在执行lsblk后确认sd卡分区为/dev/sda

lsblk-meles

在写入镜像前,需要卸载 SD 卡的挂载分区,如果有多个分区请逐一卸载:

sudo umount /dev/sda1

如果没有分区被挂载,umount 命令会显示not mounted,这时无需进一步操作。

在卸载分区后,建议运行sudo sync命令,确保所有数据已同步。

sync-meles

在执行完上述步骤后即可进行刷写,在刷写前请保证您在 of= 设置了正确的设备,在演示环境中,sd卡识别为sda,of=后请根据自身设备分区进行填写。

sudo dd if=./sdcard-meles-20250323_154525.img of=/dev/sda bs=4M status=progress

dd-meles

在刷写完成后,也请执行sudo sync命令,保证数据已同步,然后需要确认sd卡是未挂载状态下,这两点执行完成后才可拔出sd卡,插入到开发板中。

通过SD卡启动系统

在写入镜像完成后将SD 卡插入如图所示卡槽中。

SD卡槽

从 eMMC 启动

在刷写前请确保 eMMC 模块已经成功安装在了开发板背面。

eMMC镜像准备

最新版本的 eMMC 镜像为20250323,可通过以下命令下载:

wget https://fast-mirror.isrc.ac.cn/revyos/extra/images/meles/20250323/u-boot-with-spl-meles.bin
wget https://fast-mirror.isrc.ac.cn/revyos/extra/images/meles/20250323/boot-meles-20250323_154525.ext4.zst
wget https://fast-mirror.isrc.ac.cn/revyos/extra/images/meles/20250323/root-meles-20250323_154525.ext4.zst

三个文件分别为u-boot引导文件、boot分区和root分区的镜像文件,下载完成后需要进行解压缩。可以使用 zstd 工具进行解压缩。

unzstd boot-meles-20250323_154525.ext4.zst
unzstd root-meles-20250323_154525.ext4.zst

解压完成后会生成两个名为boot-meles-20250323_154525.ext4root-meles-20250323_154525.ext4的镜像文件。

烧录工具准备

从 eMMC 启动需要将 u-boot 文件、boot 文件以及 root 文件通过 fastboot 工具刷入eMMC中,所以需要先确认是否已安装 fastboot。

如果不知道系统中是否已经安装 fastboot ,请执行下面的命令,此命令是通过查看 fastboot 版本的命令,通过回显可以判断系统是否已经预装 fastboot 软件包。

fastboot --version

fastboot-version

如果正常回显版本号证明已安装成功,例如下面的回显表示 fastboot 已安装:

fastboot version 28.0.2-debian
Installed as /usr/lib/android-sdk/platform-tools/fastboot

如果回显没有版本号的情况下,请通过命令行安装 fastboot

sudo apt install fastboot

fastboot-install

写入镜像到eMMC

首先需要使板卡进入烧录模式,请按顺序执行以下操作:

  • 按住 Meles 下载按钮
  • 插入一次 Type-C 数据线至电源口,数据线另一端连接至主机
  • 松开下载按钮

此时可以根据lsusb中的输出内容判断设备是否正常连接。

lsusb-meles

在正常连接后,lsusb命令下会显示如下设备ID 2345:7654 T-HEAD USB download gadget

fastboot flash ram u-boot-with-spl-meles.bin
fastboot reboot
#这里暂停 3-5 秒等待 Meles 重启
fastboot flash boot boot-meles-20250323_154525.ext4
fastboot flash root root-meles-20250323_154525.ext4

fastboot-meles

刷写完成后即可正常启动。