Featured image of post 树莓派4B从SD卡复制系统到硬盘启动

树莓派4B从SD卡复制系统到硬盘启动

让树莓派开机地时候从USB设备启动系统

写在前面

假如我们有一块树莓派4B(RPi 3b似乎有更简单的方法),在SD卡上运行着Raspbian的系统,现在我需要把这个系统原封不动地搬到其他USB设备(硬盘/U盘)上, 然后让树莓派开机地时候从USB设备启动系统。需要的东西有:

  1. 一块树莓派
  2. 一块硬盘/U盘 (SSD/HDD,我花30块钱淘宝了一个二手的机械硬盘160G,然后又买了条SATA转USB的线,希望这个硬盘不会很快就挂掉)
  3. 原来装好系统的SD卡

设置硬盘启动的过程

参考资料: https://zhuanlan.zhihu.com/p/143865746 https://www.jianshu.com/p/60c2631dc1aa https://blog.csdn.net/potomac/article/details/107095996 https://www.tomshardware.com/amp/how-to/boot-raspberry-pi-4-usb

更新系统

sudo apt update
sudo apt full-upgrade

编辑/etc/default/rpi-eeprom-update文件

这个文件只有一行,设法把FIRMWARE_RELEASE_STATUS值从“ critical”更改为“ beta”

更新 EEPROM

# Check the current version
sudo rpi-eeprom-update     
# Update to latest
sudo rpi-eeprom-update -a

这个因为是最近的测试版(2020年5月)才支持USB启动的,所以需要更新。

重启

然后查看版本信息

vcgencmd bootloader_version

写作此文时查看到的固件版本更新日期是2020年7月

复制SD卡

这里可以直接用Raspbian随附的SD卡复印机应用程序(菜单-附件),将SD卡复制到你的USB储存器上,简单省事,便于操作。

手动更新个别文件

在GitHub上下载 /boot目录下的* .dat和* .elf文件(一共16个),替换你的USB设备boot分区下的这16个文件。 不必下载整个仓库,只要替换这16个文件就好。

完成 插电吧

拔下SD卡,插上USB,开机吧。之前所有的配置都会保留,包括WiFi,文件。

然而我插上HDD后并没有达到预想中的效果。虽然和SD卡一样能用,但打开文件的速度似乎比SD卡更慢了,开机时间也长了,运行噪音也大了。追求速度的有条件的还是换SSD吧。

如果硬要比较HDD比SD卡有什么优势的话,可能就是便宜(尤其二手的),容量大(可以做NAS),寿命长,以及不容易丢(SD卡很容易我就找不到了)

其他故障解决

连不上WiFi

如果没有外接显示器的话,连不上wifi=连不上VNC=没有显示屏,问题还是很难办的

网上找了几份教程,亲测可用,放这里备用

检查是哪一个接口来支持无线连接的: iwconfig

以防万一,你得确认下以使此接口服务是启动着的: sudo ip link set wlan0 up

一但确认了无线接口是工作着的,就可以用如下命令来扫描附近的无线网络了: sudo iw dev wlan0 scan | less

一旦配置文件修改完成后,在后台启动此命令: sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

最后,无论是连到开放的网络还是加密的安全网络,您都得获取 IP 地址。简单地使用如下命令: sudo dhcpcd wlan0

如果一切顺利的话,应该已经通过 DHCP 获取到了一个全新的本地 IP,这个过程是在后台自动完成的。如果想确认下是否真正连接上的话,可以再一次输入如下命令检查: iwconfig

    su -
    //进入root用户,输入密码
    ifconfig wlan0
    ifconfig wlan0 up
    iwlist wlan0 scan | grep SSID
    //扫描wifi
    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
    //查看WiFi配置文件
    echo "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    country=CN
    " >/etc/wpa_supplicant/wpa_supplicant.conf
    //覆盖原有的配置文件,重新写入文件头
    wpa_passphrase "<SSID>" "<密码明文>" >> /etc/wpa_supplicant/wpa_supplicant.conf
    //替换尖角括号内容,写入文件
    wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
    sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
    //这两个应该都可以或有一个可以连接WiFi
    killall wpa_supplicant
    //如有必要,用上述指令杀死进程

简单运行一下树莓派

点亮LED二极管

二极管,杜邦线,面包板等需要自备

    import RPi.GPIO as GPIO
    import time
    GPIO.setmode(GPIO.BOARD)
    GPIO.setwarnings(False)
    GPIO.setup(11,GPIO.OUT)

    GPIO.output(11,GPIO.HIGH)
    time.sleep(5)
    GPIO.output(11,GPIO.LOW)

    for i in range(5):
        GPIO.output(11,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(11,GPIO.LOW)
        time.sleep(0.5)

    GPIO.cleanup()

实现呼吸灯效果:

    import time
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(11, GPIO.OUT)

    p = GPIO.PWM(11, 50)  # 引脚为 11 频率为 50Hz
    p.start(0)
    try:
        while 1:
            for dc in range(0, 101, 5):
                p.ChangeDutyCycle(dc)
                time.sleep(0.1)
            for dc in range(100, -1, -5):
                p.ChangeDutyCycle(dc)
                time.sleep(0.1)
    except KeyboardInterrupt:
        #ctrl+C break
        pass
    p.stop()
    GPIO.cleanup()

录制视频

外接摄像头(虽然像素不咋滴)可以控制树莓派录制视频

    from picamera import PiCamera

    recordTime=int(input("输入录像时间"))

    #初始化摄像头
    camera = PiCamera()

    #录制的视频存放位置
    h264_fullname=video_kit.gen_h264_filepath()

    #开始录制
    camera.start_recording(h264_fullname)
    #录制时间 单位秒
    sleep(recordTime)
    #停止录制
    camera.stop_recording()

当作一台电脑来使用

预装的操作系统是有图形界面的,外接显示器,或者使用VNC远程桌面控制,可以听歌、看视频(卡卡的)、写代码(虽然这有点画蛇添足,都有了一台可以远程控制的电脑了,为什么还需要用树莓派来干这些事呢)

QQ音乐网页端

看视频

命令行终端