はじめに
ラズベリーパイシリーズで、ルートファイルシステムを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年も経つといろいろ変わってる。