树莓派4B设置USB启动

树莓派4B设置USB启动千呼万唤始出来!官方在2020-05-15发布了一个4B的beta版EEPROM固件更新,这次更新终于增加了期待已久的USB引导功能,今天这个教程就来讲一下如何使用USB而脱离SD卡启动树莓派4B。

大家好,又见面了,我是你们的朋友全栈君。

千呼万唤始出来!官方在2020-05-15发布了一个4B的beta版EEPROM固件更新,这次更新终于增加了期待已久的USB引导功能,今天这个教程就来讲一下如何使用USB而脱离SD卡启动树莓派4B。

数据无价,本教程的操作有一定的风险,开始前请备份重要数据!!!

从零开始构建树莓派64位系统

前言

正式开始之前先说一下为什么4B的USB启动这么姗姗来迟。

要了解这个问题,我们先要了解一下4B之前的版本的启动流程,主要分为四个阶段:

  1. GPU读取芯片上一个ROM的内容并执行
  2. ROM中的程序挂载SD卡并加载第一个FAT分区上的bootcode.bin
  3. bootcode.bin从FAT分区加载start.elf
  4. start.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启动流程的内容可以参考下面两篇文章:

更新eeprom

1、使用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.binpieeprom.sigrecovery.bin等文件到根目录下不能带文件夹,插卡上电,绿色LED快速闪烁,至少等待10S后eeprom就刷好了。卡刷的方法更简单,推荐使用。

准备启动介质

eeprom升级后要配合最新的BootLoader才能实现USB启动,而这个包目前在软件源中还没有更新,只能去github下载,地址:https://github.com/Hexxeh/rpi-firmware,打包下载后待用。

现在开始制作USB启动介质,如果想刷一个全新系统直接把镜像刷到U盘即可,如果想把当前SD卡上的系统迁移到U盘,可以使用这个脚本制作一个最小镜像(具体方法参考这里的后半部分),然后把镜像刷到U盘里。

刷好镜像,把U盘插到电脑上,解压上面下载的rpi-firmware包,把里面的fixup*.datstar*.elf文件拷贝到U盘覆盖原文件。

把SD卡从pi上取出,插上U盘就可以从U盘启动了。

镜像刷到移动硬盘也是可以的,但是如果硬盘里原来有数据,那么数据将会被清除,想保留硬盘数据又想用硬盘启动树莓派也是有办法的,具体方法看这里

最后放一张多分区移动硬盘启动的图
移动硬盘启动

南寒天一的博客

本文为原创文章,转载请联系博主获得授权。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144801.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 360奇安信天擎卸载不干净_强力卸载奇安信

    360奇安信天擎卸载不干净_强力卸载奇安信人狠话不多,直接上教程!找到软件安装目录下的EntBase.dat文件,比如我的位置是D:\QAX\360Safe\EntClient\conf\EntBase.dat。打开如下:[base]persistent_connetion=closeshow_tip=1net_env=4communication_interval=300[api_frequency]checkupdate=60get_client_tasks=60getconf=60svr_init_info=180u

  • 百度文库免费下载文档代码

    $(".aside").remove();$("#doc#hd").remove();$(".crubms-wrap").remove();$(".user-bar").remove();$("#doc-header").remove();$(".reader-tools-bar-wrap").remove();$(".fix-searchbar-wra

  • Latex插入图片却不显示问题小结

    Latex插入图片却不显示问题小结1、首先检查有没有导入宏包\usepackage{graphicx}2、检查图片路径有无问题3、可以尝试将Tex的同名文件删除,重新编译生成4、若是文章分栏\begin{multicols}{2}那是因为multicols环境不能识别figure环境,重新定义一个环境即可\newenvironment{figurehere}{\def\@captype{figure}}{}\makeatother%用于连接公式编号在文中,用figureher

  • Arduino单片机控制步进电机

    Arduino单片机控制步进电机步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长)。通过控制脉冲个数来控制角位移量,达到准确定位的目的;通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的。下面是连接图,右上角是Arduino与驱动器的连线,VCC、脉冲、方向、使能是单片机提供的4个引脚,字面意思是对于驱动器而言,与Ar…

  • torch.meshgrid()函数解析

    torch.meshgrid()函数解析torch.meshgrid()函数解析torch.meshgrid()的功能是生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。其中第一个输出张量填充第一个输入张量中的元素,各行元素相同;第二个输出张量填充第二个输入张量中的元素各列元素相同。#【1】importtorcha=torch.tensor([1,…

  • mysql和sql server一样吗_sql视图和查询的区别

    mysql和sql server一样吗_sql视图和查询的区别导读:接下来的网上商城的项目,需要用到MySQL数据库了。这个对于我来说,是一个新接触的东西,按照惯例,在刚开始学习一个东西的时候,先从宏观上去了解它。本篇博客,先介绍SQLServer的基本内容,然后介绍MySQL的基本内容,最后介绍两者之间的区别。一、SQLServer基本简介1.1,概述SQLServer是Microsoft公司推出的关系型数据库管理系统。具有使

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号