【linux 系统移植①】Raspberry Pi 4B 引导过程、官方文档、bootloader、配置文件_树莓派4引导-程序员宅基地

技术标签: 运维  学习杂记  linux  服务器  

  • 树莓派结构图
  • 启动过程
  • EEPROM 在哪里?里面有什么?
  • EEPROM 的操作
  • USB 启动设置过程
  • USB 引导实现,uboot 启动可能需要
  • EEPRROM 刷新的两种方式
  • 引导顺序问题?安装的 ubuntu 不是 mate 版本?
  • 初始化包中的 pieeprom.binbootloader update image 问题?

在这里插入图片描述

在这里插入图片描述
树莓派4B cache 和 bank bit 信息
在这里插入图片描述

https://raspberrypi.stackexchange.com/questions/120798/where-is-eeprom-in-pi4/120825#120825

在这里插入图片描述

请添加图片描述
在这里插入图片描述

1. 树莓派 4B 启动流程

https://blog.csdn.net/qq_22182835/article/details/107568140

https://blog.csdn.net/wazh012/article/details/109194700

https://www.it610.com/article/1279233830019940352.htm

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/bootflow_2711.md

树莓派的 SoC 内部集成了ARM CPU,GPU,ROM,SDRAM…

在这里插入图片描述

  1. first-stage bootloader:BCM2711 SoC 上电,GPU(VideoCore)执行保存在 ROM 中的代码(固化在硬件内部)(config.txt),挂载 SD 卡上的 FAT32 分区,检查 SD 卡上的引导程序恢复文件(recovery.bin),如果找到,它将执行以刷新 EEPROM,recovery.bin 将会对 EEPROM 复位,否则,从 EEPROM 加载引导程序(bootloader ,如果 Pi 4 中 SD 卡的启动分区中存在 bootcode.bin,则将其忽略。)到 GPU 的 128KB 大小的 L2Cache 中,执行。EEPROM 中存在 BOOT_ORDER 选项,该选项确定了执行的引导类型(SD Card Boot、NetWork Boot、USB mass storage Boot)。

    4B 启动不需要 SD 卡中的 bootcode.bin,4B 在芯片内部增加了一块 EEPROM 来规避风险(由于 4B 硬件升级,导致启动过程较为复杂,如果将代码都写到 ROM 中,会增加复杂度以及引入可能的 BUG),4B 上电运行 SPI 连接的 EEPROM 中的 bootloader 代码。

  2. second-stage bootloader:主要是 bootloader ,对应低版本的 bootcode.binbootloader 的工作是进行一些基本设置(初始化 RAM 等)、将 start4.elf(位于 SD 卡的第一分区)加载到 Soc 中。

  3. third-stage bootloader:主要是 start4.elf(GPU 固件)。其划分 RAM 空间为两部分:CPU 访问空间和 GPU 访问空间、从第一个分区中加载 config.txt 和 cmdline.txt、kernel.img、ramdisk、dtb 加载到内存的预定地址、向 CPU 发送启动信号以执行 kernel 代码。

  4. 内核启动阶段。树莓派4 默认使用 kernel7l.img 启动(32-bit),kernel8.img(64-bit)。内核启动部分主要就是做系统的引导,外围器件的驱动,内存管理,进程管理,网络协议栈的建立等工作,最后启动虚拟文件系统,启动用户进程。

启动操作系统后,GPU 代码没有被卸载。事实上,start.elf 不仅仅是 GPU 的固件,它还是一个专有的操作系统,叫做 VideoCore OS。当普通 OS (Linux) 需要一个不能直接访问的元素时,Linux 使用邮箱消息系统与 VCOS 通信。

https://blog.csdn.net/ZhaoDongyu_AK47/article/details/103932245

在这里插入图片描述

2. 引导文件目录

https://www.raspberrypi.org/documentation/configuration/boot_folder.md

  1. 引导文件存储在SD卡的第一个分区中,该分区使用 FAT 文件系统格式化。
  2. 当 Raspberry Pi 通电时,它将从启动分区中加载各种文件以启动各种处理器,然后引导 Linux 内核。
  3. Linux 启动后,启动分区将挂载为 /boot。

