zoukankan      html  css  js  c++  java
  • 树莓派4可以不用SD卡启动

    树莓派4可以不用SD卡启动?

    TOC

    1.说明

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

    也就是说,树莓派4的启动方式可以从SPI的EEPROM启动了。关于为什么需要这个EEPROM官方的说法是:

    1.与以前的Raspberry Pi型号相比,Raspberry Pi 4的启动过程和SDRAM的设置要复杂得多,因此,永久包含在SoC ROM中的代码固有的风险更大。

    2.USB已移至PCIe总线,千兆位以太网驱动程序与以前的型号完全不同,因此,再次将其永久固定在SoC的ROM中是不可行的。

    3.小容量SPI EEPROM允许在现场修复错误并在启动后添加功能。

    4.本地可修改状态意味着Raspberry Pi 4上的网络或USB大容量存储启动不需要OTP引导模式设置。Pi4上没有用户可修改的OTP引导模式位。

    本文就讲述一下如何设置树莓派启动,而改为网络启动的方式(TFTP),目前树莓派U盘启动方式还不完善。虽然不用SD卡启动,但是操作EEPROM的时候,还是要借助SD卡进行启动Linux,然后将启动固件写入到eeprom中。下面来详细说明一下这个过程。

    2.什么是PXE启动

    PXE是用来通过网络引导系统的。也就是系统通过网络进行启动,这样就不用硬盘,从服务器中获取系统镜像。

    当安装大量设备系统的时候,如果有了PXE启动,那么就可以大大加快系统的安装的速度。

    上面就是基本的一个PXE启动的流程。

    3.树莓派4设置PXE启动

    树莓派4上有EEPROM,可以将启动固件放到EEPROM中。但是不幸的是,操作树莓派自带的EEPROM需要树莓派的系统,也就是必须最开始的时候,需要制作启动树莓派4的SD卡镜像,然后通过SD卡启动Linux后,修改EEPROM中的内容。

    关于如何制作树莓派SD卡镜像,可以参考我下面的文章:

    三个前提条件:

    1.登录控制台(用户名:pi,密码:raspberry)

    2.树莓派要能够连接网络

    3.可以安装配置rpi-config程序

    3.1 安装rpi-eeprom

    rpi-eeprom是在树莓派固件中操作树莓派4的eeprom的程序,通过下面的命令进行安装。

    sudo apt-get update
    sudo apt-get full-upgrade
    sudo apt-get install rpi-eeprom

    以上操作如果下载比较慢可以更换国内的源进行:

    修改sources.list文件

    sudo vim /etc/apt/sources.list

    用#注释掉之前的源,然后新增

    deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
    deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib

    接着修改raspi.list

    sudo vim /etc/apt/sources.list.d/raspi.list

    同样注释掉之前的源

    修改如下:

    deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

    修改完成就OK了。

    安装完成,检测一下eeprom现有的配置。

    vcgencmd bootloader_config

    可以见到如下信息

    以上的信息是我以及配置好了的,最开始的信息可能不是这个。但是没关系,接下来教你设置。

    第一步:提取配置文件

    cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-01-17.bin pieeprom.bin
    rpi-eeprom-config pieeprom.bin > bootconf.txt

    将配置文件进行拷贝,并且放到指定的目录。pieeprom.bin就是配置文件,然后导出成txt文件。该文件的作用与之前树莓派SD卡中的config.txt类似。

    第二步:设置bootconf.txt中的内容

    我配置的内容如下:

    [all]
    BOOT_UART=1
    WAKE_ON_GPIO=1
    POWER_OFF_ON_HALT=0
    DHCP_TIMEOUT=45000
    DHCP_REQ_TIMEOUT=4000
    TFTP_FILE_TIMEOUT=30000
    TFTP_IP=192.168.12.194
    TFTP_PREFIX=1
    BOOT_ORDER=0x21
    SD_BOOT_MAX_RETRIES=3
    NET_BOOT_MAX_RETRIES=5
    TFTP_PREFIX_STR=raspi4/
    [none]
    FREEZE_VERSION=0

    后面会解释一下其中的内容。

    第三步:将配置写回pieeprom.bin文件中

    rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt pieeprom.bin

    这一步用于将配置文件写回。

    第四步:将pieeprom.bin烧录到eeprom中

    sudo rpi-eeprom-update -d -f ./pieeprom-new.bin

    看到如下输出信息即可

    此时将SD卡取出,就可以看到系统从eeprom起来。

    4.关键配置参数说明

    BOOT_UART【关注】

    如果设置为1,表示使能GPIO 14和 15的输出,也就是我们可以连接串口打开信息。其串口参数为波特率115200,8位,无奇偶校验位,1位的停止位。

    对于有串口调试助手的,建议用硬件串口输出信息,所以该位设置为1。

    WAKE_ON_GPIO

    如果为1,则“ sudo halt”将以低功耗模式运行,直到GPIO3或GLOBAL_EN短路接地。

    TFTP_PREFIX【关注】

    为了支持每个Pi的唯一TFTP引导目录,引导加载程序会在文件名前面加上设备特定的目录。如果在前缀目录中都找不到start4.elf和start.elf,则清除前缀。在较早的型号上,序列号用作前缀,但是,在Pi4上,不再从序列号生成MAC地址,这使得很难通过检查DHCPDISCOVER数据包在服务器上自动创建tftpboot目录。为此,可以将TFTP_PREFIX定制为MAC地址,固定值或序列号(默认)。

    0 - Use the serial number e.g. "9ffefdef/"
    1 - Use the string specified by TFTP_PREFIX_STR
    2 - Use the MAC address e.g. "DC-A6-32-01-36-C2/" Default: 0

    这里我设置成1,让后设置TFTP_PREFIX_STR路径。

    TFTP_PREFIX_STR【关注】

    当TFTP_PREFIX设置为1的时候,可以设置TFTP_PREFIX_STR的路径。例如

    TFTP_PREFIX_STR=raspi4/

    这是为了告诉树莓派4,到哪个目录下去找启动文件。由于可能有不同的树莓派固件,所以这里会不同。

    TFTP_IP

    设置TFTP服务器的IP地址,树莓派的IP地址是通过DHCP自动获取的。

    TFTP_IP=192.168.12.194

    BOOT_ORDER

    该参数配置了不同的启动模式

    • 0x0 - NONE (stop with error pattern)
    • 0x1 - SD CARD
    • 0x2 - NETWORK

    启动模式是一个32bit的通过特定的位来决定的。如果设置0x21,表示网络启动失败时通过SD卡进行启动。

    如果设置成0x2则表示网络启动失败,不通过SD卡启动。这里我们设置成0x21。

    5.配置TFTP服务器

    如果不用SD卡,让树莓派4启动,那么启动固件必须放在TFTP服务的特定的目录中。

    这里我在Ubuntu上搭建了一个TFTP服务器。

    第一步:安装tftpd-hpa

    sudo apt-get install tftp-hpa tftpd-hpa

    第二步:编辑脚本文件

    sudo gedit /etc/default/tftpd-hpa

    脚本内容如下:

    # /etc/default/tftpd-hpa
    
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/home/bigmagic/tftpboot/"    //tftpboot绝对路径
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="--secure"

    第三步:启动服务器

    service tftpd-hpa restart

    之后还需要做的事情就是

    sudo chmod 777 /home/bigmagic/tftpboot/ -R

    让目录权限变成可以访问权限。

    /home/bigmagic/tftpboot/创建目录,用于存放SD卡上的启动文件

    mkdir raspi4

    最后将SD卡中的文件放到树莓派4中。

    6.网络文件系统

    操作系统起来后,如果要挂在SD卡或者网络文件系统,肯定是需要指定网络文件系统的。之前在SD卡上制作启动文件的时候,我们是将跟文件系统放在SD卡上所以通过PXE启动后的效果如下:

    找不到SD卡,通过网络方式启动

    从网络中读取相关的文件。

    可以看到检测不到sd卡上的文件系统。接着我们需要通过网络启动文件系统。

    6.1 主机上设置NFS文件系统

    因为我们的文件系统是在NFS上,所以主机上设置NFS文件系统是让树莓派访问文件系统。

    其实前面的TFTP是引导系统,而这个NFS则是为了让rootfs从NFS上启动。

    sudo apt install nfs-kernel-server

    接着编辑nfs的相关配置

    echo "/home/bigmagic/nfs/client1 *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

    设置权限

    chmod 777 nfs/ -R

    然后启动服务

    sudo service nfs-kernel-server restart

    6.2 树莓派上设置启动NFS的rootfs脚本

    由于现在树莓派4上没有了SD卡,启动脚本在/home/bigmagic/tftpboot/raspi4中。所以去修改cmdline.txt文件。

    修改文件内容如下:

    console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.12.194:/nfs/client1,vers=4.1,proto=tcp rw ip=dhcp rootwait elevator=deadline

    启动ip地址自行修改。

    接着执行

    接下来要做的事情就是将我们的跟文件系统拷贝到/home/bigmagic/nfs/client1目录下。

    此目录可以从我们之前制作的SD卡的rootfs文件系统中进行拷贝。

    操作完成后输入

    echo "192.168.12.194:/tftpboot /boot nfs defaults,vers=4.1,proto=tcp 0 0" | sudo tee -a /home/bigmagic/nfs/client1/etc/fstab

    以上操作后便可启动网络文件系统了。

    7.总结

    上述介绍了树莓派4不用SD卡启动系统的办法,对于树莓派4来说,可以通过内置的EEPROM进行启动固件的存放。通过这种方式,可以为内核调试增加了许多方便的地方。这种对于做开发树莓派的人来说,可以专注于程序的开发,不用为频繁的插拔卡带来烦恼。同时这种方式对镜像升级也提供了很多便利。





  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/bigmagic/p/12980714.html
Copyright © 2011-2022 走看看