GPIO引导方式注意 | GPIO 启动模式仅在 Raspberry Pi 3A+、3B、3B+、计算模块 3 和 3+ 上可用。 |
---|
|
早期的Raspberry Pis可以配置为允许在上电时使用连接到GPIO连接器的硬件选择启动模式。这是通过在 SoC 的 OTP 存储器中设置位来完成的。设置位后,它们会永久分配五个 GPIO 以允许进行此选择。一旦设置了 OTP 位,就无法取消设置它们。您应该仔细考虑启用此功能,因为这五条GPIO线将始终控制启动。虽然您可以在 Raspberry Pi 启动后将 GPIO 用于其他功能,但您必须设置它们,以便在 Raspberry Pi 启动时启用所需的启动模式。 若要启用 GPIO 启动模式,请将以下行添加到config.txt文件中: program_gpio_bootmode=n
其中 n 是您希望使用的 GPIO 组。然后重新启动 Raspberry Pi 一次,以使用此设置对 OTP 进行编程。组 1 是 GPIO 22-26,组 2 是 GPIO 39-43。除非您有计算模块,否则必须使用组 1:组 2 中的 GPIO 仅在计算模块上可用。由于 OTP 位的排列方式,如果首先对组 1 的 GPIO 启动模式进行编程,则可以选择稍后选择组 2。反之则不然:一旦为 GPIO 引导模式选择了 bank 2,就无法选择 bank 1。 启用 GPIO 启动模式后,Raspberry Pi 将不再启动。您必须拉起至少一个引导模式 GPIO 引脚才能引导 Raspberry Pi。 引脚分配Raspberry Pi 3B 和计算模块 3Bank1 | Bank 2 | 引导类型 |
---|
22 | 39 | SD0 | 23 | 40 | SD1 | 24 | 41 | NAND(目前不支持 Linux) | 25 | 42 | SPI(目前不支持 Linux) | 26 | 43 | USB接口 |
上表中的 USB 同时选择 USB 设备启动模式和 USB 主机启动模式。为了使用 USB 启动模式,必须在 OTP 存储器中启用它。有关详细信息,请参阅 USB 设备启动和 USB 主机启动。 Later Raspberry Pi 3B (BCM2837B0 with the metal lid), Raspberry Pi 3A+, 3B+ 和 Compute Module 3+Bank 1 | Bank 2 | 引导类型 |
---|
20 | 37 | SD0 | 21 | 38 | SD1 | 22 | 39 | NAND(目前不支持 Linux) | 23 | 40 | SPI(目前不支持 Linux) | 24 | 41 | USB设备 | 25 | 42 | USB 主机 - 大容量存储设备 | 26 | 43 | USB 主机 - 以太网 |
注意 | 各种启动模式按GPIO线的数字顺序进行尝试,即SD0,然后是SD1,然后是NAND等。 |
---|
|
启动流程SD0 是 Broadcom SD 卡/MMC 接口。当 SoC 中的引导 ROM 运行时,它始终将 SD0 连接到内置的 microSD 卡插槽。在具有 eMMC 设备的计算模块上,SD0 连接到该模块;在计算模块上,Lite SD0 在边缘连接器上可用,并连接到 CMIO 载板中的 microSD 卡插槽。SD1 是 Arasan SD 卡/MMC 接口,也支持 SDIO。所有内置无线局域网的树莓派型号都使用 SD1 通过 SDIO 连接到无线芯片。 GPIO线路上的默认拉电阻为50KΩ,如BCM2835 ARM外设数据表第102页所述。建议使用 5KΩ 的拉电阻来拉动 GPIO 线路:这将使 GPIO 能够正常工作,但不会消耗太多功率。 NVMe SSD 启动NVMe(非易失性存储器)是通过 PCIe 总线访问外部存储的标准。您可以通过计算模块 4 (CM4) IO 板或 Raspberry Pi 5 上的 PCIe 插槽连接 NVMe 驱动器。通过一些额外的配置,您可以从 NVMe 驱动器启动。 先决条件硬件NVMe M.2 固态硬盘 用于从 PCIe 转换为 M.2 标准的适配器。
要检查您的 NVMe 驱动器是否正确连接,请从另一个存储设备(例如 SD 卡)启动您的 Raspberry Pi 并运行 ls -l /dev/nvme*。示例输出如下所示。 crw------- 1 root root 245, 0 Mar 9 14:58 /dev/nvme0
brw-rw---- 1 root disk 259, 0 Mar 9 14:58 /dev/nvme0n1
软件运行以下命令以查看您正在运行的固件: sudo rpi-eeprom-update
对于 Raspberry Pi 5,您需要 2023 年 12 月 6 日或之后发布的固件。 对于 CM4,NVMe 启动支持于 2021 年 7 月推出。您需要自该日期起发布的以下软件版本: 引导加载程序 VideoCore 固件 Raspberry Pi OS Linux 内核
最新的 Raspberry Pi OS 版本拥有您需要的一切。使用 Raspberry Pi Imager 将 Raspberry Pi OS 映像安装到驱动器上。 编辑EEPROM引导顺序对于 Raspberry Pi 5,您需要启动 Raspberry Pi OS 来编辑启动顺序。在此步骤中,您可以从 SD 卡或 USB 驱动器启动 Raspberry Pi。即使更换引导设备,EEPROM配置也会保留,因为EEPROM配置存储在电路板本身上。 使用 Raspberry Pi 配置 CLI 更新引导加载程序: sudo raspi-config
在 Advanced Options > Bootloader Version (引导加载程序版本) 下,选择 Latest。然后,使用 Finish 或 Escape 键退出 raspi-config。 运行以下命令,将固件更新到最新版本。 sudo rpi-eeprom-update -a
然后,使用 sudo reboot 重新启动。您的 Raspberry Pi 5 应该从 NVMe 启动。 对于 CM4,请使用 rpiboot 更新引导加载程序。您可以在 USB 启动 GitHub 存储库中找到有关构建 rpiboot 和配置 IO 板以将 ROM 切换到 usbboot 模式的说明。 对于带有 eMMC 的 CM4 版本,请确保在引导顺序中首先设置 NVMe。请记住将 NVMe 启动模式 6 添加到 recovery/boot.conf 中的BOOT_ORDER。 当 SD 卡插槽为空时,CM4 Lite 会自动从 NVMe 启动。 NVMe BOOT_ORDEREEPROM配置中的BOOT_ORDER设置控制引导行为。 对于 NVMe 启动,请使用 boot mode 。有关更多信息,请参阅 Raspberry Pi 引导加载程序配置。 例以下是引导加载程序检测到 NVMe 驱动器时的 UART 输出示例: Boot mode: SD (01) order f64
Boot mode: USB-MSD (04) order f6
Boot mode: NVME (06) order f
VID 0x144d MN Samsung SSD 970 EVO Plus 250GB
NVME on
然后,它将找到一个 FAT 分区并加载 start4.elf: Read start4.elf bytes 2937840 hnd 0x00050287 hash ''
然后,它将加载内核并启动操作系统: MESS:00:00:07.096119:0: brfs: File read: /mfs/sd/kernel8.img
MESS:00:00:07.098682:0: Loading 'kernel8.img' to 0x80000 size 0x1441a00
MESS:00:00:07.146055:0:[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
在 Linux 中,SSD 显示为 /dev/nvme0,“命名空间”显示为 /dev/nvme0n1。将有两个分区 /dev/nvme0n1p1 (FAT) 和 /dev/nvme0n1p2 (EXT4)。使用 lsblk 检查分区分配: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 232.9G 0 disk
├─nvme0n1p1 259:1 0 256M 0 part /boot/firmware
└─nvme0n1p2 259:2 0 232.6G 0 part /
故障 排除如果引导过程失败,请在 rpi-eeprom GitHub 存储库上提交问题,并确保在引导过程中附加控制台副本和屏幕上显示的任何内容。 HTTP 引导网络安装功能使用以太网上的 HTTP 将 Raspberry Pi 启动到嵌入式 Raspberry Pi Imager。 除了网络安装之外,您还可以使用通过 HTTP 下载的文件(使用 boot-mode 7)显式启动设备 。即使禁用了启动时的网络安装,您仍然可以使用它。 例如,您可以将其作为回退引导方法添加到BOOT_ORDER中,或者将其放在 GPIO 条件后面,以便在 GPIO 引脚被拉低时从您自己的服务器启动 HTTP 引导。 例如,如果将以下内容添加到EEPROM配置中,并且GPIO 8(默认状态为1或HIGH)将被拉低,则将下载文件 http://downloads.raspberrypi.org:80/net_install/boot.img 和 http://downloads.raspberrypi.org:80/net_install/boot.sig。如果启用了启动时的网络安装,它将使用相同的 URL。如果 GPIO 8 没有被拉低,则行为将保持不变。 [gpio8=0]
BOOT_ORDER=0xf7
HTTP_HOST=downloads.raspberrypi.org
NET_INSTALL_ENABLED=0
boot.img 和 boot.sig签名文件是包含引导文件系统的 RAM 磁盘。有关详细信息,请参阅boot_ramdisk。 如果启用了安全启动且未设置HTTP_HOST,则BOOT_ORDER中的 HTTP将被忽略。 要求要使用 HTTP 引导,请更新到 2022 年 3 月 10 日或更高版本发布的引导加载程序。HTTP 启动需要有线以太网连接。 要使用自定义 CA 证书,请更新到 2024 年 4 月 5 日或更高版本发布的引导加载程序。只有运行 BCM2712 CPU 的设备才支持自定义 CA 证书。 钥匙所有 HTTP 下载都必须签名。引导加载程序包括默认主机 fw-download-alias1.raspberrypi.com 上文件的公钥。此密钥将用于验证网络安装映像,除非您设置HTTP_HOST并在 EEPROM 中包含公钥。这允许您在自己的服务器上托管 Raspberry Pi 网络安装映像。 警告 | 使用您自己的网络安装映像将需要对映像进行签名并将公钥添加到 EEPROM。如果随后应用公共 EEPROM 更新,密钥将丢失,需要重新添加。 |
---|
|
USBBOOT 具有对公钥进行编程所需的所有工具。 # Add your PUBLIC key to the eeprom. boot.conf contains your modifications
rpi-eeprom-config -c boot.conf -p mypubkey.pem -o pieeprom.upd pieeprom.original.bin
# Generate signature for your eeprom
rpi-eeprom-digest -i pieeprom.upd -o pieeprom.sig
# Sign the network install image with your PRIVATE key
# Put boot.img and boot.sig on your web server
rpi-eeprom-digest -i boot.img -o boot.sig -k myprivkey.pem
证书为了安全起见,Network Install 使用 HTTPS 从 Raspberry Pi 网站下载操作系统映像。此功能使用引导加载程序中包含的我们自己的 CA 根目录来验证主机。 您可以将自己的自定义 CA 证书添加到设备 EEPROM,以便从自己的网站安全地下载图像。使用 rpi-eeprom-config 工具的 --cacertder 选项添加 DER 编码的证书。您必须在EEPROM配置设置中放置证书的哈希值,以确保证书不会被修改。 执行以下命令,生成DER编码证书。 openssl x509 -in your_ca_root_cert.pem -out cert.der -outform DER
然后,运行以下命令以生成证书的 SHA-256 哈希: sha256sum cert.der
您应看到类似于以下内容的输出: 701bd97f67b0f5483a9734e6e5cf72f9a123407b346088638f597878563193fc cert.der
接下来,更新 boot.conf 以包含证书的哈希值: sudo rpi-eeprom-config --edit
在 [gpio8=0] 部分中配置以下设置,替换: <your_website>与您的网站,例如yourserver.org <path_to_files>以及托管在您网站上的操作系统映像的路径,例如path/to/files <hash> 使用您上面生成的哈希值,例如 701bd97f67b0f5483a9734e6e5cf72f9a123407b346088638f597878563193fc
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf461
[gpio8=0]
BOOT_ORDER=0xf7
NET_INSTALL_ENABLED=0
HTTP_HOST=
HTTP_PATH=
HTTP_CACERT_HASH=
指定HTTP_CACERT_HASH时,网络安装将通过端口 443 使用 HTTPS 下载映像。如果没有哈希值,Network install 会通过端口 80 使用 HTTP 下载映像。 最后,使用以下命令将所有内容加载到 EEPROM 中: rpi-eeprom-config -c boot.conf -p mypubkey.pem -o pieeprom.bin --cacertder cert.der pieeprom.original.bin
rpi-eeprom-digest -k myprivkey.pem -i pieeprom.bin -o pieeprom.sig
在网络启动期间,Raspberry Pi 应使用 HTTPS 而不是 HTTP。若要查看网络安装解析的完整 HTTPS URL 以进行下载,请检查启动输出: Loading boot.img ...
HTTP: GET request for https://yourserver.org:443/path/to/files/boot.sig
HTTP: GET request for https://yourserver.org:443/path/to/files/boot.img
安全启动如果启用了安全启动,则 Raspberry Pi 只能运行由客户私钥签名的代码。因此,如果要使用网络安装或 HTTP 启动模式进行安全启动,则必须对 boot.img 进行签名并使用自己的密钥生成 boot.sig,并将这些文件托管在某个位置以供下载。EEPROM中的公钥将用于验证映像。 如果启用了安全启动但未设置HTTP_HOST,则将禁用网络安装和 HTTP 启动。 有关安全启动的详细信息,请参阅 USBBOOT。 |