bootcode.bin

这是引导加载程序,由 SoC 在引导时加载,它进行一些非常基本的设置,然后加载 start*.elf 文件之一。 Raspberry Pi 4 上不使用 bootcode.bin,因为它已由板载 EEPROM 中的启动代码(bootloader ?)替换。

start.elf, start_x.elf, start_db.elf, start_cd.elf, start4.elf, start4x.elf, start4cd.elf, start4db.elf

由 VideoCore(GPU) 执行这些已经被加载到 Soc 的文件,执行接下来的启动过程。

start.elf 是基本固件,start_x.elf包括摄像头驱动程序和编解码器,start_db.elf 是固件的调试版本,start_cd.elf 是精简版,不支持编解码器和3D等硬件模块,并且 在 config.txt 中指定 gpu_mem = 16时使用。

fixup.dat*

这些是链接器文件,与 start*.elf 文件匹配。

cmdline

引导时,内核命令行会传递到内核。

dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc quiet splash

config.txt

https://www.raspberrypi.org/documentation/configuration/config-txt/

https://www.raspberrypi.org/documentation/configuration/config-txt/boot.md

引导过程读取的配置文件。通常使用 BIOS 编辑和存储的系统配置参数,在树莓派上存储在名为 config.txt 的可选文本中。在初始化 ARM CPU 之前,GPU 会读取它,与 bootcode.bin、start4.elf 一起位于SD 卡第一分区,如果在启动分区上没有该文件,那么只需要新建该文件即可。

格式为:property=value,value 是整数或字符串,# 可以添加注释。

可以使用 config.txt 文件设置一系列的参数,分为以下几个部分:

在这里插入图片描述

# Force the monitor to HDMI mode so that sound will be sent over HDMI cable
hdmi_drive=2
# Set monitor mode to DMT
hdmi_group=2
# Set monitor resolution to 1024x768 XGA 60Hz (HDMI_DMT_XGA_60)
hdmi_mode=16
# Make display smaller to stop text spilling off the screen
overscan_left=20
overscan_right=12
overscan_top=10
overscan_bottom=10

issue.txt

Some text-based housekeeping information containing the date and git commit ID of the distribution.

ssh or ssh.txt

如果存在此文件,则将在启动时启用 SSH。内容无关紧要,可以为空。否则默认情况下禁用 SSH。

wpa_supplicant.conf

这是用于配置无线网络设置的文件(如果硬件具备此功能)。

Device Tree files

Kernel Files

在这里插入图片描述

3. config.txt 中关于引导过程的参数

https://www.raspberrypi.org/documentation/configuration/config-txt/boot.md

start_file, fixup_file, start_x, start_debug

这些选项制定了在引导之前传输到 VideoCore GPU 的文件。

start_file 指定要使用的 VideoCore 固件文件。 fixup_file 指定用于修复 start_file 中使用的内存位置以匹配 GPU 内存拆分的文件。 请注意,start_file和 fixup_file 是一对匹配的文件,使用不匹配的文件将阻止开发板启动。建议使用 start_x 和 start_debug。

start_x=1 意味着,start_file=start_x.elf fixup_file=fixup_x.dat

在树莓派 4 中,如果 start4x.elffixup4x.dat 存在,那么将会使用这两个文件替代默认的选项。

On the Pi 4, if the files start4x.elf and fixup4x.dat are present, these files will be used instead.

start_debug=1 意味着 start_file=start_db.elf fixup_file=fixup_db.dat

Pi 4 没有特定的处理方式,如果希望使用 Pi 4 调试固件文件,需要手动指定 start_file 和 fixup_file。

start_x=1 意味着摄像头模块可以使用。

disable_commandline_tags

disable_commandline_tags=1 意味着在启动内核之前阻止 start.elf 填充 ATAGS。

Set the disable_commandline_tags command to 1 to stop start.elf from filling in ATAGS (memory from 0x100) before launching the kernel.

