引言
树莓派4B在2020年中支持了从USB存储设备引导启动,这意味着给树莓派提供了更多的可玩性和更强大的存储性能,毕竟SD卡(TF卡)的读写速度太拉跨了,使用USB引导,我们就可以将系统从SSD或者HDD中启动。
由于部分出厂较早的树莓派是不支持USB引导的,原因并不是硬件不支持,而是EEPROM固件不支持,此时我们需要手动将EEPROM
固件升级到2020-09-03
版本,当然,得益于社区支持,以及树莓派4B目前是Ubuntu认证设备,升级EEPROM固件并不是一个复杂的工作,接下来我将会提供两个升级方式供大家选择。
如果你有一张TF卡,并且已经写入了Ubuntu Server 20.04 (20.10)
系统,我建议你采用方式1,如果手头的SD卡(TF)卡是空卡,则也可以使用方式2,如果是刚接触小板子的萌新,建议选择方式2。
方式1:使用rpi-eeprom
- 安装
rpi-eeprom
,如果已安装,建议先更新一下。
sudo apt install -y rpi-eeprom
- 将当前引导加载程序配置写入到文本。
sudo vcgencmd bootloader_config > bootconf.txt
此时通过cat命令你如果看到如下格式的内容,说明引导配置成功导出了。
root@Raspberry-Pi4:/home# cat bootconf.txt
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
ENABLE_SELF_UPDATE=1
DISABLE_HDMI=0
BOOT_ORDER=0xf41
- 修改引导模式的优先级,通过sed命令,将
BOOT_ORDER
选项的值改为0xf41
,如果你喜欢nano或者vim也可以使用nano和vim对选项进行修改。
sed -i -e '/^BOOT_ORDER=/ s/=.*$/=0xf41/' bootconf.txt
ps:其实2020-09-03
版本的EEPROM
,bootloader
配置默认的BOOT_ORDER
值就是0xf41
,如果走到这一步你发现这个值已经是0xf41了
,可以使用sudo vcgencmd bootloader_version
命令确认下bootloader
版本,如果是2020-09-03
版本则无需再更新EEPROM
了。命令输出的内容大致长下面这个样
root@Raspberry-Pi4:/home# sudo vcgencmd bootloader_version
Sep 3 2020 13:11:43
version c305221a6d7e532693cc7ff57fddfc8649def167 (release)
timestamp 1599135103
update-time 0
capabilities 0x00000000
也可以使用sudo rpi-eeprom-update
命令查看EEPROM
固件版本。
root@Raspberry-Pi4:/home# sudo rpi-eeprom-update
BCM2711 detected
VL805 firmware in bootloader EEPROM
BOOTLOADER: up-to-date
CURRENT: Thu Sep 3 12:11:43 UTC 2020 (1599135103)
LATEST: Thu Sep 3 12:11:43 UTC 2020 (1599135103)
FW DIR: /lib/firmware/raspberrypi/bootloader/default
VL805: up-to-date
CURRENT: 000138a1
LATEST: 000138a1
这里插入点刘同学的碎碎念:这里我来解释下0xf41
是个啥意思,毕竟啃了好大一会英文文档,如果不分享给大家,有点点不太好,哈哈哈。
首先是0xf
前缀,也就是RESTART
模式,他会重复尝试配置的引导顺序,1代表从SD卡启动,4代表从USB存储设备上启动,启动顺序由启动代码从右到左开始尝试,0xf41
意味着会优先尝试从SD卡启动,如果没插卡,或者卡上没有系统则尝试从USB存储设备启动,并且按照这个顺序持续尝试。
附表
Value | Mode | Description |
---|---|---|
0x1 | SD CARD | SD card (or eMMC on Compute Module 4) |
0x2 | NETWORK | Network boot |
0x3 | RPIBOOT | RPIBOOT - See usbboot (since 2020-09-03) |
0x4 | USB-MSD | USB mass storage boot (since 2020-09-03) |
0x5 | BCM-USB-MSD | USB 2.0 boot from USB Type-C socket or USB Type-A socket on CM4 IO board. (since 2020-12-14) |
0xe | STOP | Stop and display error pattern (since 2020-09-03). A power cycle is required to exit this state. |
0xf | RESTART | Start again with the first boot order field. (since 2020-09-03) |
在树莓派基金会官网上,提供了详细的bootloader config文档,如果你有兴趣可以去阅读一下。
- 使用修改后的文本配置生成新的EEPROM副本。
rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2020-09-03.bin
- 配置下次重启时输入新的EEPROM固件。
sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
- 重启以应用更改
sudo reboot
方式2:使用Raspberry Pi Imager
Raspberry Pi Imager 可在树莓派基金会官网获取
- 打开Raspberry Pi Imager,点击CHOOSE OS选择
Misc Utillty images
- 选择2020-9-14版本的EEPROM固件(实际就是2020-09-3版本)
3.选择要写入的存储设备(必须是SD/TF卡),刷入,将卡插入树莓派,给树莓派通电即可,大约60s就能完成刷入,之后断电拔卡就行了。
哪些系统支持直接从USB存储设备启动?
首先Raspberry PI OS 是肯定支持的。
Ubuntu 系列,目前直接确认支持的有Ubuntu Server 20.10
和Ubuntu Desktop 20.10
至于Ubuntu Server 20.04.1
则需要通过一些特殊的方式使其支持,至于这两天要发布的Ubuntu Server 20.04.2
我还没测试过,不过大概率的会支持.
目前兼容的USB适配器有哪些?
James A. Chambers
测试并维护了一个支持列表,里面包含了目前已知工作良好以及无法工作的设备列表,我就不直接放列表了,放了页面地址,大家可以自行查看。