raspberrypi3のルートファイルシステムをNFSでマウントする。
ベース環境の取得
$ git clone git://git.yoctoproject.org/poky.git -b pyro $ cd poky $ git clone git://git.yoctoproject.org/meta-raspberrypi -b pyro
使用するのはpyroブランチ。
oe-init-build-envの読み込み
下記を実行する。
$ cd ~/rpi3 $ source poky/oe-init-build-env
これにより、クロスコンパイルに必要な環境変数が設定され、ビルドディレクトリに移動される。
meta-raspberrypiをビルド対象に追加
次のコマンドを実行する。
$ bitbake-layers add-layer ../poky/meta-raspberrypi
local.confの修正
マシンの設定と、カーネルのブートパラメータを設定する。
MACHINE ?= "raspberrypi3" CMDLINE_remove = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" CMDLINE_append = " ip=192.168.1.100 root=/dev/nfs nfsroot=192.168.1.10:/exports rw rootwait"
動作確認
bitbakeの実行
$ bitbake rpi-basic-image
SDカードの作成
本来はブートパーティションだけで良いが、手順が複雑になるので、通常通りSDカードイメージをddで書き込む
$ sudo dd if=./tmp/deploy/images/raspberrypi3/core-image-sato-raspberrypi3.rpi-sdimg of=/dev/sdb bs=100M
nfsサーバ
インストール
$ sudo apt-get install -y nfs-kernel-server
公開ディレクトリの設定
tftpサーバとは異なり、デフォルトの公開ディレクトリは設定されていないため、この設定をおこなう。
/etc/exports
に下記の内容を追加する。
/exports 192.168.1.0/255.255.255.0(rw,no_root_squash,subtree_check)
/exports
を作成する。
$ sudo mkdir /exports
NFSデーモンの再起動
変更した設定を読み込むためにNFSデーモンを再起動
$ sudo systemctl restart nfs-kernel-server
ファイルの展開
bitbakeで生成されたrootfsのイメージを/exports
に展開する。
$ sudo tar xvf ./tmp/deploy/images/raspberrypi3/rpi-basic-image-raspberrypi3.tar.bz2 -C /exports/
ラズパイ起動
ここまでやってSDカードをraspberrypi3に挿入して起動すると、ルートファイルをNFSでマウントした状態で起動される。