4 m: M7 |* L5 M) J# v; j- j ⑤选择Misc utility images
⑥为您的 Raspberry Pi 选择Bootloader版本(若您是Pi400请选择4系列)
⑦选择引导模式:SD卡,USB,network
' h% Q- B& M. ~! \ ⑧选择SD卡:
⑨点击继续 YES;使用新镜像启动 Raspberry Pi 并等待至少 10 秒;当绿色活动 LED 指示灯稳定闪烁,HDMI 显示屏显示绿屏时,表示您已成功编写引导加载程序;关闭 Raspberry Pi 电源并取出 SD 卡。
6.4.2、通过raspi-config更新引导加载程序:
要在Raspberry Pi OS中更改引导模式或引导加载程序版本,请运行raspi-config:
①更新Raspberry Pi操作系统,以获取最新版本的软件包 rpi-eeprom
②运行 sudo raspi-config
③选择 高级选项 Advanced Options
④选择 引导程序版本 Bootloader Version
⑤选择出厂默认设置,或最新引导加载程序版本,默认后者。
⑥使用 sudo reboot 重新启动
引导加载程序的默认版本代表最新的出厂默认固件镜像。它进行更新是为提供关键错误修复、硬件支持,并在最新版本中测试后定期进行更新。 引导加载程序会更频繁地更新,确保包含最新修复和改进。defaultlatestlatest
高级用户可以切换到最新的引导加载程序以获得最新的功能。
运行以下命令以启动raspi-config:
sudo raspi-config
如上述6.4.2,导航到“高级选项”,然后导航到“引导加载程序版本”。选择“最新”,然后选择“是”进行确认。选择Finish,并确认要重新启动。重新启动后,再次打开命令提示符并更新系统:
sudo apt update
如果您运行sudo rpi eeprom update,您应该看到有更新版本的引导加载程序可用,并且是最新版本:
现在可以更新您的 bootloader:
$ sudo rpi-eeprom-update -a
$ sudo reboot
重新启动,然后运行sudo rpi eeprom update。现在,您应该看到当前日期已更新为引导加载程序的最新版本:
6.5.1、读取当前的 bootloader 配置
要查看当前正在运行的引导加载程序使用的配置,请运行以下命令:
$ rpi-eeprom-config
6.5.2、从 bootloader 镜像中读取配置
要从 bootloader 镜像中读取配置:
$ rpi-eeprom-config pieeprom.bin
6.5.3、编辑当前引导加载程序配置
以下命令将当前引导加载程序配置加载到文本编辑器中。当编辑器关闭时,rpi-eeprom-config会将更新的配置应用于最新可用的引导加载程序版本,并在系统重新启动时使用rpi eerom-update来安排更新:
sudo -E rpi-eeprom-config --edit
sudo reboot
如果更新的配置相同或为空,则不会进行任何更改。
编辑器由editor环境变量选择。
6.5.4、应用已保存的配置
以下命令将boot.conf应用于最新的可用引导加载程序映像,并使用rpi eeprom update在系统重新启动时安排更新。
sudo rpi-eeprom-config --apply boot.conf
sudo reboot
rpi eeprom update systemd服务在启动时运行,如果有新镜像可用,则应用更新,自动迁移当前的引导加载程序配置。
①要禁用自动更新,请执行以下操作:
sudo systemctl mask rpi-eeprom-update
②要重新启用自动更新,请执行以下操作:
sudo systemctl unmask rpi-eeprom-update
注:如果设置了FREEZE_VERSION引导加载程序配置,则更新服务将跳过任何自动更新。这消除了在安装了多个操作系统或更换SD卡时,无需每次都单独操作禁用该服务。
6.6.1、rpi-eeprom-update
Raspberry Pi OS使用rpi-eeprom-update脚本来实现自动更新服务。该脚本还可以交互式运行或打包,以创建自定义引导加载程序更新服务。
①读取当前引导加载程序版本:
vcgencmd bootloader_version
②检查是否有可用的更新:
sudo rpi-eeprom-update
③安装更新:
sudo rpi-eeprom-update -a
sudo reboot
④取消待处理的更新:
sudo rpi-eeprom-update -r
⑤安装特定的引导加载程序镜像:
sudo rpi-eeprom-update -d -f pieeprom.bin
-d标志指示 rpi-eeprom-update 使用指定镜像文件中的配置,而不是自动迁移当前配置。
⑥显示内置文档:
rpi-eeprom-update -h
固件发布状态对应于引导加载程序固件镜像的特定子目录(/lib/formance/raspberrypi/bootloader/…),可以更改以选择不同的发布流。
default-更新了新的硬件支持、关键错误修复以及通过最新版本测试的新功能的定期更新
latest-当新功能可用时更新
由于发布状态字符串只是一个子目录名称,因此可以创建自己的发布流,例如固定发布或自定义网络引导配置。
6.7.1、更改引导加载程序版本
注:您可以通过编辑 /etc/default/rpi-eeprom-update文件并将FIRMWARE_release_STATUS条目更改为相应的流,来更改在更新过程中使用的发布流。
6.7.2、更新引导加载程序镜像文件中的引导加载程序配置
以下命令将pieeprom.bin中的引导加载程序配置替换为boot.conf,并将新映像写入new.bin:
rpi-eeprom-config --config boot.conf --out new.bin pieeprom.bin
6.7.3、recovery.bin
开机时,BCM2711和BCM2712上的ROM会在SD卡引导分区的根目录中查找一个名为recovery.bin的文件。如果找到有效的recovery.bin,则ROM会执行此操作,而不是EEPROM的内容。此机制可确保引导加载程序闪存镜像始终可以重置为具有出厂默认设置的有效镜像。
有关更多信息,请参阅EEPROM引导流。
6.7.4、Bootloader 更新文件
①如果Bootloader 更新映像名为pieeprom.upd,则更新完成后,recovery.bin将重命名为recovery.000.然后重新启动系统。由于recovery.bin不再存在,ROM将从SPI闪存加载新更新的Bootloader,操作系统将正常启动。
②如果Bootloader 更新映像名为pieeprom.bin,则recovery.bin将在更新完成后停止。成功后,HDMI输出将为绿色,绿色活动LED快速闪烁。如果更新失败,HDMI输出将为红色,并通过活动LED显示错误代码。
③.sig文件包含相应镜像文件的十六进制sha256校验和;将来可能会添加其他字段。
④BCM2711和BCM2712上的ROM不支持从USB大容量存储或TFTP加载recovery.bin。相反,较新版本的Bootloader 支持自更新机制,引导加载程序能够重新刷新SPI闪存本身。请参阅引导加载程序配置页面上的ENABLE_SELF_UPDATE。
⑤启动时,rpi-eeprom-update服务会自动删除临时EEPROM更新文件。
有关rpi-eeprom-update配置文件的更多信息,请查看:rpi eprom-update-h
6.7.5、EEPROM写保护
Bootloader和VLI EEPROM都支持硬件写保护。有关如何在刷新eeprom时启用此功能的更多信息,请查看eeprom_write_parotect选项。
Raspberry Pi 4或更高版本旗舰机型上的Bootloader可以在启动时,在HDMI显示器上显示诊断信息。要查看此诊断信息,请关闭电源,然后重新通电。这时在您的Raspberry Pi显示器上应该看到类似于以下内容的诊断:
如果Bootloader无法从任何引导介质或网络引导启动,也会出现此诊断页面。如果引导介质上没有可引导镜像,或者引导介质有缺陷,或者网络引导参数不正确,都可能发生这种情况。
要在显示诊断页面的同时重新启动,您可以断开电源,然后重新连接电源,或者按住电源按钮(如果您的设备有)。
顶行描述了Raspberry Pi的型号及其内存容量。右上角的二维码是下载页面的链接。
诊断信息如下:
要禁用此诊断显示,请使用引导加载程序配置中的disable_HDMI选项。
Raspberry Pi有许多不同的启动阶段。本文档解释了引导模式的工作原理,以及Linux引导支持哪些模式。
8.1、特定的bootcode.bin -only启动模式
基于BCM2837的树莓派可以执行USB主机和以太网引导启动,即Raspberry Pi 2B版本1.2、Raspberry Pi 3B和Raspberry Pi 3B+(树莓派3A+无法进行网络引导,因为它没有内置以太网接口)。此外,Raspberry Pi 4之前的所有Raspberry Pi型号都可以使用bootcode.bin方法启用USB主机引导。
注:从Raspberry Pi 4开始,旗舰设备不再使用bootcode.bin文件。相反,这些设备使用位于板载EEPROM芯片中的引导加载程序。有关更多信息,请参阅EEPROM引导流程和SPI引导EEPROM的文档。
将SD卡格式化为FAT32,并复制最新的bootcode.bin。树莓派中必须有SD卡才能启动。从SD卡加载bootcode.bin后,树莓派将继续使用USB主机模式启动。
这对于基于BCM2835和BCM2836芯片的Raspberry Pi 1、2和Zero型号以及Raspberry Pi 3无法启动的情况非常有用(与烧录到BCM2837A0中的启动代码相比,最新的bootcode.bin为Raspberry Pi 3B提供了额外的错误修复)。
如果即使使用此bootcode.bin,大容量存储设备仍然无法工作,那么请在SD卡中添加一个名为“timeout”的新文件。这将延长到等待大容量存储设备初始化的时间为6秒。
注:适用于Raspberry Pi 4之前发布的版本。
有关使用EEPROM bootloader 启用UART的信息,请参阅 bootloader 配置文档。
可以启用早期UART来调试引导问题(在仅引导模式下对上述bootcode.bin有用)。为此,请确保您拥有最新版本的固件(包括bootcode.bin)。要检查当前固件中是否支持UART:
strings bootcode.bin | grep BOOT_UART
从bootcode.bin启用UART:
sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin
接着,将合适的USB转TTL串口线连接到您的电脑,并连接至Raspberry Pi或计算模块上的标准引脚6、8和10(GND、GPIO14、GPIO15)。
然后使用Linux或macOS上的屏幕,或Windows上的putty连接到串行。
将串行设置为115200-8-N-1,然后启动Raspberry Pi。当bootcode.bin运行时,您应该立即从设备获得串行输出。
USB有两种单独的启动模式:
USB设备启动
USB主机启动
根据OTP位,固件启动时在两种模式之间进行选择。两个bit控制USB的启动模式。第一个为启用USB设备引导,并且是默认;第二个为启用USB主机引导。
如果设置了USB主机引导模式位,处理器将读取OTGID引脚,以决定是作为主机引导(就像在任何 Raspberry Pi Model B/B+ 上一样驱动到零)还是作为设备引导(悬空)。Raspberry Pi Zero可以通过USB连接器访问OTGID引脚;计算模块可以访问边缘连接器上的OTGID引脚。
其他一些OTP位允许某些GPIO引脚选择引导模式。
注:USB设备引导可在Compute Module系列、Zero系列和旗舰系列中的A型号上使用。
当此启动模式被激活时(通常是在从SD卡启动失败后),Raspberry Pi将其USB端口置于设备模式,并等待主机的USB重置。显示主机如何与Raspberry Pi通信的示例代码可以在Github上找到。 主机首先向设备控制端点 0 发送一个结构体。这包含启动的大小和签名(未启用安全性,因此不需要签名)。其次,代码从端点1(bootcode.bin)向下传输。最后,设备将回复以下代码之一:
0-成功
0x80-故障
注:从Compute Module 3以来,Compute Module系列、自Zero 2 W以来的Zero系列、Raspberry Pi 2B(1.2版)、Raspberry Pi 3B以及自Raspberry Pi3B+以来的所有旗舰系列设备都可以进行主机引导。Raspberry Pi 3A+支持大容量存储启动,但不支持网络启动。
USB主机引导模式使用以下逻辑:
1、启用USB端口,等待D+线被拉高,表示USB 2.0设备(我们只支持USB2.0)
2、如果设备是集线器:
A,为集线器的所有下游端口供电
B,对于每个端口,循环最多两秒(如果已设置program_usb_boot_timeout=1 则循环五秒)
①从重置中释放,等待D+被驱动到高电平,以表示设备已连接
②如果检测到设备:
a,发送“获取设备描述符”
1)、如果VID==SMSC和PID==9500
i、将设备添加到以太网设备列表
b,如果接口是大容量存储类
1)、将设备添加到大容量存储设备列表
3、其他
……枚举单个设备
4、浏览大容量存储设备列表
……从大容量存储设备启动
5、浏览以太网设备列表
……从以太网启动
在Raspberry Pi 3B、3A+和3B+上,默认禁用主机引导。要启用USB主机引导,请在/boot/firmware/config.txt末尾添加一行:program_USB_boot_mode=1
警告
您对OTP所做的任何更改都是永久性的,无法撤消。
在Raspberry Pi 3A+上,将OTP位设置为启用USB主机引导模式,将永久阻止Raspberry Pi在USB设备模式下引导。
注:从Compute Module 3开始,适用于Compute Module系列,从Zero 2 W开始适用于Zero系列,从Raspberry Pi 2B(1.2版)开始适用于所有旗舰系列设备。
USB大容量存储启动模式,使您能够从USB大容量存储设备(如闪存驱动器或USB磁盘)启动Raspberry Pi。在连接USB设备,特别是硬盘和SSD时,请注意它们的电源要求。连接多个磁盘,通常需要从带电源的磁盘存储模块,或带电源的USB集线器,获得额外的外部电源。
注:Raspberry Pi 4B之前的型号存在已知的问题,这些问题会阻止使用某些USB设备启动。
9.3.1、带有EEPROM bootloader的设备
Raspberry Pi 4及最新的旗舰系列型号,以及CM系列设备,因为计算模块4和4S默认支持USB引导,只要您在boot_ORDER配置中指定USB启动即可。
注:Raspberry Pi 4的早期版本可能需要更新引导加载程序才能从USB启动。
注:计算模块4的早期版本可能需要更新引导加载程序才能从USB引导。
9.3.2、树莓派3B+
Raspberry Pi 3B+支持USB大容量存储模式启动,开箱即用。
9.3.3.、树莓派2B、3A+、3B、CM3、CM3+、Zero 2 W
在Raspberry Pi 2B v1.2、3A+、3B、Zero 2 W以及计算模块3和3+上,您必须先要启用USB主机引导模式,这允许USB大容量存储启动和网络启动。
注:Raspberry Pi 3A+和Zero 2 W不支持网络启动。
要在这些设备上启用USB主机引导模式,请在OTP(一次性可编程)存储器中设置USB主机位。要设置该位,请从SD卡启动,其中/boot/formance/config.txt 包含行program_usb_boot_mode=1,设置后,您可以在没有SD卡的情况下从USB启动。
9.3.3.1、使用OTP启用USB主机启动模式
警告:您对OTP(一次性可编程)内存所做的任何更改都是永久性的,无法撤消。在Raspberry Pi 3A+上,将OTP位设置为启用USB主机引导模式,将永久阻止Raspberry Pi在USB设备模式下引导。
使用Raspberry Pi OS的任何SD卡对OTP位进行编程。
要启用USB主机启动模式,请在config.txt中添加一行以下内容:
program_usb_boot_mode=1
然后,使用sudo reboot 重启树莓派。要检查OTP是否已正确编程,请运行以下命令:
vcgencmd otp_dump | grep 17:
17:3020000a
如果输出读数为0x3020000a,则OTP已成功编程。如果看到不同的输出,请重试编程过程。确保config.txt末尾没有空行。
现在,您可以从USB大容量存储设备启动,方式与从SD卡启动相同。有关更多信息,请参阅以下部分。
将系统写入到USB大容量存储设备里面,这个过程与安装系统到SD卡一样,点此查看。 之后,插入树莓派,并通电启动,同时注意这个USB存储设备的电源要求。
5到10秒后,Raspberry Pi应该开始启动,并在连接的显示器上显示彩虹画面。另外,树莓派此时不要插入TF卡,你这样做它将首先从TF卡启动。
有关引导顺序和其他引导模式(网络、USB设备、GPIO或SD引导),请参阅引导模式文档。
检查可引导USB设备的默认超时为2秒。一些闪存驱动器和硬盘的开机速度太慢,会导致超过2秒,从而失败。可以将此超时延长到五秒(在SD卡中添加一个新的文件timeout),但请注意,有些设备需要更长的时间才能响应。
一些闪存驱动器具有非常特定的协议要求,引导代码无法处理,因此可能不兼容。
9.6、特殊的bootcode.bin-only启动模式
在Raspberry Pi 2B v1.2、3A+、3B和3B+上,如果您无法使用特定的USB设备启动Raspberry Pi,则可以使用bootcode.bin-only启动模式。Raspberry Pi仍将从SD卡启动,但仅从SD卡读取bootcode.bin;操作系统的其余部分位于USB设备上。
从USB大容量存储设备启动之前,请验证该设备在Linux下是否正常工作。使用SD卡启动并插入USB大容量存储设备,应该显示为可移动驱动器。这对于USB SATA适配器尤为重要,在大容量存储模式下,引导加载程序可能支持USB SATA适配器,但如果Linux选择USB连接的SCSI-UAS模式,则会失败。
硬盘驱动器(HDD)通常需要一个带电源的USB集线器。即使一切正常,如果没有通电的USB集线器,您也可能会遇到间歇性故障。
在搜索可引导分区时,bootloader 会并行扫描所有USB大容量存储设备,并选择第一个进行响应。如果引导分区不包含合适的start.elf文件,bootloader 将尝试下一个可用设备。没有根据USB拓扑指定引导设备的方法;这将减慢启动速度,并增加不必要的配置复杂性。
注:使用config.txt文件条件过滤器在复杂的设备配置中选择备用固件。
本节介绍网络启动在Raspberry Pi 3B、3B+和2B v1.2上的工作原理。
在Pi 4和Pi 5上,网络启动是在EEPROM中的第二级引导加载程序中实现的。有关更多信息,请参阅 Raspberry Pi bootloader 配置。
我们还有一个关于设置网络引导系统的教程,点此查看。
网络引导仅适用于上述Raspberry Pi型号中内置的有线适配器。不支持通过无线LAN启动,也不支持从任何其他有线网络设备启动。
要进行网络启动,引导ROM会执行以下操作:
* 初始化板载以太网设备(Microchip LAN9500或LAN7500)
* 发送DHCP请求(供应商类标识符DHCP选项60设置为PXEClient:Arch:00000:UNDI:002001)
* 接收DHCP回复
* (可选)接收DHCP代理回复
* ARP到tftpboot服务器
* ARP应答包括tftpboot服务器以太网地址
* TFTP RRQ bootcode.bin
A、找不到文件:服务器回复TFTP错误响应,并显示文本错误消息
B、文件已存在:服务器将回复文件的第一个数据块(512字节),并在标头中包含块号
—— Raspberry Pi用包含块号的TFTP ACK数据包进行回复,并重复直到最后一个不是512字节的块。
* TFTP RRQ bootsig.bin
A、这通常会导致找不到文件(file not found)的错误。这是意料之中的,TFTP引导服务器应该能够处理它。
从这一点开始,bootcode.bin代码将继续加载系统。它将尝试访问的第一个文件是/start.elf。如果这不会导致错误,则要读取的任何其他文件都将以serial_number作为前缀。这很有用,因为它使您能够为Raspberry Pi创建具有单独start.elf/kernes的独立目录。
要获取设备的序列号,您可以尝试此启动模式,并使用tcpdump/wireshark查看访问的文件,也可以运行标准的Raspberry Pi OS SD卡和cat/proc/cpuinfo。
如果将所有文件放在TFTP目录的根目录中,则将从那里访问所有后续文件。
首先要检查的是OTP位是否编程正确。为此,您需要将program_usb_boot_mode=1添加到config.txt,并重新启动(使用正确引导到Raspberry Pi操作系统的标准SD卡)。一旦你做到了这一点,你应该能够做到:
vcgencmd otp_dump | grep 17:
如果第17行包含3020000a,则OTP已正确编程。现在,您应该能取下TF卡,插入网线,然后在Raspberry Pi通电后约5秒,以太网LED应该会亮起。
要捕获服务器上的以太网数据包,请在tftpboot服务器(或DHCP服务器,如果它们不同)上使用tcpdump。您需要在那里捕获数据包,否则您将无法看到直接发送的数据包,因为网络交换机不是集线器!
sudo tcpdump-i eth0-w dump.pcap
这将把从eth0到名为dump.pcap的文件中的所有内容写入。然后,您可以将数据包进行后处理或上传到cloudshark进行通信。
作为最低要求,您应该看到一个DHCP请求和回复,如下所示:
Vendor-Option Option 43包含回复的重要部分。这必须包含字符串“Raspberry Pi Boot”。由于启动ROM中的错误,您可能需要在字符串末尾添加三个空格。
正确指定Vendor选项后,您将看到随后发送的TFTP RRQ数据包。RRQ可以通过第一个数据块或表示找不到文件的错误来回复。在某些情况下,它们甚至会收到第一个数据包,然后Raspberry Pi会中止传输(这是在检查文件是否存在时发生的)。下面的例子只是三个数据包:原始读取请求、第一个数据块(它总是516个字节,包含一个报头和512个字节的数据,尽管最后一个数据块总是小于512个字节,长度可能为零)和第三个数据包包含一个与数据块中的帧号匹配的帧号的ACK。
以太网启动模式存在许多已知问题。由于引导模式的实现在芯片本身中,因此除了使用仅包含bootcode.bin文件的SD卡外,没有其他解决方法。
*DHCP请求在五次尝试后超时
Raspberry Pi将尝试五次DHCP请求,中间间隔五秒,总时长为25秒。如果服务器在此时间内无法响应,则Raspberry Pi将进入低功耗状态。除了SD卡上的bootcode.bin之外,没有其他解决方法。
*不支持单独子网上的TFTP服务器
修复了Raspberry Pi 3 B+(BCM2837B0)中的问题。
*DHCP中继中断
DHCP检查还检查了跃点数是否为1.而DHCP中继则不会。
修复了Raspberry Pi 3 B+型号的问题。
*Raspberry Pi启动字符串
由于计算字符串长度时出错,DHCP回复中的“Raspberry Pi Boot”字符串需要额外的三个空格。
修复了Raspberry Pi 3 B+型号的问题。
*DHCP UUID常量
DHCP UUID设置为常数值。
修复了Raspberry Pi 3 B+型号的问题;该值被设置为32位序列号。
*ARP检查可能在TFTP事务的中间无法响应
Raspberry Pi只有在初始化阶段才会响应ARP请求;一旦开始传输数据,它将无法继续响应。
修复了Raspberry Pi 3 B+型号的问题。
*DHCP请求/应答/ack序列未正确实现
在启动时,Raspberry Pi会广播DHCPDISCOVER数据包。DHCP服务器用DHCPOFFER数据包进行回复。然后,Raspberry Pi继续启动,而不进行DHCPREQUEST或等待DHCPACK。这可能会导致两个单独的设备被提供相同的IP地址,并在没有正确分配给客户端的情况下使用它。
在这种情况下,不同的DHCP服务器具有不同的行为。dnsmasq(取决于设置)将散列MAC地址以确定IP地址,并ping IP地址以确保它尚未被使用。这降低了发生这种情况的可能性,因为它需要哈希中的冲突。
注:GPIO引导模式仅适用于Raspberry Pi 3A+、3B、3B+、计算模块3和3+。
早期的Raspberry Pi可以配置为允许在通电时使用连接到GPIO来选择启动模式。这是通过在SoC的OTP存储器中设置位来实现的。一旦设置了位,它们就会永久分配5个GPIO来允许进行此选择。一旦设置了OTP位,就不能取消设置。您应该仔细考虑是否启用此功能,因为这五条GPIO线将始终控制启动。虽然您可以在Raspberry Pi启动后将GPIO用于其他功能,但您必须对其进行设置,以便在Raspberry Pi启动时启用所需的启动模式。
要启用GPIO引导模式,请在config.txt文件中添加以下行:
program_gpio_bootmode=n
其中n是您要使用的GPIO库。然后重新启动Raspberry Pi一次,使用此设置对OTP进行编程。Bank 1是GPIO 22-26,Bank 2是GPIO 39-43。除非您是计算模块,否则必须使用Bank 1;Bank 2中的GPIO仅在计算模块上可用。由于OTP位的排列方式,如果您首先为Bank 1编程GPIO启动模式,则可以稍后选择Bank 2,反之则不然;一旦选择Bank 2作为GPIO启动模式,您就无法选择Bank 1。
一旦启用GPIO引导模式,树莓派将无法启动。您必须至少拉高一个引导模式的GPIO引脚,树莓派才能启动‌。
上表中的USB同时选择USB设备引导模式和USB主机引导模式。为了使用USB引导模式,必须在OTP存储器中启用它。有关更多信息,请参阅上文中的第9.1和9.2条:USB设备引导和USB主机引导。
后来的树莓派3B(BCM2837B0带金属盖)、3A+、3B+ 和 CM 3+,引脚分配:
注:按照 GPIO 线路的数字顺序尝试各种引导模式,即 先SD0,然后 SD1,然后是 NAND,依此类推。
[tr][/tr]
SD0是Broadcom SD卡/MMC接口。当SoC内的引导ROM运行时,它总是将SD0连接到内置的microSD卡插槽。在配备eMMC设备的计算模块上,SD0与之相连;计算模块Lite SD0可在边缘连接器上使用,并连接到CMIO载板中的microSD卡插槽。SD1是Arasan SD卡/MMC接口,也支持SDIO。所有内置无线局域网的Raspberry Pi型号都使用SD1通过SDIO连接到无线芯片。
GPIO的默认拉电阻为50KΩ,如BCM2835 ARM外设数据表第102页所述。建议使用5KΩ的拉电阻来向上拉GPIO线:这将允许GPIO工作,但不会消耗太多功率。
NVMe(Non-Volatile Memory express,即非易失性存储器快速通道)是通过PCIe总线进行外部存储访问的标准。您可以通过计算模块4(CM4)IO板或Raspberry Pi 5上的PCIe插槽连接NVMe。通过一些额外的配置,您可以从NVMe驱动器启动树莓派。
①、硬件:
NVMe M.2固态硬盘
PCIe转M.2转换模块
0 o" A5 N1 j$ v
- 对于Raspberry Pi 5 我们建议使用M.2 HAT+,它可以从Raspberry Pi的PCIe FFC插槽转换为M Key接口。
- 对于CM4.搜索“PCI-E 3.0×1通道到M.2 NGFF M-Key SSD NVMe PCI Express适配器卡”
要检查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月推出。您需要自该日期起发布的以下软件的版本:
bootloader
Video Core固件
Raspberry Pi OS Linux内核
最新的Raspberry Pi OS版本具备您所需的一切。使用Raspberry Pi Imager将Raspberry PiOS镜像安装到您的存储器上。
对于Raspberry Pi 5,您需要先启动它来编辑启动顺序。在此步骤中,您可以从SD卡或USB驱动器启动树莓派。即使更改了启动设备,EEPROM配置也会不变,因为EEPROM配置存储在树莓派板子上。
使用Raspberry Pi配置CLI更新bootloader:
sudo raspi-config
在“高级选项 Advanced Options ”>“引导加载程序版本 Bootloader Version”下,选择“最新 Latest”。然后,使用Finish或Esc键退出raspi-cofing。
运行以下命令将固件更新到最新版本:
sudo rpi-eeprom-update -a
然后,使用sudo reboot 重新启动。您的Raspberry Pi 5就应该能从NVMe启动。
对于CM4,使用rpiboot更新bootloader。构建rpiboot和配置IO板,以使ROM切换到usbboot模式的说明,您可以在 USB启动GitHub 中找到。 对于带有eMMC的CM4版本,请确保在引导顺序中首先设置了NVMe。记得在recovery/boot.conf中将NVMe引导模式6添加到boot_ORDER。
当SD卡插槽为空时,CM4 Lite会自动从NVMe启动。
EEPROM配置中的BOOT_ORDER设置控制启动行为。对于NVMe引导,请使用引导模式6,有关更多信息,请参阅Raspberry Pi bootloader 配置。
以下是bootloader检测到NVMe驱动器时UART输出的示例:
然后它将找到一个 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,“namespace”显示为/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 /
5 A# H! Z7 R& w