i.MX8搭載ボードのLinuxイメージを作る


写真1 組み込みLinuxの定番SoCであるi.MXシリーズのi.MX8ULPを搭載した開発ボードMaaXBoard 8ULP

インターフェース編集部 編

★ボード付きハンズオン・セミナ開催を開催します★
Yocto Project入門&ハードウェア拡張
・開催日  :2025年11月12日 10:00-17:00
・受講料  :10,000円(ボード付き,税込み)
・使用ボード:MaaXBoard 8ULP(アヴネット)
・講師   :三ツ木 祐介氏(Interface誌連載「YoctoProjectではじめる組み込みLinux開発入門」を執筆中)
※セミナ受講時に使用したMaaXBoard 8ULPはそのままお持ち帰り頂けます.
申し込みページはこちら

★マイコン基板がもらえる!メール・マガジン読者アンケート実施中★
FRDM基板プレゼント(計5名様) メール・マガジン「組み込みマイコン入門講座」読者アンケートにご協力ください
 2025年4月~配信しているメール・マガジン「組み込みマイコン入門講座」について読者アンケートにご協力をお願い致します.メール・マガジンのアーカイブはこちらでも確認できます.
 アンケートに回答頂いた方の中から抽選で5名様に,下記のいずれかのマイコン基板をプレゼント致します.
FRDM-MCXA153
FRDM-RW612
FRDM-MCXN947
 当選発表,および当選ボードの種類は,プレゼントの発送を持ってかえさせて頂きます.
アンケート・ページはこちら

 今回は,実際にYocto Projectを使って作成したLinuxを動かしてみます.具体的には,最小構成のLinuxを作成し,実機で動かします. ターゲット・ボードは,SoCとしてi.MX8ULP(NXPセミコンダクターズ)を搭載するMaaXBoard 8ULP(写真1,アヴネット)です. 今回は文献(1)の手順に従い,i.MXのBSP(Board Support Package)であるimx-yocto-bspをベースとしたビルド環境を構築します.

■[1] 開発環境の構築

●開発用PCの実行環境

 Yocto Projectは,基本的にLinux PC上で実行されることを前提としています. 今回は,文献(1) に従ってUbuntu 20.04 LTSがインストールされているPCを利用します.


●開発に必要なパッケージ

 Yocto Projectを使用する前に,あらかじめ必要なパッケージをインストールしておきます.ここでは,文献(1)に従って次のコマンドを実行します.

$ sudo apt-get update && sudo apt-get install -y \
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 gawk zstd lz4 locales bash-completion

 また,文献(3)に従って次のコマンドも実行しておきます.

$ sudo apt install gcc python3-subunit mesa-common-dev liblz4-tool file
$ sudo locale-gen en_US.UTF-8

 NXPセミコンダクターズからメタデータをダウンロードするときに,repoコマンドを使用するので,次のコマンドを実行してインストールします.

$ mkdir -p ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH

 次のコマンドを実行して,Gitが適切にセットアップされていることを確認します.

$ git config --global user.name "YourName"
$ git config --global user.email "you@example.com"

 詳細は,文献(1)を参照してください.


■[2] Linuxイメージの作成

●Yocto ProjectでLinuxを作る流れ

 Yocto Projectを使ってLinuxを作成します.手順は大まかに次のようになります.

1,作業ディレクトリの作成
2,メタデータとビルド・ツール一式の取得
3,環境変数の設定
4,ターゲット・ボード用レイヤの取得
5,ターゲット・ボード用の設定
6,Linux作成コマンド(BitBake)の実行
7,フラッシュ・メモリへの書き込み

 複雑そうに見えますが,実際はコマンドをいくつか実行するだけです.コマンドラインでの操作に慣れれば,思ったよりも簡単に進められます.ただし,BitBakeの実行には数時間かかります.

●ステップ1:作業ディレクトリの作成

 次のコマンドを実行して,作業ディレクトリを作成します.

$ mkdir ~/imx-yocto-bsp
$ cd ~/imx-yocto-bsp

●ステップ2:i.MXのBSPを取得する

 次のコマンドを実行して,NXPセミコンダクターズのGitHubリポジトリからi.MXのBSPをダウンロードします.ダウンロードはrepoコマンドを使用します.

$ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-mickledore -m imx-6.1.22-2.0.0.xml
$ repo sync

●ステップ3:ソースコードを取得する

 次のコマンドを実行して,アヴネットのGitHubリポジトリからMaaXBoard 8ULPのソースコードをダウンロードします.

$ cd ~/imx-yocto-bsp/sources
$ git clone https://github.com/Avnet/meta-maaxboard.git -b mickledore meta-maaxboard

●ステップ4:ビルド環境の設定

 BitBakeなどのYocto Projectが提供するツールを実行するには,あらかじめ環境変数を設定する必要があります.  次のコマンドを実行して,ビルド環境を設定します.実行後はbuildディレクトリが作成されます.カレント・ディレクトリも自動的にbuildディレクトリへ移動します.

$ cd ~/imx-yocto-bsp
$ MACHINE=maaxboard-8ulp source sources/meta-maaxboard/tools/maaxboard-setup.sh -b maaxboard-8ulp/build

 ビルド環境の設定後に新しいターミナルを開いたり,マシンを再起動したりした場合は,環境変数を設定するために次のコマンドを実行する必要があります.maaxboard -setup.shを再度実行する必要はありません.

$ cd ~/imx-yocto-bsp
$ source sources/poky/oe-init-build-env maaxboard-8ulp/build