cmdline

cmdline=cmdline.txt # the Linux kernel command line

cmdline 是引导分区上从中读取内核命令行字符串的备用文件名,默认值为 cmdline.txt,通过该文件中的命令,向内核发送命令。

kernel

kernel=vmlinuz # the Linux kernel

kernel 是引导分区上加载内核时使用的备用文件名,Pi 4 默认值为 kernel7l.img。(kernel7l.img 为32位 arm 架构,kernel8.img 为 64 位系统)

https://blog.csdn.net/wazh012/article/details/109194700

arm_64bit

如果非零,强制加载 64 位内核,以 64 位模式启动处理器,并将 kernel8.img 设置为加载的内核映像,除非显式定义了其它内核镜像。

在所有平台上默认为 0。

64 位内核必须是未压缩的映像文件。

armstub

armtub 是引导分区上的文件名,从该文件名可以加载 ARM stub。 默认的 ARM stub 存储在固件中,并且会根据 Pi 型号和各种设置自动选择。

stub 是在内核之前运行的一小段 ARM 代码。 它的工作是在将控制权传递给内核之前,设置诸如中断控制器之类的底层硬件。

arm_peri_high

arm_peri_high=1 将会在 Pi 4 上启用 “High Peripheral” 模式,如果加载了合适的 DTB,则会自动设置。

kernel_address

内核映像应加载到的内存地址。默认情况下,将 32 位内核加载到地址 0x8000,将 64 位内核加载到地址 0x80000。 如果设置 kernel_old,则将内核加载到地址 0x0。

kernel_old

将 kernel_old 设置为 1 可将内核加载到内存地址 0x0。

bootcode_delay

bootcode_delay 命令在加载 start.elf 之前会在 bootcode.bin 中延迟给定的秒数:默认值为0。

boot_delay

boot_delay 命令指示在加载内核之前要在 start.elf 中等待给定的秒数:默认值为 1。以毫秒为单位的总延迟计算为(1000 x boot_delay)+ boot_delay_ms。 如果 SD 卡需要一段时间才能准备好才能从 Linux 引导,这将很有用。

enable_gic (Pi 4B only)

enable_gic =0:中断使用旧式中断控制器,而不是通过 GIC-400 路由到 ARM 内核,预设值是 1。

On the Raspberry Pi 4B, if this value is set to 0 then the interrupts will be routed to the ARM cores using the legacy interrupt controller, rather than via the GIC-400. The default value is 1.

force_eeprom_read

force_eeprom_read=0:防止固件在加电时尝试读取 I2C HAT EEPROM(连接到 ID_SD 和 ID_SC 引脚)

disable_splash

ramfsaddr

initramfs

init_uart_baud

force_eeprom_read

init_uart_clock

os_prefix

overlay_prefix

uart_2ndstage

upstream_kernel

4. Raspberry Pi 4 bootloader 配置

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md

4.1 查看并修改 EEPROM 中配置的方法

在编辑引导加载程序配置之前,请更新系统以获取最新版本的 rpi-eeprom 软件包。

要查看当前的 EEPROM 配置:rpi-eeprom-config

对其进行编辑并更新:sudo -E rpi-eeprom-config --edit

4.2 处于 EEPROM 中的 bootloader 的配置选项

本节介绍了引导加载程序中所有可用的配置项目。语法与 config.txt 相同。

BOOT_UART

BOOT_UART=1:GPIO 14 和 GPIO 15 上启用 UART 调试输出。将接收调试端子配置为 115200bps,8位,无奇偶校验位,1个停止位。

默认为 0。

WAKE_ON_GPIO

WAKE_ON_GPIO=1sudo halt 将以低功耗模式运行,直到 GPIO3 或 GLOBAL_EN 短路接地。

默认值:1(引导加载程序2019-05-10的原始版本为0)

POWER_OFF_ON_HALT

BOOT_ORDER

