Yocto Projectではじめる 組み込みLinux開発入門


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

★11月12日にメルマガ筆者によるハンズオン・セミナを開催します!詳細は特設ページへ★
組み込みマイコン入門講座 特設ページ
セミナ申し込みページ

三ツ木 祐介 みつき・ゆうすけ
■今どきの組み込み開発

●求められる機能が多様化 /複雑化してきた組み込み機器

 最近はハードウェアの性能が上がり,以前よりも組 み込みシステムが多様化/複雑化してきました.その ため全ての機能を自前で実装することはもはや現実的 ではなく,オペレーティング・システム(OS)を搭載 することが当たり前になってきました.その中でも PCやサーバで使われるLinuxを組み込み用途で使う ケースをよく見かけます(図1).



(a)従来のアクティブ・スピーカ(USB接続の場合)



(b)スマート・スピーカ

図1 今どきの組み込み機器はIoT化により求められる機能が多様化/複雑化している
Linuxを使えばさまざまな機能が最初から使えて,自前で実装する手間が省ける
●開発プラットフォームの選択肢を考えてみる

 組み込みソフトウェアの開発を行うときに使われるプラットフォームの選択肢には,おおまかに次のようなものが挙げられます.

・OSレス
・RTOS
・組み込みLinux

 実際には,もっと多様多種な選択肢があると思いますが,ここでは筆者が思う代表的なものを列挙しました.

▶その1…OSレス

 OSを使わずに機器を制御するプログラムを開発するケースです.MCU(マイクロコントローラ・ユニット)と比較的小さなメモリ,ストレージで動作する組み込み機器で採用されることが多いと思います.
 基本的にはマルチタスクが不要で,リソースがごく 限られた環境でソフトウェアを開発することになります.マルチタスクが必要であれば,自分でスケジューリングやリソース管理を実装することもできますが, 全てを自前で実装する必要があるので,OSを使う場合に比べてハードルが高くなります.

▶その2…RTOS

 OSとしてRTOS(Real Time Operating System)を 使うケースです.
 MCUと比較的小さなメモリ,ストレージで動作する組み込み機器で採用されることが多いですが,メモリやストレージが潤沢な環境でも採用されることがあります.
 RTOSは基本的にマルチタスクの機能を提供するためのタスク・スケジューリングやリソース管理の機能を提供します.RTOSと言っても,タスク・スケジューリングやリソース管理について最低限のAPIを用意しただけの簡素なものから,NuttXのように高機能シェルを持っていてPOSIX互換のソフトウェアが比較的容易に移植できるようなリッチなものまで,さまざまなものがあります.実際に開発で使っている人の間でも,それぞれ想像するものが異なるでしょう.

▶その3…組み込みLinux

 組み込み機器向けにカスタマイズされたLinuxを使うケースです.
 主に,MPU(マイクロプロセッサ・ユニット)を搭載したSoCと,組み込み機器としては潤沢なメモリ,ストレージが使える環境で採用されます.本配信で紹介するのも,この組み込みLinuxです.

●組み込みLinuxを選ぶメリット
▶多様で複雑な機能の機器開発に向く

 組み込み用途でLinuxを使うメリットとしては,次のようなものが挙げられます.

・高機能なカーネル
・情報入手の容易さ
・豊富なデバイス・ドライバ
・OSS(Open Source Software)資源の活用

▶無料で使えるビルド・システムが用意されている

 組み込みシステムとしてLinuxを使う場合は,ターゲットとなるハードウェアに向けてLinuxをビルドする必要があり,そのためには何らかのビルド・システムを使う必要があります.ビルド・システムは幾つかありますが,その中でもよく目にするものとして Yocto Projectが挙げられます.
 実際にシングル・ボード・コンピュータのメーカが,Yocto Projectを使ってBSP(Board Support Package)を提供しています.組み込みLinuxを扱うシステム・ インテグレータやソフトウェア関連の企業でもよく使われているようです.