●ステップ5:Linuxイメージ作成コマンド(BitBake)の実行

 BitBakeでは,Linuxディストリビューションを作成する場合,コマンド実行時にイメージ名を指定します.今回の環境でビルドできるイメージを表1に示します.


表1 今回の環境でビルドできるイメージ

 今回は最初のビルドなので,デフォルトのイメージであるavnet-image-fullを作成します. 次のコマンドを実行します.次のコマンドを実行します.ビルド環境にもよりますが,BitBakeの処理が完了するまで数時間かかります.

$ bitbake avnet-image-full


■[3] Linuxイメージの書き込み

●Linuxイメージの出力場所

 BitBakeの処理が完了すると,ビルド・ディレクトリ配下のtmp/deploy/images/maaxboard-8ulpにavnet-image-full-maaxboard8ulp-xxxx.rootfs.wicというファイルが作成されます. このファイルがLinuxイメージそのものです.これをMaaXBoard 8ULPのフラッシュ・メモリ(eMMC)に書き込んで実行します.

●ステップ1:ブート・モードの設定

 MaaXBoard 8ULPには,表2に示す2つのブート・モードがあります. ここでは,eMMCへイメージを書き込むために,シリアル・ダウンロード・モードに設定します. MaaXBoard 8ULPの裏面にあるDIPスイッチを表2の通り設定します.設定後の様子を写真2に示します.


表2 MaaXBoard 8ULPのブート・モード


写真2 MaaXBoard 8ULPのブート・モードをシリアル・ダウンロード・モードに設定した様子
●ステップ2:MaaXBoard 8ULPとPCの接続

 MaaXBoard 8ULPには,2つのUSB Type-Cポートが実装されています. 写真3に示すように,シリアル・コンソールのポートJ4と,電源ポートJ7の両方をPCに接続します.

●ステップ3:書き込みの実行

▼(1) 書き込みプログラムの入手
 i.MX用の書き込みプログラムUUU(Universal Update Utility)を入手します.
https://github.com/nxp-imx/mfgtools/releases/tag/uuu_1.5.21
▼(2) Linuxイメージと同じ場所に配置
 入手したUUUの実行ファイルを,Linuxイメージが置いてある場所に移動します.
▼(3) 書き込みの実行
 次のコマンドを実行して,MaaXBoard 8ULPにLinuxイメージを書き込みます.

$ uuu -b emmc_all u-boot-maaxboard-8ulp.bin avnet-image-full-maaxboard-8ulp.wic

●ステップ4:書き込んだLinuxイメージで起動

 書き込みが成功したら,MaaXBoard 8ULPからUSBケーブルを2本とも外して,ブート・モードをインターナル・ブート・モード(写真3)に切り替えます. その後,シリアル・コンソールのポートJ4は再度PCに,電源ポートJ7はUSB電源にそれぞれ接続し,MaaXBoard 8ULPを再度起動します(写真4).


写真3 MaaXBoard 8ULPのブート・モードをインターナル・ブート・モードに設定した様子


写真4 MaaXBoard 8ULPのUSBポートの接続

 PC側では,次の4つのUARTポートが認識されます.

・(1) /dev/ttyUSB0(Reserved)
・(2) /dev/ttyUSB1(Reserved)
・(3) /dev/ttyUSB2(A35のデバッグ用)
・(4) /dev/ttyUSB3(M33のデバッグ用)

 (3)のポートがLinuxのシリアル・コンソール用です.シリアル・ポートを次のように設定します.

・ボーレート:115200
・データ・ビット:8
・ストップ・ビット:1
・パリティ:なし
・フロー制御:なし

 シリアル・コンソールを開いた状態で電源を投入すると,ブートログが表示され,次のようなログイン画面が表示されます.

NXP i.MX Release Distro 6.1-mickledore maaxboard8ulp ttyLP1

maaxboard8ulp login:

 ユーザ名をroot,パスワードはなしでログインします.

◆参考文献◆

(1)MaaXBoard 8ULP Linux Yocto Development Guide V3.1,アヴネット.
(2) Avnet;meta-maaxboard(mickledore),GitHub.
(3) 1 System Requirements,Yocto Project Reference Manual,The Linux Foundation.
(4) MaaXBoard 8ULP Yocto User Manual V3.1,アヴネット.
(5) 三ツ木 祐介;YoctoProjectではじめる組み込みLinux開発入門 第2回 ラズパイ編2…最小構成のLinuxイメージを作る,Interface2022年10月号,CQ出版社.

本記事に記載されている社名,および製品名は,一般に開発メーカの登録商標,または商標です.


・組み込みマイコン入門講座
-- https://interface.cqpub.co.jp/mcu-hands-on/

・登録内容の変更,メール・マガジン配信中止はこちらからお願いします.
-- https://cc.cqpub.co.jp/system/auth/


Interface 表紙

CQ出版社オフィシャルウェブサイトはこちらからどうぞ

CQ出版の雑誌・書籍のご購入は、ウェブショップで!


CQ出版社 新刊情報



POWER ELECTRONICSシリーズ

力率改善 PFCによるACパワーの有効活用技術

ボード・コンピュータ・シリーズ

Linuxコマンド&シェル・スクリプト入門

トライアルシリーズ

NanoVNA測定で電子回路マスタ

CQ ham radio 2025年11月号

アマチュア無線機の便利機能活用法

トランジスタ技術 2025年11月号

チョコッと便利が大集合!電子回路をはじめよう