BOOT_ORDER 允许灵活配置不同引导模式的优先级。32 位无符号整数,其中每个半字节代表一个引导模式(最多定义 8 位数字)。 尝试以最低有效半字节到最高有效半字节顺序进行引导模式。默认 0xf41

在这里插入图片描述

尝试每种非零引导模式后,引导程序将停止。 但是,从 2020-09-03 开始,引导程序将监视 SD 卡检测引脚,如果插入了新的 SD 卡,则尝试 SD 引导。

如果 SD 卡检测引脚指示该卡已插入或更换,则引导模式 0x0 将重试 SD 引导。

RPIBOOT:与 Compute Module 4 一起使用,能够加载自定义调试镜像(eg. Linux RAM-disk),而不是正常启动。

BCM-USB-MSD:允许 Compute Module 4 从 USB 引导,无需额外的 PCle XHCL 卡。此 USB 控制器不支持 USB3.0,较 USB-MSD 要慢。

Compute Module 4 在 rpiboot 引导模式下更新 Bootloader EEPROM

MAX_RESTARTS

如果遇到 RESTART 引导模式超过 MAX_RESTARTS 次,则触发看门狗复位。

默认:-1(无限次)

SD_BOOT_MAX_RETRIES

默认:0。

NET_BOOT_MAX_RETRIES

默认:0。

DHCP_TIMEOUT

TFTP_FILE_TIMEOUT

TFTP_IP

TFTP_PREFIX

TFTP_PREFIX_STR

PXE_OPTION43

DHCP_OPTION97

Static IP address configuration

CLIENT_IP

SUBNET

GATEWAY

MAC_ADDRESS

DISABLE_HDMI

HDMI_DELAY

ENABLE_SELF_UPDATE

使引导加载程序能够从TFTP或USB大容量存储设备(MSD)引导文件系统更新自身。

如果启用了自我更新,则引导加载程序将在引导文件系统中查找更新文件(.sig / .upd)。 如果更新映像与当前映像不同,则应用更新并重置系统。 否则,如果EEPROM映像逐字节相同,则引导将继续正常进行。

默认为:1。

FREEZE_VERSION

以前,此属性仅由rpi-eeprom-update脚本检查。 但是,既然启用了自我更新,引导加载程序还将检查此属性。 如果设置为1,它将覆盖ENABLE_SELF_UPDATE以停止自动更新。 要禁用FREEZE_VERSION,您将必须使用带有recovery.bin的SD卡引导。

Custom EEPROM update scripts must also check this flag.

默认:0。

NETCONSOLE - advanced logging

USB_MSD_EXCLUDE_VID_PID

USB_MSD_DISCOVER_TIMEOUT

USB_MSD_LUN_TIMEOUT

USB_MSD_PWR_OFF_TIME

XHCI_DEBUG

4.3 config.txt 中关于 bootloader 的配置项

boot_load_flags

uart_2ndstage

uart_2ndstage=1,启用调试日志记录到 UART,在较新的固件版本(Raspberry Pi OS 2020-08-20及更高版本)中,也会在 start.elf 中自动启用 UART 日志记录。

eeprom_write_protect

控制是否将引导加载程序和 VLI EEPROM 标记为写保护。

默认为 do nothing。

bootloader_update

可以将此选项设置为 0 以阻止 bootloader 更新,而无需更新 EEPROM 配置。

默认为 1。

5. Advanced boot modes - Network / USB mass storage boot.

对于网络或 USB 启动,我们建议更新到 2020-09-03 版本的 Bootloader 和 Raspberry Pi OS 2020-08-20 或更高版本。

5.1 USB mass storage boot.

SD卡启动后,您必须执行此操作,因为所有Raspberry Pi 4型号均附带了仅可从SD卡启动的EEPROM配置。

Ubuntu MATE 20.10 and newer support USB booting, but Ubuntu MATE 20.04 does not.

https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#4-optional-usb-boot

https://ubuntu-mate.org/ports/raspberry-pi/

使用装有 Ubuntu MATE 20.10 的 SD 卡启动树莓派(其他版本不一定支持 USB booting)

  1.  # 安装最新版本的 EEPROM
     sudo apt install rpi-eeprom
    
  2.  # 将当前配置文件提取出来
     sudo vcgencmd bootloader_config > bootconf.txt
    
  3.  # 将BOOT_ORDER选项设置为0xf41(意味着尝试SD卡,然后尝试USB大容量存储设备,然后重启)
     sed -i -e '/^BOOT_ORDER=/ s/=.*$/=0xf41/' bootconf.txt
    
  4.  # 现在,我们使用更新配置生成EEPROM的副本:
     rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2020-09-03.bin
    
  5.  # 将系统设置为在下次启动时刷新新的EEPROM固件
     sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
    
  6.  # 重启
     sudo reboot
    
  7. 将 USB 硬盘/U盘制作为系统盘,使用 Pi Imager 将 Pi OS 写入存储设备中,将之前 SD 卡系统中 /boot 分区下的所有 .dat.elf 文件复制到新的 USB 硬盘/U盘的 /boot 分区中。

  8. 关机,移除 SD 卡,插上 USB 设备,启动。

下载 Pi Imager 工具:Download the Raspberry Pi Imager(Install Raspberry Pi OS using Raspberry Pi Imager)

除了进系统使用 rpi-eeprom 刷新以外,还可以使用卡刷(卡刷不仅能够很方便地更新 EEPROM 还能够恢复 EEPROM 出厂设置)。
到 https://github.com/raspberrypi/rpi-eeprom/releases 下载最新的发布版 rpi-boot-eeprom-recovery-xxxx.zip,然后解压到一张 FAT32 格式的空 SD 卡中,注意,直接解压 pieeprom.binpieeprom.sigrecovery.bin 等文件到根目录下不能带文件夹,插卡上电,绿色 LED 快速闪烁,至少等待 10S 后 eeprom 就刷好了。卡刷的方法更简单,推荐使用。

https://blog.csdn.net/nanhantianyi/article/details/106542616

当搜索可引导分区时,引导加载程序会并行扫描所有 USB 设备,并将选择第一个进行响应。 如果引导分区不包含合适的 start.elf 文件,则选择下一个可用设备。

存在问题:将 SD 卡和 USB 均插入时,会从 USB 引导

解决方案:安装 Ubuntu MATE 20.10 版本,刷新 EEPROM。

5.2 Network boot server configuration.

6. Raspberry Pi 4 boot EEPROM

https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md

Raspberry Pi 4 具有一个 SPI(接口协议) 连接的 EEPROM(4MBits / 512KB),其中包含用于启动系统的代码,并替换了先前在 SD 卡的启动分区中找到的 bootcode.bin。 请注意,如果 Pi 4 中 SD 卡的启动分区中存在 bootcode.bin,则将引导分区下的该文件忽略。

6.1 引导诊断

如果在引导过程中发生错误, 较新版本的引导程序将显示诊断消息,该消息将同时显示在两个 HDMI 显示屏上。

6.2 更新 bootloader

6.2.1 Compute Module 4

Compute Module 4 在 rpiboot 引导模式下更新 Bootloader EEPROM,此操作也会刷新 EMMC。

Bootloader EEPROM updates on Compute Module 4 require rpiboot which is also used for flashing the EMMC. Please see the Compute Module flashing guide for instructions.

6.3 更新 EEPROM 中的配置

# 具体执行
jiamingpi@jiamingpi-desktop:~$ sudo rpi-eeprom-config
usage: rpi-eeprom-config [-h] [--config CONFIG] [--out OUT] eeprom
rpi-eeprom-config: error: the following arguments are required: eeprom
jiamingpi@jiamingpi-desktop:~$ sudo -E rpi-eeprom-config --edit
usage: rpi-eeprom-config [-h] [--config CONFIG] [--out OUT] eeprom
rpi-eeprom-config: error: the following arguments are required: eeprom

rpi-eeprom-config 工具可用于修改 EEPROM 镜像文件中的嵌入式配置文件。

6.3.1 Reading the current EEPROM configuration

