Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

前回の記事で,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パケットが飛び交うネットワークでないと正しく起動しないなど,いくつかのバグがあります. 

ysugi
B4 at Univ. of Tsukuba. Engineer at Idein Inc.
https://github.com/Terminus-IMRC
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした