Kevin's Blog - 2020年5月
type: channel
link: https://blog.linuxer.top/2020/05/
description: Talk is cheap. Show me the code.
items: 基地2.0系统USB启动
items: 树莓派4B设置USB启动

基地2.0系统USB启动
type: item
date: 2020-05-31T16:56:00+08:00
description: 上一篇文章介绍了官方系统设置USB启动的方法，这篇文章讲一下树莓派爱好者基地2.0系统设置USB启动的方法，使用镜像为无桌面增强版(2019-12-30-OPENFANS-Debian-Buster-Aarch64-ext4-v2019-2.0-U2-Release-plus++)。其实主要区别就在更新eeprom这一步，后面USB启动介质的制作是没有区别的。如果你只有一张卡，或者不想再刷个官方系统，那么可以参考这篇文章。数据无价，本教程的操作有一定的风险，开始前请备份重要数据！！！基地2.0系统做的非常完善，已经添加了rpi-eeprom的支持，但是由于版本太老，并不能使用最新的固件，所有我们要借助官方的rpi-eeprom项目来获取最新固件。整个过程都需要root权限，如果你是用pi用户登录的，先执行sudo -i切换到root用户。#卸载旧版rpi-eeprom apt remove rpi-eeprom rpi-eeprom-images #clone最新版本到本地 git clone https://github.com/raspberrypi/rpi-eeprom /usr/local/rpi-eeprom #将eeprom版本设置为beta版 echo 'FIRMWARE_RELEASE_STATUS="beta"' > /etc/default/rpi-eeprom-update执行完上述操作后，将/usr/local/rpi-eeprom和/usr/local/rpi-eeprom/firmware加入到PATH中，操作如下，编辑文件/etc/profile，在文件最后添加如下内容:export PATH=/usr/local/rpi-eeprom:/usr/local/rpi-eeprom/firmware:$PATH保存文件后执行下列语句使PATH生效source /etc/profile现在可以升级eeprom了。如果想用固件的默认配置直接执行rpi-eeprom-update -d -a，然后重启完成升级。如果想修改eeprom的参数配置，请参考这里。如果官方发布了新的固件，更新固件的方法为：#打开项目地址 cd /usr/local/rpi-eeprom #拉最新代码 git pull #升级固件 rpi-eeprom-update -d -aeeprom升级完成，下面讲一下如何把SD卡里的系统迁移到USB设备。执行sudo -i切换到root用户制作SD卡最小镜像：git clone https://github.com/nanhantianyi/rpi-backup cd rpi-backup/ #根据实际情况选择镜像的保存位置(具体参考README.md文件) #我这里备份到我的U盘中，挂载路径为/media ./back.sh /media/rpi-back.img上面的命令会给当前系统做一个备份并生成一个镜像，名字为rpi-back.img，这会花费一定时间，具体时间取决于你系统的已用的空间，耐心等待一会。备份成功后将rpi-back.img文件拷贝到电脑，用软件把镜像烧到U盘中，如果不想迁移SD卡数据，可以忽略备份这个步骤，直接将2.0系统镜像刷到U盘中，不管是刷备份镜像还是直接刷系统镜像，都要替换BootLoader，地址：https://github.com/Hexxeh/rpi-firmware,下载zip包，解压后把里面的fixup*.dat和star*.elf文件拷贝到U盘覆盖原文件。好了，现在取出SD卡，插上U盘，加电，USB启动成功。如果是刷的备份镜像，还需要手动扩容一下#切换到root sudo -i #扩容rootfs resize.root好了，USB启动成功！本文为原创文章，版权归 Kevin's Blog 所有，转载请联系博主获得授权。