在引导阶段运行:rpi-eeprom-config or vcgencmd bootloader_config

6.3.2 Reading the configuration file from an EEPROM image

rpi-eeprom-config pieeprom.bin

6.3.3 Editing the current bootloader configuration

以下命令将当前 EEPROM 配置加载到文本编辑器中。

sudo -E rpi-eeprom-config --edit
sudo reboot
6.3.4 Applying a saved configuration file

以下命令将 boot.conf 应用于 EEPROM 镜像,并在系统重新引导时使用 rpi-eeprom-update 安排更新。

# 直接使用配置文件替换当前文件,并更新当前配置
sudo rpi-eeprom-config --apply boot.conf
sudo reboot
6.3.5 Updating the configuration in an EEPROM image

以下命令读取 pieeprom.bin 并将配置文件替换为 boot.conf 的内容。结果写入 new.bin

rpi-eeprom-config --config boot.conf --out new.bin pieeprom.bin
6.3.6 Updating the bootloader EEPROM

以下内容将导致下次重新引导系统时对引导加载程序 EEPROM 进行更新。

# -d 表示 rpi-eeprom-update 使用 new.bin 中的 EEPROM 配置,而不是当前通过 vcgencmd 看到的配置
sudo rpi-eeprom-update -d -f new.bin
6.3.7 recovery.bin(恢复出厂设置)

开机时,BCM2711 ROM 在 sd 卡上引导分区的根目录中查找名为 recovery.bin 的文件。 如果找到有效的 recovery.bin,则 ROM 将执行 recovery.bin,而不是 SPI EEPROM 中的 bootloader。 该机制可确保 bootloader 可以被重置。

EEPROM update files(EEPROM 中的内容,有 recovery.bin、pieeprom.bin(EEPROM bootloader image)…)

在这里插入图片描述

  • 如果 pieeprom.upd(哪里指定?)bootloader update image,重命名 recovery.bin(且不执行),重置 CPU,从 SPI EEPROM 中加载最新的 bootloader,实现更新。(有 .upd 意味着不执行 recovery.bin, pieeprom.upd)【ENABLE_SELF_UPDATE=1,自动】

    • If the bootloader update image is called pieeprom.upd then recovery.bin renames itself to recovery.000 and resets the CPU. Since recovery.bin is no longer present the ROM loads the newly updated bootloader from SPI EEPROM and the OS is booted as normal.

在这里插入图片描述

Raspberry Pi 4 EEPROM bootloader rescue image


The Raspberry Pi4 has a small EEPROM used to store the bootloader.

This rescue image reverts the bootloader EEPROM to factory default settings.

This rescue image also updates the USB 3.0 (VL805) firmware to the latest
version (138a1) with better full-speed Isochronous endpoint support.

To re-flash the EEPROM(s)

  1. Unzip the contents of this zip file to a blank FAT formatted SD-SDCARD.
  2. Power off the Raspberry Pi
  3. Insert the sd-card.
  4. Power on Raspberry Pi
  5. Wait at least 10 seconds.

This easiest method for creating and formatting the SD-CARD is to use the
Raspberry Pi Imager from https://raspberrypi.org/downloads

If successful, the green LED light will blink rapidly (forever), otherwise
an error pattern will be displayed.

If a HDMI display is attached then screen will display green for success
or red if failure a failure occurs.

N.B. This image is not a bootloader it simply replaces the on-board bootloader.

  • 如果pieeprom.binbootloader update image,pieeprom.bin+recovery.bin, 结束后, 如果成功,HDMI 输出将变为绿色,并且绿色的 LED 会快速闪烁,否则,HDMI 输出将为红色,并且 LED 将闪烁显示错误代码。(recovery.bin + pieeprom.bin)【ENABLE_SELF_UPDATE=0,手动】

    • If the bootloader update image is called pieeprom.bin the recovery.bin will stop after the update has completed. On success the HDMI output will be green and the green activity LED is flashed rapidly. Otherwise, the HDMI output will be red and an error code will be displayed via the activity LED.
  • .sig 文件仅包含镜像文件的 SHA256 校验码,将来可能会添加其它字段。

  • BCM 2711 ROM 不支持从 USB 端的存储器或 TFTP 加载 recovery.bin,取而代之,EEPROM 则可以,它还能够自我更新以重新刷新 SPI EEPROM。

