介绍。
Raspberry Pi 5(以下简称 Pi 5)的主机上有一个 PCIe 连接端口,可以像标准 PC 一样使用连接 NVMe 的固态硬盘驱动器。
事实上,从 Raspberry Pi 4(以下简称 Pi 4)开始,PCIe 的使用就已经存在,不过它需要一个扩展 HAT。 Compute Module 4(以下简称 CM4)与 Pi 4 类似。
本节介绍如何在工业 Raspi PL-R4 中挂载与 NVMe 连接的固态硬盘驱动器,并将其作为启动驱动器。
激活固态硬盘的好处
ROM 是只读存储器。
在典型的 Raspberry Pi 中,操作系统基本上都放在 microSD 卡上,因此很难将其与数据区分开。
用于工业应用的 CM4 基于 eMMC 启动。由于还可以使用未使用的 microSD 卡,因此即使 eMMC 中的文件系统转换为 ROM,microSD 卡也可以作为单独的数据区使用。
尽管 eMMC 比 microSD 卡更快,但还是比不上 SSD 硬盘。如果需要更快的处理速度,可以将 SSD 硬盘用作启动盘,而不是 eMMC,也可以用同样的方法将 microSD 卡用作独立区域。
另一个缺点是 microSD 卡更容易损坏。eMMC 和 SSD 硬盘在这方面也更胜一筹。此外,由于固态硬盘的速度更高,在固态硬盘上启动的优势也非常明显。
所使用的工业用 Raspi PL-R4 是专为在主机中安装 NVMe 连接的固态硬盘驱动器而设计的、设计用于在主机中安装连接 NVMe 的固态硬盘驱动器。PL-R4 设计用于在主机中安装与 NVMe 相连的固态硬盘驱动器。
由于有些复杂,请参阅以下说明。
编辑和编写引导加载程序以启动固态硬盘
与 Pi 4 一样,CM4 引导加载程序无法独立重写。
准备一个市售的 Pi 4,与包含 CM4 的工业 Raspi “PL-R4 “主体分开。
(也可以使用另一个 PL-R4 主机,但这次将使用 Pi 4。 构建并使用 “rpiboot “工具软件从源代码写入。
用于编写的 Pi 4 已预先设置为允许 SSH 连接和通过 VNC 进行远程控制。
写入 CM4 需要 USB 电缆的另一个原因是,您需要使用 USB 电缆将写入端口连接到 Pi 4,并将引导加载程序发送到 Pi 4。
您需要什么?
- PL-R4 主机
- Pi 4 套
- USB Type-C 转 A 型电缆
- rpiboot “从源代码构建。
- 微型 HDMI 电缆
- 展示
请注意,所使用的电缆略有不同,CM4 端是 USB-C 型连接器,而 Pi 4 端是 USB-A 型连接器。
搜索 “USB-C 至 A”,找到相关产品。


CM4 无法独立更新 EEPROM。
rpi-eeprom-update
在典型的 Pi 4 上可以使用该命令。
但在 CM4 上无法执行。
sudo rpi-eeprom-update
rpi-eeprom-update is not enabled by default on CM4.
The recommended method for flashing the EEPROM is rpiboot.
See: https://github.com/raspberrypi/usbboot/blob/master/Readme.md
Run with -h for more information.
虽然有点麻烦,但从某种程度上说,它可以减少 EEPROM 出错的可能性。
从此时开始,将在单独准备的 Pi 4 侧执行。
编辑和更换引导程序(引导程序)
sudo rpi-eeprom-config
如果想改用连接 NVMe 的固态硬盘驱动器启动,可以使用商用 Pi 5 等的命令。
工具软件 “rpiboot “用于向 CM4 发送文件。文件通过 USB 电缆实际发送到 CM4。
程序流程如下
单独准备的 Pi 4 经过重新组装,可选择从固态硬盘驱动器启动特定版本的启动加载程序。
使用 “rpiboot “软件可将生成的引导加载程序写入 CM4 并替换,这与添加选项是一样的。
启动程序版本
启动前,我检查了 PL-R4 的版本,是 2023-01-11。文件名是 “pieprom-2023-01-11.bin”。
vcgencmd bootloader_version
2023/01/11 17:40:52
version 8ba17717fbcedd4c3b6d4bce7e50c7af4155cba9 (release)
timestamp 1673458852
update-time 0
capabilities 0x0000007f
在本例中,使用的是撰写本文时的最新 “pieprom-2024-10-21.bin”。 在稳定版和最新版中,”pieprom-2024-10-21.bin “是最新的。请阅读下文,如果使用的文件不同,请替换年月日。
检查每个固件文件的更新历史并选择所需的版本。
rpi-eeprom:https://github.com/raspberrypi/rpi-eeprom/blob/master/releases.md
使用 rpiboot
rpiboot 是按照官方建议从源代码构建的。
git 克隆如下。在主目录下工作。
sudo apt install git libusb-1.0-0-dev pkg-config build-essential
git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
make
cd recovery
/usbboot/recovary
现在,我们将在.NET 环境下工作。
固件位置。
运行 git 克隆后,固件文件被解压缩到 Pi 4(书虫)上的以下目录中。
/lib/firmware/raspberrypi/bootloader-2711/stable
/lib/firmware/raspberrypi/bootloader-2711/latest
/lib/firmware/raspberrypi/bootloader-2711/default
bootloader-2711
bootloader-2712
显然,自 bookwrom 发布以来,目录结构已被分为和。 2712 是 Pi 5,CM4 将从 2711 中选择。
/lib/firmware/raspberrypi/bootloader/
*位于:牛眼。
从引导加载程序中提取 conf 文件,并将其添加到引导加载程序中。
第一步是从引导加载程序中提取配置文件。
rpi-eeprom-config /lib/firmware/raspberrypi/bootloader-2711/latest/pieeprom-2024-10-21.bin -o boot.conf
这将重写 recovary 目录中原始的空 boot.conf。编辑它。
sudo nano boot.conf
BOOT_ORDER=0xf16
添加 ,设置启动顺序(启动顺序)。
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf16
BOOT_ORDER=0xf461
在 Pi 5 中,该值设置为 .激活顺序在数字部分从右到左排列。
通常情况下,1 是 microSD 卡,4 是 USB 连接的存储设备,6 是 NMVe 连接的固态硬盘驱动器。BOOT_ORDER=0xf16
此时的启动顺序为 NVMe → microSD 卡。
更多信息,请参阅官方文档。 URL:https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#boot_order-fields
256 导出哈希值。
使用 sha256sum 命令将 pieprom.bin 的哈希值写成 .sig 文件。
sha256sum pieeprom.bin | awk '{print $1}' > pieeprom.sig
交叉检查一致性。
导出到 pieprom.bin
最后,写下来。
将 pieprom-2024-10-21.bin 写成 pieprom.bin,包括刚才添加的 boot.conf。
rpi-eeprom-config -c boot.conf -o pieeprom.bin /lib/firmware/raspberrypi/bootloader-2711/default/pieeprom-2024-10-21.bin
至此,准备工作完成。
执行 rpiboot 以写入 EEPROM
最后,运行 rpiboot 将引导加载程序写入 EEPROM。
准备好 USB 电缆、镊子、显示器和 HDMI 电缆。
执行命令前,用 HDMI 电缆将 PL-R4 连接到显示器。(PL-R4 本身不开启)
cd usbboot/recovary
sudo ../rpiboot -d .
执行后,终端将停止显示以下等待信息。
此时,将 USB 电缆连接到要改写的 PL-R4 上。
**PL-R4 不需要电源。只需用 USB 电缆将其连接到 Pi4 即可。

sudo ../rpiboot -d .
RPIBOOT: build-date Oct 27 2024 version 20240422~085300 c944557b
Loading: ./bootcode4.bin
Waiting for BCM2835/6/7/2711/2712...
要在此时写入 EEPROM,可使用镊子或类似工具将 dip 开关切换到 WRT 侧(朝右)。


连接 USB 电缆后,它将被识别为外部介质并开始写入。(挂载在 /media/username/)。
下面的正确结果示例是否正确?书写于
sudo ../rpiboot -d .
RPIBOOT: build-date Oct 27 2024 version 20240422~085300 c944557b
Loading: ./bootcode4.bin
Waiting for BCM2835/6/7/2711/2712...
Loading: ./bootcode4.bin
Sending bootcode.bin
Successful read 4 bytes
Waiting for BCM2835/6/7/2711/2712...
Loading: ./bootcode4.bin
Second stage boot server
Loading: ./config.txt
File read: config.txt
Loading: ./pieeprom.bin
Loading: ./pieeprom.bin
Loading: ./pieeprom.sig
File read: pieeprom.sig
Loading: ./pieeprom.bin
File read: pieeprom.bin
Second stage boot server done
写入成功后,与 PL-R4 连接的显示屏将亮起绿灯。
注销程序现已成功完成。
出错时需要检查的事项。
不顺利并给我们带来麻烦的两件事是
其中之一是,与几年前不同的是,你可以通过 git clone 来构建,但如果你没有同时包含子模块,就会出现错误。
如需了解最新信息,请参阅以下页面。
usbboot: https://github.com/raspberrypi/usbboot
另一件事是,自从书虫事件后,/lib/firmware/raspberrypi/bootloader~中的 .bin 文件路径发生了变化。
因此,现在 Pi5 的 bootloader-2712 目录和其他设备的 bootloader-2711 目录被分开了。
最后要检查的是 USB 电缆。
如果电缆质量差或使用的是 Type C 到 Type C 转换接头,则可能无法使用。
这种情况很少发生,但如果错误不可避免,请使用不同的电缆进行检查。
确认 PL-R4 一侧的改写。
上述程序已成功重写到 EEPROM 中。
断开连接的 USB 电缆。
注意:在启动 PL-R4 之前,切记要撤销 PL-R4 的 dip 开关。(现在向左)
要检查操作是否正确,请打开 PL-R4 并启动它。
检查引导加载程序版本。
本例中使用的固件是 “pieprom-2024-10-21.bin “吗?
vcgencmd bootloader_version
BOOT_ORDER 也是按规定写入的。
sudo rpi-eeprom-config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf16
NVMe 连接和速度比较
重写启动顺序后,准备 SSD 驱动器连接到 NVMe 并写入操作系统映像文件。
可在 PiLink 下载页面上按型号和版本下载 PL-R4。
所编写的操作系统是从 PL-R4 可用的操作系统镜像(靶心)中下载的,由定制的 Raspberry Pi Imager 编写。
要写入固态硬盘驱动器,最好使用专用的 M.2 固态硬盘工作站。
作为替代,这次是在另一台装有市售固态硬盘驱动器外置盒的电脑上写的。

用 USB 电缆连接后,它就能像 microSD 卡一样被识别为外部介质。只需像往常一样使用 Raspberry Pi Imager 写入即可。

确认固态硬盘驱动器启动
引导加载程序已更改为从 SSD 驱动器启动,操作系统也已写入 SSD 驱动器,请将其连接到 Pl-R4 设备并进行检查。
设备底部有一个连接器,可以连接固态硬盘驱动器。拧紧后就可以使用了。

PL-R4 主机底部(携带板背面) *为演示目的,在缩回位置可以看到内部。
在接通电源之前,不要忘记将 eMMC 写入拨码开关拨回 OFF(左侧)。如果写入开关处于启用状态(WRT 侧),则无法启动。
现在,让我们用几条命令来检查一下。
df 命令显示 /dev/nvme0n1p1 挂载在 /boot 上。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 118G 4.2G 109G 4% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 724M 1.2M 723M 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/nvme0n1p1 255M 32M 224M 13% /boot
tmpfs 362M 28K 362M 1% /run/user/1000
fdisk 命令提供了更多细节。
sudo fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 119.24 GiB, 128035676160 bytes, 250069680 sectors
Disk model: TS128GMTE452T2
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: *******
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/nvme0n1p2 532480 250069679 249537200 119G 83 Linux
lsblk 命令显示有 microSD 卡、eMMC 和 NVMe 连接的固态硬盘驱动器,其中 /boot 安装在 NVMe 上。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk2 179:0 0 29.1G 0 disk
└─mmcblk2p1 179:1 0 29.1G 0 part /media/pi/9016-4EF8
mmcblk0 179:32 0 29.1G 0 disk
├─mmcblk0p1 179:33 0 512M 0 part
└─mmcblk0p2 179:34 0 28.6G 0 part
mmcblk0boot0 179:64 0 4M 1 disk
mmcblk0boot1 179:96 0 4M 1 disk
nvme0n1 259:0 0 119.2G 0 disk
├─nvme0n1p1 259:1 0 256M 0 part /boot
└─nvme0n1p2 259:2 0 119G 0 part /
了解速度。
然后检查固态硬盘的速度。
我们使用 hdparm 命令测量了读取速度。
PL-R4 本身执行测量命令。
NVMe
连接 NVMe 的固态硬盘驱动器的速度为 375 MB/s。
sudo hdparm -t /dev/nvme0n1
/dev/nvme0n1:
Timing buffered disk reads: 1130 MB in 3.00 seconds = 376.54 MB/sec
现在人们很容易忘记 Pi 5 正在销售,但这次是固态硬盘驱动器启动 CM4,它不像 Pi 5 那样完全兼容 PCIe,所以即使速度稍差,也是一个数量级的不同。
eMMC
下一步是 eMMC。
sudo hdparm -t /dev/mmcblk0
/dev/mmcblk0:
Timing buffered disk reads: 250 MB in 3.02 seconds = 82.88 MB/sec
eMMC 的速度约为 82 MB/s。
microSD 卡
最后是 microSD 卡。
sudo hdparm -t /dev/mmcblk2
/dev/mmcblk2:
Timing buffered disk reads: 28 MB in 3.09 seconds = 9.06 MB/sec
与市场上推出的 Pi 4 microSD 卡不同,PL-R4 的速度并不在 10 MB/s 左右。这是该产品的独特之处。
在典型的 Raspberry Pi 上,速度大约为 20-30 MB/s。
速度测试结果
固态硬盘的速度已经够快了,没有可比性。
结果 | 固态硬盘 | eMMC | microSD 创见 32GB |
---|---|---|---|
读取速度 | 约 376 MB/秒。 | 约 82 MB/s | 约 10 MB/s |
* microSD 卡的数值基于 “PL-R4 “规格和调整。
多次运行 hdparm 是一种简单的测量方法。您可以尝试使用以下命令多次运行它。
for i in $(seq 5); do sudo hdparm -t /dev/mmcblk2; sleep 5; done
按分数比较
另一项测量也是使用脚本工具进行的,该工具可以在互联网上共享测量结果。
该工具的功能与 hdparm 命令相同。它提供了更详细的显示和独特的评分方法来比较速度。
测量结果相同:读取速度为 355 MB/s。

迄今为止,该脚本工具已在用户名 raspida 下注册,并使用了 Pi4、Pi5 和 SSD 驱动器,但条件各不相同。
请参阅。
PiBenchmarks:https://pibenchmarks.com/user/raspida/
固态硬盘驱动器在 CM4 中也能启动。
与一般的 Pi 4 不同,在 CM4 上更改引导加载程序似乎有点麻烦。
不过,PL-R4 比使用 CM4 和扩展逻辑板更容易理解,因为它有一个用于写入切换的拨码开关。
在撰写本报告时,如果遵循这些步骤,就可以顺利完成这一过程。
此外,启动顺序已写入 EEPROM,因此只需更改一次。
根据 Raspberry Pi 的用途,SSD 硬盘可能是必不可少的,因为它们比 microSD 卡或 eMMC 启动速度更快。
可以想象,microSD 卡可以作为一个单独的数据区使用,使其更易于使用,包括在紧急情况下。
CM4 还可用于激活固态硬盘驱动器。
文章由拉斯必达提供
非工程师也能愉快使用的 Raspberry Pi 信息网站。 raspida.com Raspida 运行着 raspida.com,这是一个非工程师也能愉快使用的 Raspberry Pi 信息网站。为有关工业用 Raspberry Pi 的 PiLink 网站供稿。