MSD(U盘、硬盘)启动树莓派3,无需tf卡。

什么是MSD

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


启动USB BOOT 模式 需要安装两个文件 start.elfbootcode.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

转自 简书 http://www.jianshu.com/p/c182d285d9c6

打赏
Bookmark the permalink.
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论