树莓派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盘插在树莓派上开机吧

树莓派3 U盘启动 配置 & 即 MSD启动 总结的更多相关文章

  1. CentOS7中Tomcat的安装和配置以及启动配置tomcat。启动过程中的易错点

    Tomcat运行需要设置JRE目录,全局变量配置,请参见: Linux下JDK的安装和配置   当然也可以直接修改Tomcat的配置文件,请自行度娘   1.下载并解压 请先去官网找到需要下载的tom ...

  2. Windows启动配置数据(BCD)存储文件包含一些无效信息

    Windows启动配置数据(BCD)存储文件包含一些无效信息-照牛排 http://www.zhaoniupai.com/archives/223.html 1)近来封装Windows 7,遇到挫折. ...

  3. 树莓派 ubuntu16.04 安装SSH 配置SSH 开机自启SSH

    入手个树莓派3B 装了 ubuntu 16.04 需要用到SSH 记录下 0.先获得树莓派IP 树莓派 使用网线连接路由器和树莓派 在路由器设置页面(一般是192.168.1.1具体看路由器的型号和设 ...

  4. 树莓派初次使用的基本配置.md

    记录了一下树莓派初次使用的配置过程,包括装系统.修改 IP 等等. 树莓派(英语:Raspberry Pi),是一款基于 Linux 的单板机电脑. 它由英国的树莓派基金会所开发,目的是以低价硬件及自 ...

  5. ABP(现代ASP.NET样板开发框架)系列之5、ABP启动配置

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之5.ABP启动配置 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  6. ABP框架 - 启动配置

    文档目录 本节内容: 配置ABP 替换内置服务 配置模块 为一个模块创建配置 ABP在启动时,提供基础框架和模型来配置和模块化. 置ABP 在预初始化事件中进行配置,示例: kid1412注:XmlL ...

  7. MyCat源码分析系列之——配置信息和启动流程

    更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...

  8. ABP理论学习之启动配置

    返回总目录 本篇目录 配置ABP 配置模块 为模块创建配置 为了在应用启动时配置ABP和模块,ABP提供了一个基础设施. 配置ABP 配置ABP是在模块的PreInitialize事件中完成的.下面的 ...

  9. 【推荐】CentOS安装Tomcat-7.0.57+启动配置+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Tomcat之前,请确保已经安装了JDK-1.7环境,具体见<CentOS安装JDK-1.7>. ...

随机推荐

  1. 解决sweetalert 无故报错 elem.className.replace Uncaught TypeError: Cannot read property 'className' of null

    今天碰到这么一个问题,在使用sweetalert的时候时有时无会报错 elem.className.replace Uncaught TypeError: Cannot read property ' ...

  2. 互联网创业原则与创业模式attilax大总结

    互联网创业原则与创业模式attilax大总结 1. 适合普通人的的创业模式1 1.1. 网络创业  兼职创业 概念创业 团队 创业  内部创业..1 2. 创业模式大总结1 2.1. 工作室创业1 2 ...

  3. 【Unity】4.2 提升开发效率的捷径--导入 Unity 5.3.4 自带的资源包

    分类:Unity.C#.VS2015 创建日期:2016-04-06 一.简介 Unity自带的资源包也称为标准资源包.换言之,Unity自带的所有标准资源包导入到Unity项目中以后,都会放在Pro ...

  4. 自定义Django中间件(登录验证中间件实例)

    前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...

  5. redis-3.0.0_rc5的RPM包制定

    首先查看脚本: # cat /tmp/redis_before.sh #!/bin/bash if [ ! -d /apps/redis-3.0.0-rc5 ];then mkdir -p /apps ...

  6. 关于在node项目使用ioredis遇到的几个坑

    1,在ioredis中使用redis命令的方法的时候,如果有2个以上的参数,必须使用then方法来接收返回的结果,比如: redis.hget('key','field').then(function ...

  7. kafka消费者客户端启动之后消费不到消息的原因分析

    如果你发现你的一个消费者客户端A已经启动了,但是就是不消费消息,此时你应该检查一下该消费者所在的组中(ConsumerGroup)是否还有其他的消费者,topic的分区可能被组中其他的消费者线程抢走( ...

  8. Git pull error: Your local changes to the following files would be overwritten by merge:

    联合开发,遇上的一个问题,果然,在此验证了百度的不靠谱,是谷歌出的答案...... stackoverflow上有解决方案,链接:http://stackoverflow.com/questions/ ...

  9. NSURLConnection的Get\Post方法

    习惯了用AFNetworking来处理网络请求,这次试试苹果源生控件的处理方式~~ #import "ViewController.h" @interface ViewContro ...

  10. css中span元素的width属性无效果原因及多种解决方案

    先运行下程序看下: <span style='width:300px;'>123</span> 输出:123 可以看到 span会自动根据包含的内容来变化宽度 这是因为:对于内 ...