zoukankan      html  css  js  c++  java
  • 树莓派3 U盘启动 配置 & 即 MSD启动 总结

    树莓派3添加了一个新特性:允许USB启动。现在我们既可以从SD卡启动,也可以从USB启动。USB设备可以是U盘,带USB适配器的SSD硬盘,甚至是移动硬盘。
    本文介绍怎么从U盘启动树莓派3。
     
    1、安装 Raspbian
    首先在SD卡中安装最新的Raspbian(目前版本是Jessie)操作系统;就是正常安装,安装步骤就不说了。参考安装文档:https://www.raspberrypi.org/documentation/installation/
    安装完成之后,启动树莓派,使用SSH远程登录进Raspbian。
    执行更新命令:
    sudo apt-get update
    sudo BRANCH=next rpi-update
    上面命令会更新/boot目录下默认的start.elf和bootcode.bin文件。
    开启USB启动模式:
    echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
    重启树莓派。
    查看OTP:
    vcgencmd otp_dump | grep 17:
    输出信息应该类似 17:3020000a。现在树莓派已经开启USB模式,你可以把/boot/config.txt文件中的program_usb_boot_mode=1一行移除掉。
     
    2、把系统安装到U盘
    把U盘插入到树莓派,使用如下命令查看设备名:
    lsblk
    上图中,sda设备是U盘,分区sda1。
    卸载U盘:
    sudo umount /dev/sda
    创建一个100M的FAT32分区和一个Linux分区。U盘数据会丢失,注意备份。
    sudo parted /dev/sda
    (parted) # 进入到parted命令行,help查看帮助
    (parted)  mktable msdos   # 分区表
    如果有警告信息,可以忽略(Ignore->Yes)。
    (parted) mkpart primary fat32 0% 100M   # 分区
    (parted) mkpart primary ext4 100M 100%
    输出分区信息:
    (parted) print
    分区完成之后,Ctrl + C退出。
    创建boot文件系统和root文件系统:
    sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
    sudo mkfs.ext4 /dev/sda2
    把当前Raspbian系统拷贝到USB设备:
    sudo mkdir /mnt/target
    sudo mount /dev/sda2 /mnt/target/  # 挂载分区
    sudo mkdir /mnt/target/boot
    sudo mount /dev/sda1 /mnt/target/boot/  # 挂载分区
    sudo apt-get update
    sudo apt-get install rsync   # rsync命令用于同步数据
    sudo rsync -ax --progress / /boot /mnt/target   # 把系统拷贝到U盘
    刷新SSH密钥:
    cd /mnt/target
    sudo mount --bind /dev dev
    sudo mount --bind /sys sys
    sudo mount --bind /proc proc
    sudo chroot /mnt/target
    rm /etc/ssh/ssh_host*
    dpkg-reconfigure openssh-server
    exit
    sudo umount dev
    sudo umount sys
    sudo umount proc
    编辑cmdline.txt文件:
    sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt
    编辑fstab:
    sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab
    卸载挂载的文件系统,然后关闭树莓派:
    cd ~
    sudo umount /mnt/target/boot
    sudo umount /mnt/target
    sudo poweroff   # poweroff是新命令,以前是用shutdown
     
    3、从U盘启动
    关闭树莓派之后,断掉电源->拔出SD卡->从U盘启动树莓派。
     
     
     
     
     
     
    ---------------------------------------------------------------------------------------------------------------------------------------------------------
     
     
     
     
     

    什么是MSD

    Mass storage device 即 大容量存储设备
    闪存芯片的U盘 SD卡 硬盘 固态都行
    本次用的就是三星的32GU盘


    启动USB BOOT 模式 需要安装两个文件 start.elf bootcode.bin
    这两个文件存在于 github仓库 rpi-firmware的next分支里
    https://github.com/Hexxeh/rpi-firmware/tree/next

    开始

    首先,下载raspbian的系统镜像。 下载地址
    我推荐下载lite版本的
    不过 lite版本需要一个额外的步骤:
    sudo apt-get install rpi-update
    然后进行raspberry的更新 和 rpi-update的安装

    $ sudo apt-get update; 
    $ sudo apt-get install rpi-update

    因为需要从github的仓库里下载文件,所以需要一个比较好的网络环境
    我经过测试发现最好的环境是:
    树莓派上安装shadowsocks

    sudo apt-get install python-pip
    pip install shadowsocks

    然后安装 配置 proxychains 代理socks5

    sudo apt-get install proxychains
    sudo nano /etc/proxychains.conf

    将socks4 127.0.0.1 9095改为

    socks5 127.0.0.1 port 这边port取决于sslocal配置的本地端口号,我的就是1080

    然后

    sudo  BRANCH=next proxychains rpi-update

    PS: 这是我网络环境,即使路由器翻墙了依旧有点问题,所以需要proxychains进行代理,不然会出现很多错误(见 最下面的 More )
    BRANCH=next 是将环境变量 BRANCH 设置为 next, 这样固件更新的时候会选择next分支而不是branch分支

    大致升级过程的显示信息是这样的,期间会有curl进行文件的下载,不过我没截图

    允许USB启动:

    echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

    重启

    sudo reboot

    这边我们对重启前后的信息进行对比

    重启前

    固件版本:


    显示OTP寄存器的信息:

    重启后


    这边显示 17:3020000a才说明更新成功


    USB存储设备的系统安装

    准备一个USB存储设备,我用的是U盘,硬盘应该也行。需要格式化,所以注意备数据的备份。

    sudo parted /dev/sda  # 使用parted对U欧盘进行分区
    
    (parted) mktable msdos # 创建msdos格式的分区表
    Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
    Yes/No? Yes        
    (parted) mkpart primary fat32 0% 100M # 分 100M 格式成fat32
    (parted) mkpart primary ext4 100M 100% #  剩下的全都格式成ext4

    一般都是sda,不过分不清楚的话可以用 $sudo fdisk -l | grep sd查看。

    创建BOOT 和root 文件系统

    sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
    sudo mkfs.ext4 /dev/sda2

    创建文件挂载U盘

    sudo mkdir /mnt/target
    sudo mount /dev/sda2 /mnt/target/
    sudo mkdir /mnt/target/boot
    sudo mount /dev/sda1 /mnt/target/boot/
    安装rsync
    sudo apt-get update
    sudo apt-get install rsync
    将root和boot文件系统同步到U盘上去
    sudo rsync -ax --progress / /boot /mnt/target
    重新生成SSH key
    cd /mnt/target
    sudo mount --bind /dev dev
    sudo mount --bind /sys sys
    sudo mount --bind /proc proc
    sudo chroot /mnt/target
    rm /etc/ssh/ssh_host*
    dpkg-reconfigure openssh-server
    exit
    sudo umount dev
    sudo umount sys
    sudo umount proc
    编辑 cmdline.txt文件,fstab文件
    sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt
    
    sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab

    也可以手动修改

    卸载U盘, 关机
    cd ~
    sudo umount /mnt/target/boot 
    sudo umount /mnt/target
    sudo poweroff

    接下来要做的就是拔掉microSD卡然后用U盘启动了

    无microSD卡 U盘启动

    More

    A :是否能在pi1 pi2 上使用

    不能,因为关于boot的代码只在BCD2837上有(也就是raspberry pi 3 这一代)。

    Tips :

    最好所用的U盘比microSD卡的容量(准确来说是raspbian的文件系统容量)要大

    因为网络原因出现过的一些问题


    error1.png

    error2.png

    error3.png

    参考链接
    https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md
    https://github.com/raspberrypi/documentation/blob/master/hardware/raspberrypi/bootmodes/msd.md
    Youtube : https://www.youtube.com/watch?v=hxV3yrn8FK8

    ------------------------------------------------------------------------------------------------------

    用U盘来代替SD卡安装Raspbian的好处就是,U盘比SD卡更加耐用。不要再担心SD卡不经用的问题.



    准备一张64兆以上的SD卡,一个4G以上U盘。
    操作环境windows 7。

    1、U盘准备:
    下载Raspbian,解压缩使用win32diskimager(h ttps://launchpad.net/win32-image-writer/0.6/0.6/+download/win32diskimager-binary.zip)将解压后的IMG文件写入到U盘,这个过程完全和官方写入到SD卡一样,只不过SD卡换成了U盘。
    2、SD卡准备:
    使用HPUSBBoot(ht tp://rapidshare.com/files/107282064/HPUSBFW.zip)下载Dos boot文件(ht tp://rapidshare.com/files/107282214/USB-Boot.zip,解压缩到一个目录),使用管理员身份用HPUSBBoot格式化SD卡并写入BOOT文件,如图:

    <ignore_js_op> 



    第三项要选中你刚才解压缩生成的目录。
    在制作好的u盘里,找到


    cmdline.txt文件,用windows记事本打开,修改
    root=/dev/mmcblk0p2为
    root=/dev/sda2,保存退出记事本,再把所有文件
    ctrl+A全选,复制到SD卡里。
    搞定,然后就把U盘插在树莓派上开机吧

  • 相关阅读:
    Linux下制作和使用静态库和动态库
    C语言的内存管理
    C语言柔性数组
    大小端模式
    C位域操作
    C/C++字节对齐
    C/C++指针
    Linux之Socket编程
    VSCode配置FTP
    GCC的编译过程和链接
  • 原文地址:https://www.cnblogs.com/qiaoyanlin/p/6959271.html
Copyright © 2011-2022 走看看