树莓派4B设置USB启动
type: item
date: 2020-05-26T20:13:00+08:00
description: 千呼万唤始出来！官方在2020-05-15发布了一个4B的beta版EEPROM固件更新，这次更新终于增加了期待已久的USB引导功能，今天这个教程就来讲一下如何使用USB而脱离SD卡启动树莓派4B。数据无价，本教程的操作有一定的风险，开始前请备份重要数据！！！前言正式开始之前先说一下为什么4B的USB启动这么姗姗来迟。要了解这个问题，我们先要了解一下4B之前的版本的启动流程，主要分为四个阶段：GPU读取芯片上一个ROM的内容并执行ROM中的程序挂载SD卡并加载第一个FAT分区上的bootcode.binbootcode.bin从FAT分区加载start.elfstart.elf从FAT分区加载kernel.img，然后唤醒CPU,CPU开始执行kernel.img从这个流程中可以看到，第一阶段的BootLoader是从芯片上的ROM中读取的，ROM里的代码是出厂定制好的后期不能再改变。然而随着4B的硬件升级，USB被移到了PCIe总线，网卡也用了新的型号，再加上4B启动过程和SDRAM的设置远比之前的型号要复杂的多，继续使用集成在SoC ROM中的代码是有很大风险的，所以4B增加了一块EEPROM来解决这个问题，启动程序写入到EEPROM中来取代bootcode.bin的工作，启动程序的bug修复和新功能添加都方便了很多。启动机制改动还是挺大的，所以USB启动姗姗来迟还是可以理解的。关于EEPROM和4B启动流程的内容可以参考下面两篇文章：pi4 eeprompi4 bootflow更新eeprom1、使用rpi-eeprom更新最新的官方系统里已经集成了rpi-eeprom包来升级eeprom，官方github上有这个项目的源码，如果不是官方系统可以clone此项目来升级eeprom，项目地址是：https://github.com/raspberrypi/rpi-eeprom，里面包含升级脚本和固件。三方系统(例如树莓派爱好者基地2.0系统)升级方法请看这里，这篇文章介绍官方系统的升级方法：整个升级过程都需要root权限，如果你是用pi用户登录的，先执行sudo -i切换到root用户。#升级系统软件包 apt update apt upgrade然后编辑/etc/default/rpi-eeprom-update文件，把内容改为FIRMWARE_RELEASE_STATUS="beta"如果想用固件的默认配置直接执行rpi-eeprom-update -d -a，然后重启完成升级。如果想修改eeprom的参数配置，请参考这里。重启后进入系统验证一下eeprom固件版本，执行rpi-eeprom-update，如果BOOTLOADER的版本在2020-05-15及以上就可以USB启动了。2、卡刷更新除了进系统使用rpi-eeprom刷新以外，还可以使用卡刷。到https://github.com/raspberrypi/rpi-eeprom/releases下载最新的发布版rpi-boot-eeprom-recovery-xxxx.zip，然后解压到一张FAT32格式的空SD卡中，注意，直接解压pieeprom.bin、pieeprom.sig、recovery.bin等全部文件到根目录下不能带文件夹，插卡上电，绿色LED快速闪烁，至少等待10S后eeprom就刷好了。卡刷的方法更简单，推荐使用。准备启动介质eeprom升级后要配合最新的BootLoader才能实现USB启动，而这个包目前在软件源中还没有更新，只能去github下载，地址：https://github.com/Hexxeh/rpi-firmware，打包下载后待用。现在开始制作USB启动介质，如果想刷一个全新系统直接把镜像刷到U盘即可，如果想把当前SD卡上的系统迁移到U盘，可以使用这个脚本制作一个最小镜像(具体方法参考这里的后半部分)，然后把镜像刷到U盘里。刷好镜像，把U盘插到电脑上，解压上面下载的rpi-firmware包，把里面的fixup*.dat和star*.elf文件拷贝到U盘覆盖原文件。把SD卡从pi上取出，插上U盘就可以从U盘启动了。镜像刷到移动硬盘也是可以的，但是如果硬盘里原来有数据，那么数据将会被清除，想保留硬盘数据又想用硬盘启动树莓派也是有办法的，具体方法看这里。最后放一张多分区移动硬盘启动的图本文为原创文章，版权归 Kevin's Blog 所有，转载请联系博主获得授权。