哪里指定?

EEPROM 配置文件中的 ENABLE_SELF_UPDATE 参数:控制 bootloader 从 TFTP 或 USB 大容量存储设备 (MSD) 引导分区中进行自我更新。

ENABLE_SELF_UPDATE=1(启用自我更新,自动更新):bootloader 将从引导分区中找寻(.sig/.upd),如果有则说明需要将 EEPROM 中的 bootloader 版本更新为 .upd,系统重置。

ENABLE_SELF_UPDATE=0(不启用自我更新,手动更新):在引导分区中找寻 recovery.bin 和 pieeprom.bin 文件,手动更新。

Default: 1 (0 in versions prior to 2020-09-03)

6.3.8 Firmware release status

默认情况下,如果 rpi-eeprom 镜像比当前 bootloader 镜像新,Pi OS 会自动更新 bootloader,bootloader EEPROM 配置会在升级期间升级。

defaultlatestcriticallatest 的符号链接。

6.3.9 Changing the firmware release

你可以通过改变文件 /etc/default/rpi-eeprom-update 中的 FIRMWARE_RELEASE_STATUS 来改变版本。

6.3.10 Disabling automatic updates

控制 EEPROM 更新。

# Disable
sudo systemctl mask rpi-eeprom-update
# Enable is again
sudo systemctl unmask rpi-eeprom-update

EEPROM 中的配置文件 FREEZE_VERSION 选项可以查看是否需要更新。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39541632/article/details/113621216

智能推荐

ssh放行端口_linux系统防火墙开启放行其他端口-程序员宅基地

文章浏览阅读1.9k次。我司弹性云主机默认在外部未对端口进行限制,如果服务运行后端口外部不通,可参考本教程在防火墙放行对应端口。1、WDCP 系统端口放行:(1)3.2版本登录wdcp面板后点击“安全管理”——“防火墙设置”——“快速添加”,如图填写端口(协议默认都使用tcp),保存即可放行。(2)2.5版本登录wdcp后,点击“安全管理”——“防火墙(iptables)”——增加规则如图,一般直接填写需要放行的端口,点..._ssh怎么放行端口

