NXP プロセッサー実機検証ガイド 5 | NXP プロセッサー実機検証ガイド 7...準備中 | ||
NXP プロセッサー 実機検証ガイドまとめ | NXP プロセッサー 初心者ガイドまとめ |
もくじ
- はじめに
- 1. Yocto ビルドのホストマシン環境のセットアップ
- 2. git からのソースのフェッチ
- 3. MicroSD カードへの Yocto イメージの書き込み
- 4. MicroSD カードからの LEC-IMX8MP のブート
- 5. 機械学習のサンプルプログラムの実行
- まとめ
はじめに
ADLINK社は、NXP の i.MX8M Plus をベースした SMARC LEC-IMX8MP 向けに様々な種類のプリビルドの OS イメージを用意しているのですが、残念ながら機械学習機能を備えた Yocto のプリビルドの OS イメージは用意しておりません。
そこで SMARC LEC-IMX8MP 向けに機械学習機能を備えたイメージでの Yocto Project のビルド手順をまとめてみましたのでぜひお試しください。
<今回使用した主な製品>
-
LEC-IMX8MP
最大 2.3TOPS で動作する NPU を搭載したNXP i.MX8M Plus プロセッサをベースにした、SMARC モジュールです
-
I-Pi SMARC Plus
M.2 拡張付き SMARC 2.1 リファレンスキャリアボードです
- HTS-sIMX8MP
LEC-IMX8MP のヒートスプレッダです
(他に LEC-IMX8MP のヒートシンクの THS-sIMX8MP もあります)
その他に今回用意したもの:
- Yocto Project 環境を構築するためのホストマシン
- HDMI ケーブル / モニター
- USB マウス・キーボード
- LAN ケーブル
- Windows 10 PC (MicroSD への OS イメージの書き込みとして使用)
- MicroSD カード (16GB 以上を推奨)
参考:
- [NXP プロセッサー 初心者ガイド 1] i.MX 系の Linux イメージ作成方法
- ADLINK Githut : Building Yocto for LEC‐IMX8MP
- Flashing Yocto on SD Card for LEC‐IMX8MP
- i.MX Machine Learning User's Guide
1. Yocto ビルドのホストマシン環境のセットアップ
開発 ホストマシンの推奨ハードウェアは下記のとおりです。
- OS:Ubuntu 20.04 LTS 64 bit version
- CPU:Intel Core-i7 プロセッサー (4コア以上)
- RAM:8GB 以上
- ストレージ:500GB以上
- 高速ネットワーク接続
① 必須のホストパッケージをインストール
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm zstd liblz4-tool curl git python-is-python3
②「Google リポジトリ」パッケージをホストにインストール
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=${PATH}:~/bin
$ export LC_ALL="en_US.UTF-8"
図3:Google リポジトリ
③ 以下のコマンドを実行して git が正しく設定されていることを確認
$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"
$ git config --list
2. git からのソースのフェッチ
① ワーキングディレクトリを作成します。
下記では 「imx8mp-yocto-bsp」を作成しています。
$ mkdir imx8mp-yocto-bsp
$ cd imx8mp-yocto-bsp
② 必要なメタレイヤーをダウンロード
Yocto イメージをビルドするには、最新のブランチとマニフェストファイルを使用することをお勧めします。
kirkstone branch の例
$ repo init -u https://github.com/ADLINK/adlink-manifest -b lec-imx-yocto-kirkstone -m adlink-lec-imx8mp-yocto-kirkstone_1v0.xml
$ repo sync
$ MACHINE=lec-imx8mp DISTRO=fsl-imx-xwayland source adlink-imx-setup-release.sh -b <build_dir>
mickledore branch の例
$ repo init -u https://github.com/ADLINK/adlink-manifest -b lec-imx-yocto-mickledore -m adlink-lec-imx8mp-yocto-mickledore_1v0.xml
$ repo sync
$ MACHINE=lec-imx8mp DISTRO=fsl-imx-xwayland source adlink-imx-setup-release.sh -b <build_dir>
参考:GitHub - ADLINK/adlink-manifest at lec-imx-yocto-kirkstone
こちらのサイトにて利用可能なブランチとマニフェスト ファイルを見つけることができます。
③ conf/local.conf での必須設定
RAM 4GB 品を使用しているため、下記設定を local.conf ファイルに追加します。
# sets the LPDDR4 DRAM size, available options are: LPDDR4_2GB, LPDDR4_2GK, LPDDR4_4GB, LPDDR4_8GB
UBOOT_EXTRA_CONFIGS = "LPDDR4_4GB"
④ イメージのビルド
機械学習とQ6機能のイメージを使用してビルドするため、imx-image-full を使用します。
$ bitbake imx-image-full
図4のようなメッセージが表示されたらビルドは完了です。
図4:Bitbake 成功時のログ
⑤ 生成イメージの確認
<build_dir>/tmp/deploy/image/lec-imx8mp/ ディレクトリに imx-image-full-lec-imx8mp-xxx.wic というイメージが生成されます。
図5:生成された SD Card イメージ
3. MicroSD カードへ Yocto イメージの書き込み ( Win32 Disk Imager を使用 )
今回 Windows 10 PC で Win32 Disk Imager というツールを使用し MicroSDカードへの書き込みを行います。
Win32 Disk Imager を起動します。
"Image File" で前のステップで生成した imx-image-full-lec-imx8mp-xxx.wic を指定します。
( 下記では imx-image-full-lec-imx8mp-20240520051559.rootfs.wic を指定しています。)
"Device" で MicroSD カードを指定します。
"Write" ボタンをクリックします。
下記のようなポップアップが出てきますが、"Yes" をクリックします。
MicroSD カードへの書き込み状況を Progress で確認できます。
無事、書き込みが完了しました。
"Exit" ボタンを押して Win32 Disk Imager を終了します。
4. MicroSD カードからの LEC-IMX8MP のブート
HTS-sIMX8MP(ヒートスプレッダ)、LEC-IMX8MP (SMARC モジュール) と I-Pi SMARC Plus (SMARC キャリアボード)を写真のように組み上げます。
一番上が ヒートスプレッダ、一番下がキャリアボード、その間に SMARC モジュールを挟む形です。
以下の設定/接続を実施します
・イメージ書き込み済みのmicroSDカードのスロットへの挿入
・ブートデバイスをmicroSDカードに設定
以下左の写真のようにDIP SWを"0110"に設定ください
・HDMIケーブルでモニターと接続
・LANケーブルの挿入
・USBマウス/キーボードの接続
※今回使用のSMARCモジュールではUSBポートが一つしか使えません。
下の写真のように、左下のコネクターにUSB Hubをつなげてご使用ください
最後に電源アダプターを接続し起動します。
事前準備がうまくいけば以下のようにADLINK社のロゴの入った yocto の画面がHDMIモニターに表示されます。
weston-info コマンドを実行した結果、例えば
HDMI-A-1
DPI-1
の2つディスプレイ出力になっていて HDMI 1つだけのディスプレイ出力にしたい場合は、/etc/xdg/weston/weston.ini ファイルを下記のように修正してみてください。
[output]
name=HDMI-A-1
[output]
name=DPI-1
mode=off
5. 機械学習のサンプルプログラムの実行
TensorFlow Lite 専用の Python API を使用するサンプルを実行してみます。
サンプルファイルはここにあります。
/usr/bin/tensorflow-lite-2.9.1/examples
事前定義されたコマンドライン引数を使用してサンプルを実行するために、次のコマンドを使用します。デフォルトでは CPU を使用します。
$ python3 label_image.py
次のように出力されます。
Warm-up time: 203.9 ms
Inference time: 150.6 ms
0.878431: military uniform
0.027451: Windsor tie
0.011765: mortarboard
0.011765: bulletproof vest
0.007843: sax
Python のサンプルでは、外部デリゲートもサポートしています。
--ext_delegate <PATH> および --ext_delegate_options <EXT_DELEGATE_OPTIONS> を使用して、外部デリゲート ライブラリとオプションでその引数を指定できます。
NPU を使用してサンプルを実行するために、次のコマンドを使用します。
# python3 label_image.py --ext_delegate=/usr/lib/libvx_delegate.so
次のように出力されます。
Loading external delegate from /usr/lib/libvx_delegate.so with args: {}
Vx delegate: allowed_cache_mode set to 0.
Vx delegate: allowed_builtin_code set to 0.
Vx delegate: error_during_init set to 0.
Vx delegate: error_during_prepare set to 0.
Vx delegate: error_during_invoke set to 0.
W [HandleLayoutInfer:272]Op 162: default layout inference pass.
Warm-up time: 5280.4 ms
Inference time: 3.3 ms
0.870588: military uniform
0.031373: Windsor tie
0.011765: mortarboard
0.007843: bow tie
0.007843: bulletproof vest
まとめ
今回は機械学習機能を備えたイメージでの Yocto Project をビルドしましたが、必要とされるレイヤー・レシピを追加してのビルドもぜひお試しください。
NXP プロセッサー実機検証ガイド 5 | NXP プロセッサー実機検証ガイド 7...準備中 | ||
NXP プロセッサー 実機検証ガイドまとめ | NXP プロセッサー 初心者ガイドまとめ |