i.MXの開発環境を構築してみた (Yocto編) | 技術コラム
NXPセミコンダクターズ(以下NXP)のArmベース・マイクロプロセッサー「i.MXシリーズ」は、インダストリアル、コンシューマー、オートモーティブなどのさまざまな分野で活用されています。i.MXシリーズは、高度なグラフィックス、マシンビジョン、オーディオ、音声、ビデオ、およびセーフティーを重視するアプリケーションに最適です。
i.MX開発ユーザーが利用しやすいように、NXPはいくつかのi.MX評価ボード向けのプロジェクト・イメージファイルを提供していますが、ユーザーが実際にアプリケーションで使用したい機能が実装されていないことがあります。そこで、本コラムではYoctoを使用したi.MX開発環境の構築方法を紹介します。
Yoctoとは、Linuxのディストリビューションを作成するためのフレームワークです。このディストリビューションをカスタマイズすることで、独自の機能や開発をスムーズに立ち上げることが可能になります。
全体の流れ
Yoctoを使用したi.MX開発環境を構築する全体の流れです:
- ① 事前準備をする: ホストマシンのセットアップ
- ② 開発環境を構築してみよう: Yoctoで開発環境を構築
- ③ ビルドしてみよう: イメージをビルド
- ④ 書き込みをしてみよう: 生成されたイメージを評価ボードに書き込む
本コラムでは手順➀~③(「3.事前準備をする」、「4.開発環境を構築してみよう」、「5.ビルドしてみよう」)までを紹介し、手順④は次回のコラムで紹介します。また、イメージとはLinuxのファイルシステムを含んだブート用のイメージを指します。
-
Yoctoを使用したi.MX開発環境を構築する全体の流れ
必要なハードウェアを知る
Yoctoプロジェクト・ビルド環境を使用してi.MX評価ボードのイメージを構築する方法は、NXPのユーザーズ・ガイド「i.MX Yocto Project User's Guide」で紹介されています。
Yoctoプロジェクト・ビルド環境をサポートしているi.MX製品は以下の通りです。
Yoctoプロジェクト・ビルド環境をサポートしているi.MX製品
i.MX ファミリー名称 | i.MX製品名称 |
---|---|
i.MX6 | 6QuadPlus, 6Quad, 6DualLite, 6SoloX, 6SLL, 6UltraLite, 6ULL, 6ULZ |
i.MX7 | 7Dual, 7ULP |
i.MX8 | 8QuadMax, 8QuadPlus |
i.MX8M | 8M Plus, 8M Quad, 8M Mini, 8M Nano |
i.MX8X | 8QuadXPlus, 8DXL, 8ULP |
i.MX9 | i.MX 91, i.MX 93, i.MX 95 |
このコラムでは、i.MX 8M Plusを搭載した評価ボード「i.MX 8M Plus」での環境構築方法を紹介します。
-
参考画像:i.MX 8M Plus
事前準備をする
ホストマシンのセットアップを行います。ホストマシンの必要要件は下記になります。
項目 | 必要要件 |
---|---|
OS | Ubuntu 20.04以降 |
HDD | 最小50GB、推奨250B以上 |
CPUコア | 推奨8スレッド |
メモリ | 推奨16GB以上 |
USB | USB2.0 or 3.0 を1つ以上搭載 |
上記の要件を満たせばホストマシンとして問題ありません。ただし、HDD容量は500GB以上をお勧めします。HDD容量の推奨は250GBですが、ビルドを行うと中間ファイルや生成ファイルを含めると、かなりのHDD容量を使用します。今後の拡張性を考えると、HDD容量は500GB以上にしておいたほうが無難です。
また、Yoctoの環境を実行するには、インターネット接続が必要です。会社環境で使用する場合、Firewallの中からインターネット接続するためにProxy等の設定が必要になる場合があります。所属会社のIT部門へのご相談をお願いします。
今回のコラムで使用したホストマシンは、筆者が開発業務で使用しているPCを使用しました。そのため、Yocto環境の構築で使用する各種パッケージはあらかじめあらかじめインストールされています。お使いのホストマシンでパッケージが不足している場合は、エラーメッセージに従ってソフトウェアやパッケージのインストールをお願いします。
1.Yoctoに必要なパッケージ情報の更新をします
ホストマシンのターミナルでコマンド操作を行います。また、ディレクトリの指定はありません。
$ sudo apt update
$ sudo apt upgrade
コマンドの内容を下記に記載します。
コマンド | 内容 |
---|---|
apt update | アップデートが可能なパッケージリストを更新します |
apt upgrade | 既にインストールされているパッケージのバージョンアップを行います |
ターミナルにプロンプト記号($)が表示されたら次に進みます。
2.Yoctoに必要なパッケージをインストールします
Yoctoプロジェクトのビルドに必要なパッケージをインストールします。
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib ¥
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect ¥
xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev ¥
pylint3 xterm rsync curl zstd lz4 libssl-dev
コマンドの内容を下記に記載します。
コマンド | 内容 |
---|---|
apt-get install <package> | <package>をインストールします |
gawk | package:パターン検索します |
wget | package:URLを指定してファイルをダウンロードします |
git-core | package:gitを行います |
diffstat | package:diffの出力結果を読み、各ファイルの挿入・削除・変更をカウントします |
unzip | package:zipファイルからファイルを取り出します |
texinfo | package:ソースファイルからTEX、HTML等にマニュアル出力します |
gcc-multilib | package:32bit binary出力します |
build-essential | package:GNU C、C++等の開発パッケージ一式 |
chrpath | package: rpath、runpath設定を変更・一覧表示・削除します |
socat | package:TCPや標準入出力通信の変換します |
cpio | package:個々のファイル、ファイルグループ、ファイルシステム全体をコピーします |
python | package:python言語 |
python3 | package:python3言語 |
python3-pip | package:python3でpipをインストールします |
python3-pexpect | package:python3でインタラクティブなプログラムの自動化を行います |
xz-utils | package:可逆圧縮します |
debianutils | package:シェル・カーネル・ログ保存等の機能を追加します |
iputils-ping | package:pingを行います |
python3-git | package:python3でgitを行います |
python3-jinja2 | package:HTMLやXMLを生成します |
libegl1-mesa | package:グラフィック機能をコンパイルします |
libsdl1.2-dev | package: SDL1.2 バイナリ互換を行います |
pylint3 | package:エラーの発見を行うコードチェッカーを実行します |
xterm | package: X Window Systemの標準的な端末エミュレータ機能を追加します |
rsync | package:リモートでファイルやディレクトリと同期します |
curl | package:クライアントからサーバーへリクエストします |
zstd | package:可逆圧縮します |
lz4 | package:可逆圧縮します |
libssl-dev | package:OpenSSLのヘッダ、ライブラを追加します |
apt upgrade | 既にインストールされているパッケージをバージョンアップします |
ターミナルにプロンプト記号($)が表示されたら次に進みます。
3.スワップファイルの設定をします
ホストマシンでビルドする際に、スレッドごとにビルドを行います。スレッドで使用するメモリサイズがホストマシンのメモリサイズを超えてしまうとビルドエラーとなります。それを避けるために、スワップファイル(32GB)の設定を行います。
補足:ホストマシンのメモリ容量が十分にある場合は、この処理は必要ありません。
$ sudo swapoff /swapfile
$ sudo rm /swapfile
$ sudo fallocate -l 32G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
コマンドの内容を下記に記載します。
コマンド | 内容 |
---|---|
swapoff <path> | <path>のスワップ領域を無効にする |
rm <path> | <path>のディレクトリを削除する |
fallocate -l 32G <path> | <path>のファイルサイズ(32GB)を予約する |
chmod <permission> <path> | <path>のアクセス権限を設定する |
mkswap <path> | <path>にスワップ領域を準備する |
swapon <path> | <path>のスワップ領域を有効にする |
ターミナルにプロンプト記号($)が表示されたら次に進みます。
開発環境を構築してみよう
ホストマシンでYoctoのi.MX開発環境を構築します。
1.repoユーティリティをインストールします
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH
コマンドの内容を下記に記載します。
コマンド | 内容 |
---|---|
mkdir <path> | <path>のスワップ領域を無効にする |
curl <URL> <path> | <path>のディレクトリを削除する |
chmod a+x <path> | <path>のフルアクセスを設定する |
export PATH=<path> | PATHに環境変数を設定する |
ターミナルにプロンプト記号($)が表示されたら次に進みます。
2.gitをインストールします
$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"
$ git config --list
コマンドの内容を下記に記載します。
コマンド | 内容 |
---|---|
git config --global user.name <name> | gitで使用するユーザー名を設定する |
git config --global user.email <email> | gitで使用するe-mail設定する |
git config --list | gitで使用するユーザー名、e-mailを確認する |
ターミナルにプロンプト記号($)が表示されたら次に進みます。
3.Yoctoをセットアップします
Yoctoをセットアップします。ディレクトリimx-yocto-bspを作成し、この中にYoctoをセットアップします。 https://github.com/nxp-imx/imx-manifest/tree/imx-linux-scarthgap から使用するマニフェストファイルを選択しダウンロードします。本コラムではimx-6.6.36-2.1.0.xmlを利用します。
$ mkdir imx-yocto-bsp
$ cd imx-yocto-bsp
$ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-scarthgap -m imx-6.6.36-2.1.0.xml
$ repo sync
コマンドの内容を下記に記載します。
コマンド | 内容 |
---|---|
repo | Gitを補完する管理ツールです |
repo init | 現在のディレクトリにRepoをインストールします |
–u <url> | -u <url> マニフェストリポジトリの取得元URLを指定します |
-b <revision> | -b <revision> リビジョンを指定します |
-m <manifest> | -m <manifest> リポジトリ内のマニフェストファイルを選択します |
repo sync | リモートリポジトリ内のすべてのプロジェクトファイルを同期します |
ターミナルにプロンプト記号($)が表示されたら次に進みます。
4.ビルドターゲットとサポートするウィンドシステム(グラフィック機能)を選択します
i.MXには、ビルドイメージのセットアップを簡略化するスクリプトファイル(imx-setup-release.sh)が用意されています。このスクリプトファイルを使用するには、ビルドを行う評価ボードの名称とディストリビュージョンを指定してスクリプトファイルを実行します。
スクリプトファイルで指定できる評価ボードの名称を下記に記載します。
i.MX シリーズ | 選択可能な評価ボードの名称 |
---|---|
i.MX6 |
imx6qpsabresd imx6ulevk imx6ulz-14x14-evk imx6ull14x14evk imx6ull9x9evk imx6dlsabresd imx6qsabresd imx6solosabresd imx6sxsabresd imx6sllevk |
i.MX7 |
imx7dsabresd imx7ulpevk |
i.MX8 |
imx8qmmek imx8qxpc0mek imx8mqevk imx8mm-lpddr4-evk imx8mm-ddr4-evk imx8mn-lpddr4-evk imx8mn-ddr4-evk imx8mp-lpddr4-evk imx8mp-ddr4-evk imx8dxla1-lpddr4-evk imx8dxlb0-lpddr4-evk imx8dxlb0-ddr3l-evk imx8mnddr3levk imx8ulp-lpddr4-evk imx8ulp-9x9-lpddr4-evk |
i.MX9 |
imx91-11x11-lpddr4-evk imx93-11x11-lpddr4x-evk imx93-14x14-lpddr4x-evk imx93-9x9-lpddr4-qsb imx95-19x19-lpddr5-evk imx95-15x15-lpddr4x-evk imx95-19x19-verdin |
スクリプトファイルで指定できるディストリビューションの名称を下記に記載します。
グラフィック機能 | 選択可能なディストリビューション |
---|---|
Wayland | fsl-imx-wayland |
Wayland、 X11 ※EGLを使用するX11アプリは使用できません |
fsl-imx-xwayland |
Frame Buffer ※X11、Waylandは使用できません ※i.MX8、i.MX9は使用できません |
fsl-imx-fb |
本コラムでは、i.MX8M Plusに対応しているimx8mp-lpddr4-evkとグラフィック機能(Wayland、 X11)を盛り込んだfsl-imx-xwaylandを使用します。
以下のコマンドでスクリプトファイルを実行します。
$ MACHINE=imx8mp-lpddr4-evk DISTRO=fsl-imx-xwayland source ./imx-setup-release.sh -b build
ビルドしてみよう
前項で構築した開発環境でビルド(bitbake)してみます。
1.i.MXのイメージを選択します
Yocto projectは幾つかのイメージを提供しています。これを選択することで必要な機能をビルドしイメージを生成します。
下記にイメージ名称を記載します。
イメージ名称 | 内容 | 提供レイヤー |
---|---|---|
core-image-minimal | ターゲットをブートさせるだけのイメージ。 | poky |
core-image-base | ターゲットのハードウェアを完全サポートするコンソール専用のイメージ。 | poky |
core-image-sato | モバイルデバイス用の環境とビジュアルスタイルである Satoのイメージ。 このイメージはSatoテーマをサポートし、Pimlico アプリケーションを使用します。ターミナル、エディター、ファイル マネージャーを含みます。 |
poky |
imx-image-core | Waylandに使用するi.MXテスト・アプリケーションを含むi.MXイメージ。 | meta-imx/meta-sdk |
fsl-image-machine-test | コンソール環境を備えたFSLコミュニティi.MXコア・イメージ。 GUIインターフェースはありません。 |
meta-freescale-distro |
imx-image-multimedia | Qtコンテンツを含まないGUIを持つi.MXイメージ。 | meta-imx/meta-sdk |
imx-image-full | 機械学習機能を備えたオープンソースのQt6イメージ。 ハードウェア・グラフィックス搭載のi.MX SoCのみサポートされ、i.MX 6UltraLite、i.MX 6UltraLiteLite、i.MX 6SLL、i.MX 7Dual、i.MX 8MNanoLite、i.MX 8DXLではサポートされません。 |
meta-imx/meta-sdk |
イメージは上記のどれを使用しても構いませんが、本コラムでは、imx-image-fullを使用します。
2.ビルド(bitbake)を実行します
$ bitbake imx-image-full
Yoctoではbitbakeコマンドを使用してビルドを実行します。
※ビルドは数十時間がかかることもあります。
コンソール画面に"all succeeded" とメッセージが返ってくれば、ビルド成功となります。
補足情報
ホストマシンの性能にもよりますが、ビルドは数時間~数十時間かかる場合があります。bitbakeコマンドは、デフォルトでホストマシンのマルチコア数と同じスレッドを生成してビルド処理の高速化を図ります。そのため、スレッドごとにメモリを割り当てた際に、メモリ容量が足りなくなると、スワップの発生やビルド生成の順番によってはビルドエラーで処理が止まる場合があります。その場合、4.4項のbitbakeを再度実行するか、ビルド時の並列処理を制限することを推奨します。
並列処理 コマンドオプション | 説明 | 設定例 |
---|---|---|
BB_NUMBER_THREADS | 並列処理するスレッド数 | 2 |
PARALLEL_MAKE | ビルド時に使用するコア数 | -j 2 |
下記はスレッド数を2とした場合の実行コマンドの例です。
$ BB_NUMBER_THREADS=2 bitbake imx-image-full
次回のコラムについて
次回は、本コラムで作成したイメージファイルをi.MX評価ボードに書き込んでみます。
おわりに
今回はi.MXシリーズのYocto開発環境を構築する方法について解説しました。実際に開発環境を構築してみると、よりi.MXシリーズの理解が深まったり、構築手法について細かいところが見えてきたりします。次回のコラムでは、今回の生成したイメージファイルを評価ボードに書込んでみます。
また、ネクスティ エレクトロニクス開発部では、i.MXシリーズを使用した製品開発や技術サポートを行っていますので、お気軽にお問い合わせください。