はじめに
ラズベリーパイシリーズで、ルートファイルシステムをNFSでマウントする。
以前にyocto raspberrypi3でNFSブートの記事を書いたが、 最近のmeta-raspberrypiでは作法が変わっているので焼き直し。
本稿で説明するのはyoctoの作法ではなくmeta-raspberrypiの作法なので、他のSoC向けのBSPレイヤでは適用できないので注意。
ベース環境の取得
$ mkdir -p ~/yocto/rpi4-nfs $ cd ~/yocto/rpi4-nfs $ git clone git://git.yoctoproject.org/poky.git -b kirkstone
oe-init-build-envの読み込み
下記を実行する。
$ cd ~/yocto/rpi4-nfs $ source poky/oe-init-build-env
meta-raspberrypiをビルド対象に追加
下記を実行する。
$ bitbake-layers layerindex-fetch meta-raspberrypi
local.confの修正
以前とは異なり、最近のmeta-raspberrypiではCMDLINE
変数を直接編集することはできない。
rpi-cmdline.bbのCMDLINE
変数は下記のように定義されており、必要に応じて各変数の内容を上書きする。
CMDLINE = " \ ${CMDLINE_ISOL_CPUS} \ ${CMDLINE_DWC_OTG} \ ${CMDLINE_SERIAL} \ ${CMDLINE_ROOTFS} \ ${CMDLINE_CMA} \ ${CMDLINE_KGDB} \ ${CMDLINE_LOGO} \ ${CMDLINE_PITFT} \ ${CMDLINE_DEBUG} \ ${CMDLINE_RNDIS} \ "
nfsブートに関連する変数はCMDLINE_ROOTFS
となるため、これをnfsブート用に上書きするために
conf/local.conf
に下記を追加する。
MACHINE = "raspberrypi4" CMDLINE_ROOTFS = "ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/srv/exports,vers=3,tcp rw rootwait"
動作確認
bitbakeの実行
$ bitbake core-image-base
書き込み
bmaptoolで書き込む。
$ sudo bmaptool copy core-image-base-raspberrypi4.wic.bz2 /dev/sdX
/dev/sdX
は環境に応じて適宜読み替える。
nfsサーバ
インストール
$ sudo apt-get install -y nfs-kernel-server
公開ディレクトリの設定
/etc/exports
に下記の内容を追加する。
/exports 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
NFSデーモンの再起動
変更した設定を読み込むためにNFSデーモンを再起動
$ sudo systemctl restart nfs-kernel-server
ルートFSの展開
bitbakeで生成されたルートFSのイメージを/exportsに展開する。
sudo tar -I pbzip2 -xf ./build/tmp/deploy/images/raspberrypi4/core-image-base-raspberrypi4.tar.bz2 -C /srv/exports/
まとめ
4年も経つといろいろ変わってる。