41
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi 3 でSDカードなしのネットワークブートをする

Last updated at Posted at 2018-02-22

前回の記事で,bootcode.binというファイル一つあれば全モデルのRaspberry Piでネットワークブートできることを紹介しました.

しかし,実はRaspberry Pi 3 ではSDカードがなくてもネットワークブートできます.bootcode.binの同機能がRaspberry Pi 3 のboot ROMに搭載されているためです1.今回はこの手順を紹介します.

本記事は以下のページから情報を抜粋してるだけのただのメモです.

手順

ネットワークブート機能を有効にする

boot ROMのネットワークブート機能はデフォルトで無効にされているため,有効にします.Raspberry PiにはOTP (One Time Programmable) メモリがあり,これを書き換えます.

機能を有効にするためにはSDカードが必要です.SDカードをマウントし,そのディレクトリで以下のコマンドを実行してください:

$ wget https://github.com/raspberrypi/firmware/raw/master/boot/bootcode.bin
$ wget https://github.com/raspberrypi/firmware/raw/master/boot/start.elf
$ wget https://github.com/raspberrypi/firmware/raw/master/boot/fixup.dat
$ echo 'program_usb_boot_mode=1' >config.txt    # 上書きしてるので注意!

ここでSDカードをアンマウントし,Raspberry Pi 3に差し込みます.このRaspberry Pi 3に電源を入れて数秒待つと,OTPメモリが書き換えられ,boot ROMのネットワークブート機能が有効になります.これが終わったらSDカードは抜いておきます

サーバ側の設定

Raspberry PiのネットワークブートはPXEブートと同じなので,DHCPサーバとTFTPサーバが必要です.今回は元記事に合わせてDnsmasqを使います.
また,NFS rootをします.

詳しくは元記事を見てください.

NFS

NFSサーバ系のパッケージ (曖昧) をインストールして,/etc/exportsを以下のようにして exportfs -rav を実行.

/etc/exports
/srv/nfs 10.11.12.0/24(rw,async,no_root_squash,no_subtree_check)

/srv/nfsとかに既存のRaspbianイメージ (第2パーティション) を展開します.イメージは http://downloads.raspberrypi.org/raspbian_lite/images/ に転がってます.マウント方法とかは https://linuxconfig.org/how-to-mount-rasberry-pi-filesystem-image などを参考にしてください.

Dnsmasq

設定は下のような感じ.

/etc/dnsmasq.conf
port=0
log-dhcp
enable-tftp
tftp-root=/srv/tftp
dhcp-range=10.11.12.100,proxy
pxe-service=0,"Raspberry Pi Boot"

/srv/tftpにはRaspbianでいうところの/bootにあるファイルを全て置きます.上記で説明したRaspbianイメージ (の第1パーティション) から持ってきてください.cmdline.txtに関しては以下のようなことを追記してください.${}で囲まれたところは適宜変更してください.

cmdline.txt
root=/dev/nfs nfsroot=${NFSサーバのIPアドレス}:/srv/nfs rw ip=auto nfsrootdebug rootwait

起動

Raspberry Pi 3に電源を接続してしばらく待てば起動すると思う……
うまく起動しないときはブロードキャストアドレスにpingし続けたり,/var/log/daemon.log でサーバのログを見たり,ディスプレイを接続して起動ログを見たりしてみてください.
それでも無理ならコメントください.

まとめ

Raspberry Pi 3はSDカードさえなくてもネットワークブートができます.便利ですね.
私のユースケースだと,config.txtは条件分岐ができるんですが,これとネットワークブートと組み合わせることでOSの切り替えが非常に楽になりました.

ちなみに今回のOTPメモリの書き換えで,USBメモリからの起動もできるようになりました.興味のある方は試してみてください.

  1. ただし,ARPパケットが飛び交うネットワークでないと正しく起動しないなど,いくつかのバグがあります.

41
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?