Wind River Linuxは、ソースコードベースの「Wind River Linux」と、バイナリディストリビューションの「Wind River Linux Distro」から選択できます。本記事は、ソースコードベースの「Wind River Linux」に焦点を当ててご紹介します。Wind River Linuxは、組込み製品の限られたリソースを無駄なく効率的に活用し、高付加価値のアプリケーションを支えるLinuxディストリビューションを作成可能な商用組込みLinuxです。アプリケーションやミドルウェアの変更はもちろん、デバイスドライバやカーネルをチューニングすることもできるほか、カスタマイズされたハードウェア上で動作するLinuxディストリビューションを作成できることもWind River Linuxのメリットです。
本記事では無償版のWind River Linux Distroを使ったWind River Linuxの利用手順をご紹介します
予算やリードタイムの関係から、半導体製品の実機をすぐに入手することが難しい場合もあります。実際、みなさんも新しい実機がなかなか届かないなど、お困りになったことはあるのではないでしょうか?Wind River Linuxを使ってみよう!の第2回では、QEMUを使って実機なしでソースコードベースのWind River Linuxを動かす方法をご紹介します。ぜひご覧いただき、実際にWind River Linuxに触れてみてください。Wind River Linuxの詳細は、下記の「Wind River Linuxが選ばれる理由」をご参照ください。
ソースコードからLinuxディストリビューションを作成できる
Wind River Linuxのビルドシステム
Wind River Linux:Yocto Project互換の組込みLinuxビルドシステム
Wind River LinuxではLinuxディストリビューションを、Yocto Project互換のビルドシステムにより作成します。Yocto Projectのビルドシステムは、Recipe、Layer、DISTRO、MACHINEという設定項目により、作成するLinuxディストリビューションの構成を決定します。Wind River Linuxのビルドシステムはこれらに加えて、Yocto Projectよりも簡単にアプリケーションやミドルウェア、ライブラリを統合できるWRTEMPLATEという設定項目を有しています。それぞれの設定項目の役割を以下に示します。
- Recipe : ソースコードを収集してビルドする方法を定義する。
- Layer : Recipeを統合し、実行ファイルと関連するライブラリの組み合わせを定義する。
- WRTEMPLATE:高度なアプリケーションの構築をより円滑にするため、Layerをまたいで機能を統合するWind River Linux独自のカスタマイズ機能。アプリケーションに必要なライブラリだけでなく、連携するアプリケーションや関連するミドルウェアまで含めた構成を定義できる設定項目。WRTEMPLATEは"feature/*"と命名される。
- DISTRO : Linuxディストリビューションをカスタマイズする基となるLinuxディストリビューションのテンプレートを定義する。
- MACHINE : 個別のハードウェアに対応したBSPを定義する。
Recipe、Layer、WRTEMPLATE、DISTRO、MACHINEの関係図
Recipe
Recipeは最も細かな粒度の設定項目で、ソースコードからアプリケーションやライブラリといったコンポーネントをビルドする方法を定義します。Wind River Linuxのビルドシステムは、Recipeに記載されたURL、Gitリポジトリ、ローカルファイルシステムからソースコードを入手し、ターゲットデバイス用(例:Arm 64-bit用)にコンパイルします。
Layer
Layerは、Recipeによって生成されたアプリケーションとライブラリを統合し、アプリケーションを実行するために必要最小限となるソフトウェアのセットを定義します。例えば、Layerにはmeta-networkingやmeta-webserverなどがあります。依存関係のあるプログラムのRecipeを、Layerにより統合することで、開発者はライブラリの依存関係に頭を悩ませることなく、アプリケーションを簡単にターゲットデバイスへインストールすることができます。なお、Layerには多数のRecipeが含まれていますが、そのすべてがビルドされるわけでなく、デフォルトで有効なRecipeのみがビルドされ、インストールされます。デフォルトで無効なRecipeを含める場合は、設定ファイルに変更を加える必要があります。
WRTEMPLATE
WRTEMPLATEはWind River Linuxが独自に定義するコンフィグレーション機能です。WRTEMPLATEはLayerをまたぐ設定項目であり、アプリケーションとライブラリだけでなく、アプリケーションに依存する別のアプリケーションやミドルウェアまで含んだ構成を定義します。これにより、導入したい機能にあわせた機能名(下表はその一例)を設定ファイルに追記するだけで、複数のアプリケーションが連携する高度なシステムを、簡単に構築することができます。
WRTEMPLATEの一例 | 概要 |
---|---|
feature/gdb | デバッグ機能 |
feature/docker | コンテナ機能 |
feature/ntp | 時刻同期機能 |
feature/selinux | セキュリティ機能 |
feature/xfce | GUI機能 |
DISTROとMACHINE
DISTROとMACHINEは、すべてのプログラムを実行するための土台を定義します。DISTROは、Linuxディストリビューションの雛形を定義します。プログラムの実行に不可欠なLinuxカーネルをはじめ、カーネルモジュールや基本的なライブラリが含まれています。MACHINEは、BSPを定義します。プログラムとターゲットデバイスのハードウェアを結合する役割を担います。
DISTROの一例 | 概要 |
---|---|
wrlinux | Wind River Linux LTS |
wrlinux-graphics | Wind River Linux Graphics LTS |
wrlinux-tiny | Wind River Linux Tiny LTS |
nodistro | OpenEmbedded |
MACHINEの一例 | 概要 |
---|---|
bcm-2xxx-rpi4 | Raspberry Pi 4向けのBSP |
qemuarm | QEMUで作成したArm 32-bit仮想マシン向けのBSP |
qemuarm64 | QEMUで作成したArm 64-bit仮想マシン向けのBSP |
自作Linuxディストリビューションをビルドして実行する
動画:ソースコードでゼロからビルドするYoctoベースの組込みLinuxディストリビューション
※動画は LTS21 となっておりますが、LTS22 も類似の手順で実行可能です。
それでは、Wind River Linuxを使ってArm 64-bit向けのLinuxディストリビューションを作成し、実行してみましょう。実行するまでの手順は下図橙矢印の通りです。なお、今回も前回同様にQEMUにより作成した仮想Raspberry Pi 4上でLinuxディストリビューションを実行します。QEMUの概要については「ホストPCのみでWind River Linuxを実行する」をご参照ください。
- 開発/実行環境の準備
- 開発環境を構築する(下図:橙①)
- ターゲットデバイス用のビルドシステムを取得する(下図:橙②)
- Linuxディストリビューションをカスタマイズする(下図:橙③)
- Linuxディストリビューションをビルドする(下図:橙④、bitbakeによる)
- 仮想SDカードへデプロイする(下図:橙⑤):ただし本手順では橙④により自動的に実施される
- Linuxディストリビューションを実行する(下図:橙⑥)
ターゲットデバイス上でLinuxを実行するまでの手順:Wind River Linux(橙)とWind River Linux Distro(赤)
開発/実行環境の準備
Wind River Linuxを使用するには、LinuxをインストールしたホストPCが必要です。推奨されるホストPCの要件は「Wind River Linux Release Notes:Host System Recommendations and Requirements」をご確認ください。また、「Necessary Linux Host System Libraries and Executables」に掲載されているパッケージも事前にインストールしてください。今回の動画ではホストPCにUbuntu Desktop 20.04(x86 64bit)を選択しています。
開発環境を構築する
まず、開発環境を構築します。Wind River LinuxのWEBページにて「Wind River Linux を評価(ビルドシステム含む)」をクリックし、ダウンロードに必要な項目を入力後、使用許諾契約を確認し、送信をクリックしてください(右図)。
入力後、GitHubのURLがWEBサイト上に表示されます。このURLにアクセスするとGitHubページが開きますので、gitコマンドに指定するclone用のURLを取得してください(右図)。clone用URLと、Wind River Linux LTS22を示すブランチ名"WRLINUX_10_22_BASE"を付与した、git cloneコマンドを実行し、開発環境を構築します。以下は、ホームディレクトリの中に作業用ディレクトリ"codebuild"を作成し、codebuild内に開発環境を構築する例です。
ホストPC上での操作
$ mkdir -p ~/codebuild
$ cd ~/codebuild
$ git clone –branch WRLINUX_10_22_BASE \
<GitHubより取得したclone用URL>
ターゲットデバイス用のビルドシステムを取得する
最初に利用する開発ツールは"setup.sh"です。まずsetup.shに"--list-machines"オプションを指定し実行すると、Wind River Linuxが対応しているBSPのリストが表示されます。このリストの中からターゲットデバイスとするBSP名を指定して、ビルドシステムを構築します。今回のターゲットはQEMUで作成した仮想的なRaspberry Pi 4のため、BSPとして"bcm-2xxx-rpi4"を選択します。setup.shに"--machines bcm-2xxx-rpi4"オプションを指定し、コマンドを実行するとRaspberry Pi 4用のビルドシステムが完成します。
setup.shの詳細は「The setup.sh Tool」をご参照ください。
ホストPC上での操作
$ ./wrlinux-x/setup.sh --list-machines
<利用可能なBSPの一覧が表示される>
$ ./wrlinux-x/setup.sh --machines bcm-2xxx-rpi4
<Raspberry Pi 4に対応するBSPを入手する>
開発用ファイルを入手した後、". ./environment-setup-x86_64-wrlinuxsdk-linux"コマンドを実行してください。このコマンドにより、開発作業に必要なPATHがシステムに追加されます。続いて". ./oe-init-build-env <ディレクトリ名>"のコマンドを実行すると、Linuxディストリビューションをカスタマイズするための設定ファイルを含む、ビルド用ディレクトリが作成されます。以下の例では、qemubuildという名前のビルド用ディレクトリを作成しています。
ホストPC上での操作
$ . ./environment-setup-x86_64-wrlinuxsdk-linux
$ . ./oe-init-build-env qemubuild
$ pwd
/home/UserName/qemubuild/build
$ ls
conf
- qemubuild: ビルド作業行うためのディレクトリ
Linuxディストリビューションをカスタマイズする
最初に利用する開発ツールは"setup.sh"です。まずsetup.shに"--list-machines"オプションを指定し実行すると、Wind River Linuxが対応しているBSPのリストが表示されます。このリストの中からターゲットデバイスとするBSP名を指定して、ビルドシステムを構築します。今回のターゲットはQEMUで作成した仮想的なRaspberry Pi 4のため、BSPとして"bcm-2xxx-rpi4"を選択します。"setup.sh"に"--machines bcm-2xxx-rpi4"オプションを指定し、コマンドを実行するとRaspberry Pi 4用のビルドシステムが完成します。
ホストPC上での操作
$ vi ./conf/local.conf
BB_NO_NETWORK ?= '0'
MACHINE ?= " bcm-2xxx-rpi4"
Linuxディストリビューションをビルドする
Linuxディストリビューションのビルドには"bitbake"コマンドを利用します。bitbakeコマンドの引数には、標準のビルドを意味する"wrlinux-image-std"を指定します。また、コマンドのオプションとして"-c populate_sdk_ext"を指定します。このオプションにより、Linuxディストリビューション上で実行可能なアプリケーションを開発するためのSDKを生成することができます。bitbakeコマンドを実行すると約8000個のソースコードが次々にダウンロードされ、統合されます。完了までしばらくお待ちください。
ホストPC上での操作
$ bitbake wrlinux-image-std -c populate_sdk_ext
GitHub版ではパッケージをオープンソースコミュニティから収集するため、オープンソースコミュニティのパッケージ配布状況が変わるとビルドができなくなることがあります。Wind River Linuxの有償版を利用することにより、パッケージの収集先がウインドリバー社のサーバーとなるため、ウインドリバーが十分に検証した高品質なパッケージを、常時入手できるようになります。
ビルド完了後、エラーが発生していないか、ターミナルのメッセージをご確認ください。エラーが発生している場合は、エラー内容がビルド画面に赤字で表示されます。ビルド成功後、ビルドの成果物は下記のディレクトリへ格納されます。なお、QEMUで実行するイメージファイルもこのディレクトリに含まれています。そのため、QEMUで実行する場合、生成物をデプロイする作業は不要です。
ホストPC上での操作
$ ls tmp-glibc/deploy/images/bcm-2xxx-rpi4/ #生成されたLinuxディストリビューション
$ ls tmp-glibc/deploy/sdk/ #開発ツール一式
Linuxディストリビューションを実行する
それではRaspberry Pi 4向けにビルドしたイメージをQEMUの仮想Raspberry Pi 4上で実行してみましょう。実行には"runqemu"コマンドを使います。オプションにはMACHINE名"bcm-2xxx-rpi4"を指定します。runqemuコマンドによりQEMUの実行が開始されると、右図のようにCUIのWind River Linuxが起動します。
ホストPC上での操作
$ runqemu bcm-2xxx-rpi4
ソースコードからビルドしたLinuxディストリビューションをQEMUで実行する(CUI)
GUIを備えたLinuxディストリビューションをビルドして実行する
それではLinuxディストリビューションに変更を加えてみましょう。ここではGUI(XFCE)を備えたLinuxディストリビューションを作成します。GUIを実現するための画面表示機能には様々なライブラリやデータ、設定項目が絡んでくるため、大変に思うかもしれませんが、実は前述したLinuxディストリビューションの作成方法とほぼ同じです。変更は以下に示すわずか2つです。
1つ目の変更は"conf/local.conf"の内容です。GUI機能を統合するためにDISTROに"wrlinux-graphics"を指定し、WRTEMPLATEにGUI機能を提供する"feature/xfce"を指定してください。
2つ目の変更はbitbakeのオプションです。GUI機能を有効化するため"wrlinux-image-std-sato"を指定します。
以上でGUIを備えたLinuxディストリビューションを作成することができます。CUI同様に、Linuxディストリビューションのビルドにはbitbakeを使用し、実行にはrunqemuコマンドを使用します。
詳細は「Configuring and Building an Image with a Graphical Desktop」をご参照ください。
ソースコードからビルドしたLinuxディストリビューションをQEMUで実行する(GUI)
$ vi. ./conf/local.conf
BB_NO_NETWORK ?= '0'
DISTRO ?= "wrlinux-graphics"
WRTEMPLATE ?= "feature/xfce"
MACHINE ?= "bcm-2xxx-rpi4"
…
$ bitbake wrlinux-image-std-sato -c populate_sdk_ext
…
$ runqemu bcm-2xxx-rpi4
以上が、Wind River LinuxによりソースコードからLinuxディストリビューションを作成し、実行する手順です。x86アーキテクチャでの確認やHello Worldサンプルアプリケーションの作成などWind River Linuxの各種動作手順は「Wind River Linux Platform Development Quick Start, LTS 22」に記載しておりますので、ぜひダウンロードしてください。
次回の記事では、SDKを利用してLinuxアプリケーションを開発する方法について、ご紹介します。