■組み込みLinuxの基礎知識

●PC向けLinuxとの違い

 PC向けに作成されたLinuxと組み込みLinuxは何 が違うのでしょうか.主に次の違いがあります.

・CPUアーキテクチャ
・メモリやストレージなどの制限

 PC向けのCPUはほとんどの場合,インテルx86系アーキテクチャで動作しますが,組み込み向けではArm,MIPS,RISC-Vなどさまざまなアーキテクチャで動作させることが想定されます.最近では,IoT(Internet of Things)の普及に伴い,x86アーキテクチャで動作する組み込みボードも登場しています.
 メモリやストレージに関しては,PCと比較して容量が小さいので,PC向けLinuxのように実際は使わないかもしれない汎用アプリケーションまで全てインストールすると容量が足りなくなってしまいます.そのため,組み込み向けLinuxではボードが持つメモリ やストレージの容量に応じて,必要な機能を選択してOSを構成する必要があります(図2).



(a)PC向けの汎用Linux



(b)組み込みLinux

図2 PC向けの汎用Linuxと組み込みLinuxの違いのイメージ
組み込み Linuxを採用するシステムのハードウェアは,メモリやストレージの容量が小さいので必要な機能に絞ってOSを構成する必要がある
●組み込みLinux作りに使うもの

 組み込みLinuxを作成するためには,次のようなものが必要です.

・ツールチェーン(クロス・コンパイラ)
・ブートローダ
・Linuxカーネル
・ルート・ファイル・システム

▶(1)ツールチェーン(クロス・コンパイラ)

 通常,プログラムは,ソースコードをコンパイルし,CPUが理解できるコードに変換します.
 PC上でPC向けのプログラムをコンパイルする場合は問題なく動作するプログラムが生成されます.組み込みボード上で,そのボード向けのプログラムをコンパイルする場合も問題なく動作するプログラムが生成されます.しかし,コンパイルはCPUやメモリなど のリソースをたくさん使うので,組み込みボード上で直接コンパイルすると時間がかかります.小さいアプリケーションなどであればそこまで時間はかかりませんが,組み込みLinuxをまるごと作成しようとすると,非常に長い時間がかかります.
 このような場合,コンパイル時間の短縮を図るために,PC上で組み込みボード向けのプログラムをコンパイルします.これをクロス・コンパイルと呼びます.コンパイルには,異なるアーキテクチャのコードを変換できるクロス・コンパイラを使います(図3).クロス・コンパイラをインストールする方法は,次に示すように幾つかあります.

・Ubuntuなどディストリビューションで提供されるパッケージをインストールする
・ソースコードから自前でコンパイルする
・crosstool-ng(2) などのツールチェーン・ジェネレータを使ってコンパイルする
・linaro(3) やCode Sourcery(4) などサードパーティが提供するツールチェーンをインストールする

 実際にソースコードからCPUが理解できるコード を生成するには,コンパイル,リンクなど複数の手順 が必要です.この複数の手順をまとめてビルドと呼び ます.ビルド時に使われるコンパイラ,リンカ,アセンブラなどの複数ツールをまとめてツールチェーンと呼びます.



図3 クロス・コンパイラは異なるアーキテクチャのコードを変換できる
▶(2)ブートローダ

 ブートローダは,カーネルを起動するためのプログラムです.OS起動時に,一番最初に動作するプログラムになります.カーネルを起動するために使う最小限のハードウェアを初期化し,カーネルをメモリに読み込んで実行します.
 PC向けのLinuxでは,GRUB(GRand Unified Bootloader)が広く使われていますが,組み込み向けのLinuxではCPUやメモリ,ストレージなどのハードウェア構成がボードごとに異なる場合が多いので, そのままGRUBを使えません.組み込みボードの場合,CPU1つとってもアーキテクチャやSoCごとに初期化が必要な機能や手順に差がでてきます.そのため,それぞれのボード向けにブートローダを用意する必要があります.

