はじめに
DEBIX Model Aを購入した。
対応OSにYocto-L5.10.72_2.2.0とあるので買ってみたのだが、ビルド手順が見つからない。
u-bootのREADMEに下記の表記が。
これは既存のimx-yocto-bspのレシピを直接編集して、無理やり動くようにするやり方。
カーネルについては独自にビルドして一度イメージを書き込んだストレージ(ここではSDカード)をマウントして、 内容を書き換えるという手順になっている。
できればwicイメージを書き込んだSDカードを後からどうにかするのではなく、 wicイメージをどうにかして、ちゃんと動く環境を作りたい。
ピンヘッダ
デバッグシリアル用のUARTは40ピンのピンヘッダに引き出されているが、このピンヘッダは2mmピッチなので注意が必要(ラズパイなどは2.54mm)。 筆者は2mmピッチから線を引き出せるジャンパワイヤを使用している。
公開されている手順
DebixのGitHubリポジトリに記載されている手順を簡単にまとめると下記のようになる。
- レシピを直接修正してu-bootをビルドする
- YoctoProjectとは別のツールチェーンでカーネルをビルドする
Debix用のOSを書き込んだSDカードをマウントして下記を実施する。
今回実施する手順
最終的にはu-bootとカーネルが差し替わったwicイメージを作成する。
u-boot
u-bootに関してはひとまず公式の手順を踏襲し、予めwicイメージに含まれるようにする。
カーネル
カーネルは下記の方針で作業する。
- ビルドにはbitbakeで作成したツールチェーンを使用
- モジュールはbuild/tmp/work以下のrootfsディレクトリにインストール
- カーネルとデバイスツリー(dtb)はwicのブートパーティションのものを差し替え
環境構築
作業ディレクトリ
$ mkdir -p ~/yocto/debix-hardknott $ cd ~/yocto/debix-hardknott
ダウンロード
repoツールで環境をダウンロードする。
$ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-hardknott -m imx-5.10.72-2.2.0.xml $ repo sync
初期セットアップ
imx-yocto-bsp特有の初期セットアップ
$ DISTRO=fsl-imx-wayland MACHINE=imx8mp-lpddr4-evk source imx-setup-release.sh -b build
EULAが表示されるので最後まで読んでyを入力する。
2回目以降
別の端末を開いて、すでに作成されてビルドディレクトリを使用する場合は下記を実行する。
$ source setup-environment build
local.confの修正
conf/local.conf
に下記を追加する。
IMAGE_FSTYPES_append = " wic"
ここまででbitbakeによってイメージを作成するための環境は作成できた。
Debix向けのイメージの作成
u-bootの修正
u-bootのREADMEに従って、sources/meta-imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2021.04.bb
を改ざんする。
UBOOT_SRC ?= "git://github.com/debix-tech/uboot.git;protocol=https" SRCREV = "1a87b972fac74699482e2dce2023b66358d8c4f5"
ビルド
まず一度イメージをビルドしてみる。
$ bitbake core-image-minimal
カーネルの修正
ツールチェーンのビルド
カーネルをビルドするためにツールチェーンをビルドする。
$ bitbake meta-toolchain
ツールチェーンのインストール
別の端末で下記を実行。
$ cd ~/yocto/debix-hardknott/build/tmp/deploy/sdk/ $ ./fsl-imx-wayland-glibc-x86_64-meta-toolchain-cortexa53-crypto-imx8mp-lpddr4-evk-toolchain-5.10-hardknott.sh
カーネルビルド
ソースの取得
$ cd ~/yocto/debix-hardknott $ git clone --depth=1 https://github.com/debix-tech/linux $ cd linux
ビルド
$ source /opt/fsl-imx-wayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux $ make imx_v8_defconfig $ make -j 32
モジュールのインストール
カーネルをビルドした端末で下記のコマンドを実行する。
$ make INSTALL_MOD_PATH=../build/tmp/work/imx8mp_lpddr4_evk-poky-linux/core-image-minimal/1.0-r0/rootfs INSTALL_MOD_STRIP=1 modules_install $ sudo chown -R root:root ../build/tmp/work/imx8mp_lpddr4_evk-poky-linux/core-image-minimal/1.0-r0/rootfs/lib/modules/5.10.72
bitbakeを実行した端末で下記のコマンドを実行する。
$ bitbake core-image-minimal -c do_image_wic -f $ bitbake core-image-minimal -f
カーネルとdtbの差し替え
bitbakeを実行した端末で下記のコマンドを実行し、生成済みのwicイメージのカーネルとdtbを差し替える。
$ wic cp ../linux/arch/arm64/boot/Image ./tmp/deploy/images/imx8mp-lpddr4-evk/core-image-minimal-imx8mp-lpddr4-evk.wic:1 $ wic cp ../linux/arch/arm64/boot/dts/freescale/imx8mp-evk.dtb ./tmp/deploy/images/imx8mp-lpddr4-evk/core-image-minimal-imx8mp-lpddr4-evk.wic:1
wic cp
は直接wicイメージのファイルを差し替えられて便利だが、ファイルが追加されるような変更をするとイメージが壊れることがあるので注意が必要。
差し替えを確認
bitbakeを実行した端末で下記のコマンドを実行し、カーネル
$ wic ls ./tmp/deploy/images/imx8mp-lpddr4-evk/core-image-minimal-imx8mp-lpddr4-evk.wic:1 Volume in drive : is boot Volume Serial Number is BA80-4C7C Directory for ::/ IMAGE 31474176 2023-01-29 8:47 Image ... (snip) ...
wicイメージ上のカーネルモジュールを確認する。 Imageとimx8mp-evk.dtbだけ他と日付が異なっていればOK。
$ wic ls ./tmp/deploy/images/imx8mp-lpddr4-evk/core-image-minimal-imx8mp-lpddr4-evk.wic:2/lib/modules debugfs 1.45.5 (07-Jan-2020) 616 40755 (2) 0 0 1024 11-Feb-2023 10:42 . 548 40755 (2) 0 0 3072 9-Mar-2018 21:34 .. 617 40775 (2) 0 0 1024 11-Feb-2023 10:42 5.10.72 1487 40755 (2) 0 0 1024 9-Mar-2018 21:34 5.10.72-lts-5.10.y+ga68e31b63f86
5.10.72があればOK。
動作確認
修正したcore-image-minimal-imx8mp-lpddr4-evk.wic
をマイクロSDに書き込んで動作確認する。
起動した。差し替えたカーネルではUSBのキーボードなどのペリフェラルもきちんと動いているようだ。
まとめ
i.MX8M Plus搭載のボードが2万円弱で手に入るのは嬉しい。 DEBIX Model Aで遊ぶのは楽しそうだ。
YoctoProject対応をうたっていて、実際にイメージも配布されているが、どうやらbitbakeしたイメージにいろいろ手を加えたものを配布しているようだ。
今回はwicコマンドなどを駆使して、無理やりイメージを作成した。 近いうちにbitbake一発でイメージを吐き出せるようにしたい。