vol.113 Linuxを自在にカスタマイズできるYocto Project

Linuxを自在にカスタマイズできるYocto Project

米国シノプシス 

ARCプロセッサ・シニア・プロダクト・マーケティング・マネージャー Allen Watson


はじめに

デスクトップでUbuntuやRed Hat Linux(RHEL)などのオペレーティング・システムを使用したことのある方なら、LinuxもMicrosoft WindowsやMacOSのようなフル機能のオペレーティング・システムだと思われるかもしれません。しかしUbuntuやRHELは「Linuxディストリビューション」と呼ばれるものです。「Linux」とはシステム・サービスを提供するカーネル・ソフトウェアで、これに各種ソフトウェアを追加したものがLinuxディストリビューションです。ARCプロセッサが使用される組込みの世界では、メモリーやストレージなどシステム・オン・チップ(SoC)のシステム・リソースに制約があることが多く、Linuxディストリビューションも軽量なものが求められます。

図1:Linuxオペレーティング・システムの概略図

Linuxディストリビューションとは

デスクトップ/サーバ向けのLinuxディストリビューションは、以下の5つの主要コンポーネントで構成されます。

  • ブートローダ
  • Linuxカーネル・イメージ
  • システム・ライブラリ
  • ユーザー・アプリケーション
  • ツールチェーン

 

システムを起動すると最初にブートローダが実行されます。ブートローダの後、システムはカーネルをロードして実行し、更に初期化を実行します。Linuxカーネルにはハードウェアのデバイス・ドライバが含まれます。カーネルは、デバイスおよびメモリー管理などのサービスを提供します。システム・ライブラリにはオペレーティング・システムの機能の多くが含まれ、アプリケーションやユーティリティはシステム・ライブラリを利用してカーネル・サービスにアクセスします。ユーザー・アプリケーションはウェブ・ブラウザやメール・アプリケーションなど、ユーザーが日々のタスクを実行するのに使用するプログラムです。ツールチェーンはターゲット・システム上で実行され、アプリケーションやその他のソフトウェアを必要に応じてビルドするために使用されます。

通常、組込みLinuxディストリビューションではツールチェーンとビルド・システムが分離されており、ターゲット・プロセッサとは異なるワークステーション・プロセッサ上で実行されます。ツールチェーンは、ターゲット・プロセッサに合わせてソフトウェアをクロスコンパイルします。

 

ターゲット上で実行

  • ブートローダ
  • Linuxカーネル・イメージ
  • システム・ライブラリ
  • ユーザー・アプリケーション

 

開発ワークステーション上で実行

  • ツールチェーン
  • ビルド・システム/スクリプト

ビルド・システムが必要な理由

SoCのシステム制約を考慮しながら組込みシステムの機能要件を満たす組込みLinuxディストリビューションを構築する場合、ビルド・システムを使用すると一連の作業を容易に管理できます。Linuxディストリビューションを構築するには、さまざまなソースから多くのソフトウェアをダウンロードしてビルドする必要がありますが、これらのパッケージはそれぞれ他の多くのパッケージとの間に依存関係があるため、この作業は非常に複雑なものになります。ビルド・システムを使用すると、以下の作業が容易になります。

  • 依存関係の解消
  • ソースの取得
  • パッケージの設定
  • 設定結果のビルド、インストール、およびパッケージ化

 

ビルド・システムを自動化すると、夜間のビルドも可能になります。

組込みLinux用のビルド・システム

ここでは、Linuxの代表的なビルド・システムを3つご紹介します。これらはいずれもDesignWare® ARC®プロセッサ用ディストリビューションのビルドに使用できます。

Buildroot

Buildrootでは、組込みLinuxディストリビューションを簡単に設定できます。BuildrootはMakefileなどのよく知られたLinuxツールおよびインフラストラクチャを使用してツールチェーン、ファイルシステム、カーネル・イメージ、ブートローダを構築します。基本的なシステムであれば、ほんの数分もあればビルドできます。

 

Buildrootの主な特長は以下のとおりです。

  • 1800種類を超えるパッケージ
  • GUIベースの設定
  • ターゲットのメモリーを圧迫しない
  • ARC AXS10x、ARC HSDK、ARC HS Virtualizer Development Kit(VDK)、ARC nSIM命令セット・シミュレータをサポート

 