▶(3)Linuxカーネル

 Linuxカーネルは,Linux OSの本体となるプログラムで,タスクのスケジューリングやメモリの管理,デバイスの制御などを行います.これらの処理には割り込み処理も含まれます.Linuxカーネルとしての基本的なロジックは同じように動作するように設計されていますが,アーキテクチャやハードウェアに依存する部分はそれぞれに適合するように移植する必要があります.デバイス・ドライバの移植などもこの部分で行われます.

●(4)ルート・ファイル・システム

 ルート・ファイル・システムは,ユーザランドと呼ばれる,ユーザから見えるところにあるファイルの集合です.サービスやアプリケーション,設定ファイル,RPMやaptなどのパッケージ管理システムもこの部分に含まれます.
 さまざまなLinuxディストリビューションの違いは,この部分の構成の違いがほとんどだと思ってよいでしょう.


 組み込みシステムでは,ユーザがデバイスを操作するとき,Linuxとして意識することはありません.しかし,それぞれのデバイスの機能を実現するために必要な構成にする必要があります.ユーザランドのアプリケーションのソースコードは,基本的にどのアーキテクチャでも共通ですが,それぞれのCPUで解釈できるコード形式が異なります.そのため,ターゲットとなるCPUに合うツールチェーンでビルドする必要があります.

■おすすめの組み込みLinuxビルド・ システム「Yocto Project」

●さまざまなハードウェア向け組み込みLinuxを構築できる

 Yocto Projectは,さまざまなハードウェアに組み込みLinuxを構築するときに必要なビルド・システム を提供するプロジェクトです.提供しているものは, 大まかに分類すると次の3つです.

・メタデータ
 リファレンスとなるディストリビューションであるPokyをビルドするために必要な情報を記載
・ビルド・システムと各種ツール
 メタデータを処理してLinuxイメージを構築する
・ドキュメント

 ビルド・システムの核となるBitBakeは,もともと OpenEmbeddedプロジェクトが開発していたビルド 用のツールで,現在ではYocto Projectと共同で開発 やメンテナンスを行っています.また,コアのメタ データとなるOpenEmbedded-Core(OE-Core)も同様 に共同でメンテナンスしています.

●特徴…ビルド情報は層(レイヤ)を積むように組み合わせる

 Yocto Projectは,レイヤ・モデルを採用しているという特徴があります.ビルドに必要な情報を含むメタデータをグループ化しておいて,層(レイヤ)を積むように組み合わせて,さまざまなハードウェアに向けたソフトウェアを提供できるようにしています. (図4)にPokyの全体構成を示します.Yocto Projectを使う上でよく目にする用語を(表1)に示します.



(a)全体像



(b)作成しないといけないレシピというMakefileのような記述

図4 さまざまなハードウェア向け組み込みLinuxを構築するのに便利なビルド・システム「Yocto Project」の全体像


表1 Yocto Projectを構成する要素
◆参考文献◆

(1)GETTING STARTED:THE YOCTO PROJECT OVERVIEW,Software-Yocto Project,Yocto Project.
https://www.yoctoproject.org/softwareoverview/
(2)crosstool-NG,crosstool-NG community.
https://crosstool-ng.github.io/
(3)Accelerating deployment of Arm-based solutions,Linaro.
https://www.linaro.org/
(4)Sourcery CodeBench Lite Downloads | Siemens Software,Siemens.
https://www.plm.automation.siemens.com/global/en/products/embedded-software/sourcery-codebench-lite-downloads.html

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


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

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



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

Interface 表紙

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

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


CQ出版社 新刊情報



トランジスタ技術 2026年 1月号

実力けた違い!小回路アレイの数理

別冊CQ ham radio QEX Japan No.57

巻頭企画 ベランダに設置したシンプルなHF帯3バンド垂直アンテナ

CQ ham radio 2025年12月号

現代版アマチュア無線の楽しみ方

POWER ELECTRONICSシリーズ

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

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

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