1. 程式人生 > >樹莓派3 U盤啟動 配置

樹莓派3 U盤啟動 配置

目錄 ttr bcd oot 樹莓派 寄存器 ctr print port

樹莓派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: 這是我網絡環境,即使路由器FQ了依舊有點問題,所以需要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盤啟動 配置