Buildrootは選択可能なパッケージの数も多く、パッケージの選択からカーネルの設定までをGUI環境で行えるため比較的簡単に使用できます。したがって多くのケースでBuildrootの使用が推奨されます。ただし、Buildrootは動的パッケージ管理の機能をサポートしていません。ビルドできるのは静的システムのみで、後からパッケージを追加することはできません。システムによっては、後から機能を変更・追加するために新しいソフトウェアの追加が必要になることがありますが、一般的な組込みシステムは機能が固定されているため、動的パッケージ管理の機能はそれほど必要とされません。

 

BuildrootをインストールしてカスタムLinuxディストリビューションを設定したら、以下のコマンドを実行してARCソフトウェア開発プラットフォームAXS101用のLinuxディストリビューションをビルドします。

make snps_archs38_axs103_defconfig && make

OpenWrt

OpenWrtは、WiFiルータをターゲットにした特定用途向けビルド・システムです。代表的な市販ルータ向けのディストリビューションが数多く提供されています。ARC HS Development Kitを含むARC開発システムもサポートされます。

 

OpenWrtの主な特長は以下のとおりです。

  • 無線ルータ用として最も強力かつ柔軟なディストリビューション
  • opkgによりパッケージ(.ipk)の動的管理をサポート
  • すぐに利用できるソース・パッケージが1000種類以上
  • ソフトウェア開発キット(SDK)をビルド
  • WiFiアクセスポイントとしてARC HSDKボードをサポート

 

このOpenWrtは動的パッケージ管理をサポートしており、一度ビルドした後に新しいパッケージを追加できるため、柔軟性に優れています。ただし先に述べたように、このディストリビューションはWiFiルータ・アプリケーションをターゲットとしているため、どのような組込みアプリケーションのニーズにも対応できるわけではありません。

 

ARC用のビルドは、次のようなコマンドで実行します。

make menuconfig && make

make menuconfigコマンドを実行後、「ARC HS38」を選択します。

Yocto Project

Yocto Projectは、Linux Foundation傘下のオープンソース・プロジェクトの1つで、カスタムLinuxベース・システムを開発するためのテンプレートやツール、手法が提供されます。Wind River Systemsなどの企業が提供する有名なLinuxディストリビューションの多くは、Yoctoをベースにしています。

Yocto Projectの主な特長は以下のとおりです。

 

  • Linux Foundation傘下のプロジェクト
  • 大手組込みLinuxプロバイダの多くが採用
  • レイヤを利用して数千ものパッケージを利用可能
  • 動的パッケージ管理をサポート(.rpm、.deb、.ipk)

 

このビルド・システムは非常に柔軟性が高く、カスタマイズが容易です。この利点は、レイヤ・モデルによって実現しています。各レイヤには、特定の機能に関連する命令を記述した「レシピ」が格納されます。これらの命令を複数のレイヤに分けて格納することにより、レイヤの再利用が可能となります。例えばあるレイヤをボード・サポート・パッケージ(BSP)レイヤとして、ここにハードウェアに関する情報を格納しておきます。そうすると、BSPレイヤを差し替えるだけで任意のディストリビューションを任意のハードウェアで動作させることができます。

しかしカスタマイズ性の高さが必ずしも長所とはならない場合もあります。スクリプトを使用して人手で設定を行う必要があるため、ある程度のスキルが必要となるためです。しかしYoctoはビルド・システムの中で最も柔軟性が高く、応用範囲が広いため、時間と労力をかけて使用方法を学習する価値はあります。

最適なビルド・システムを選ぶ方法

どのビルド・システムを使用するかは、Linuxの使用経験およびどの程度のカスタマイズが必要かを考慮して決定します。表1に、これら3つのビルド・システムの比較表を示します。

表1:Linuxビルド・システムの比較表

ARCプロセッサ上でLinuxをすぐに使用したいというご要望にお応えし、シノプシスはARC開発システムをサポートしたビルド済みLinuxイメージをご提供しています。これを使用すれば、ビルド・システムを使用せず開発を始めることができます。シノプシスのオープンソース・ソフトウェアはすべてembARC.orgから入手していただけます。同サイトの「Embedded Linux Projects」セクションにアクセスしてください。

まとめ

プロジェクトに必要な機能を制約の大きい組込みシステムに実装するには、軽量化した組込みLinuxディストリビューションをビルドする必要があります。こうした目的に利用できるビルド・システムはいくつかありますが、多数のパッケージを利用しながら柔軟なカスタマイズを行いたい場合は、Yocto Projectが最適です。もう少し手軽に利用できるビルと・システムとしては、Buildrootなどがあります。

 

関連情報