winform listbox控件简单使用。_listbox在form.show应用-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏5次。Winform控件ListBox的用法: 1、如何添加listbox的值:this.listboxname.item.add("xxxx");2、如何判断listbox是否已经添加过:if(this.listboxname.item.Contain("xxxx")){MessageBox.show("已添加过此条信息");}else{//*****}3、获取listbox控件的值:i_listbox在form.show应用

Jquery实现搜索效果,进阶实战篇_jquery实现搜索功能-程序员宅基地

文章浏览阅读1.3k次。首先,我们实现搜索效果的思路一,使用点击事件调用后台api数据参数实现搜索;(1)这个其实是最简单的,因为调取后台api我们需要填参数,(有的不需要填,需要在后台重新写sql语句);而这个参数的值,就是我们输入文本框的内容,然后点击事件触发这个获取api的函数;二,使用jquery显示隐藏效果实现搜索,把我们要搜索的字段显示,而其他的就隐藏;js:代码方法一和二都可以实现搜索效果,但是我们实际运用的需要用第一个方法,因为或许api接口数据,不能把全部数据同时展示,也许我们只获取前二十个,然后剩下的用分_jquery实现搜索功能

Redis进阶知识点(可学习,可复习,可面试)(1),java只背面试题-程序员宅基地

文章浏览阅读876次,点赞25次,收藏10次。先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套

近世代数--域--域的一些例子_主理想<1+i>的元素有那些-程序员宅基地

文章浏览阅读2.5k次。近世代数--域--一般域上的向量空间博主是初学近世代数(群环域),本意是想整理一些较难理解的定理、算法,加深记忆也方便日后查找;如果有错,欢迎指正。我整理成一个系列:近世代数,方便检索。..._主理想<1+i>的元素有那些

fabric2.2.0内部链码安装及调用(生产环境)_fabric 系统链码调用-程序员宅基地

文章浏览阅读1.3k次。生成创世块 (在orderer节点上生成)configtxgen -profile OrgsOrdererGenesis -outputBlock /tmp/hyperledger/org0/orderer/genesis.block -channelID syschannel (系统名)创建通道交易 (在orderer节点上生成) 将mycc.tx文件复制到创建通道的peer节点configtxgen -profile TwoOrgsChannel -outputCreateChannelTx_fabric 系统链码调用

随便推点

【源码】基于MATLAB的短时傅里叶变换STFT_matlab stft底层源代码-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏15次。本代码提供给定信号x[n]的短时傅立叶变换(STFT)的Matlab函数。The present code is a Matlab function that provides a Short-Time Fourier Transform (STFT) of a given signal x[n].该函数是Matlab命令“spectrogram”的替代方案。The function is..._matlab stft底层源代码

Linux technology introduction_linux庐 technology reference-程序员宅基地

文章浏览阅读1k次。Linux is a free to use and the spread of free Unix-like operating systems, based on POSIX and Unix is a multiuser, multitasking, and support multithreading and multiple CPU operating system. With the ..._linux庐 technology reference

2023年03月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试_c语言软件编程等级考试二级2023年03月真题-程序员宅基地

文章浏览阅读573次。请编写一个程序实现以下功能:从一个字符串中,提取出所有的数字字符即0-9,并作为数求和。时间限制:1000内存限制:65536一行字符串,长度不超过100,字符串中不含空格。字符串中所有数字字符作为数的和17你可以将上述代码保存为一个名为 “sum_digits.c” 的文件,并使用C编译器进行编译和运行。在输入字符串后,程序将提取出字符串中的数字字符,并计算它们的和。在主函数中,我们首先读取输入的字符串,并将其存储在str字符数组中。然后,我们调用sumDigits。_c语言软件编程等级考试二级2023年03月真题

WebGL利用缓冲区绘制三角和矩形-程序员宅基地

文章浏览阅读450次。WebGL利用缓冲区绘制三角形

【EI会议征稿】第五届人工智能与机电自动化国际学术会议(AIEA 2024)_2024年电子信息工程与人工智能国际学术会议(eieai2024)-程序员宅基地

文章浏览阅读389次。AIEA 2024会议将每年举行一次,旨在将“人工智能”和“机电自动化”等学术领域的学者、专家、研发者、技术人员聚集到一个学术交流的平台,并且提供一个共享科研成果、前沿技术,了解学术发展趋势,拓宽研究思路,加强学术研究和探讨,促进学术成果产业化合作的平台。所有的投稿都必须经过2-3位组委会专家审稿,经过严格的审稿之后,最终所录用的论文将被EI目录系列期刊出版,出版后提交 EI Compendex, Scopus检索。**注:被录用且完成注册的论文,如需申请撤稿,将扣除30%的手续费;_2024年电子信息工程与人工智能国际学术会议(eieai2024)

微而无界,广而无界-程序员宅基地

文章浏览阅读225次,点赞4次,收藏7次。所以研究了人体,然后去研究组织,研究了组织,然后去研究细胞,研究了细胞然后研究基因,研究了基因,然后学物理化学去了,物理有分子,分子有原子,原子有质子中子,然后有电子,可以预测随着科技进步,不会出现最小的粒子。比如说一个api函数,你只需要怎么用就可以了,不用管是怎么具体实现的,如果每个函数都去搞懂怎么实现的,怕是要先把系统彻底搞懂,我怕系统源码你看不完。比如一台光刻机都是按照亿来计算,大的东西比如火箭,飞机也是按照亿来计算。如果资源不足,钱不够,我们就应该研究不大不小的东西。汽车都还是大了,材料贵。