エッジは、AI/機械学習といったインテリジェントな機能をただ実行できるだけでなく、航空宇宙・防衛、産業機器、医療機器、自動車、通信といった品質に妥協が許されない分野への対応が求められています。また組込み製品の製品ライフサイクルは非常に長いことから、長期にわたってメンテナンスをし続けなければなりません。こうした課題を解決する製品が、商用組込みLinuxの「Wind River® Linux」です。

Wind River Linuxを使ってみよう!の第一回では、昨今の半導体不足により実機が手に入れにくい状況が続いておりますので、QEMUを使って実機なしでWind River Linuxを動かしてみる方法をご紹介します。ぜひご覧いただき、実際にWind River Linuxに触れてみてください。Wind River Linuxの詳細は下記の「Wind River Linuxが選ばれる理由」をご参照ください。



選べる2つの提供形態:Wind River LinuxとWind River Linux Distro

Wind River Linuxの提供形態には「Wind River Linux」と「Wind River Linux Distro」の2種類があります(下表)。下の図では橙色が「Wind River Linux」、赤色が「Wind River Linux Distro」の作業を示しています。

Wind River Linuxは、ソースコードベースのLinuxディストリビューションの作成環境を提供します(下図:橙①、②)。アプリケーションやミドルウェアのソースコードはもちろん、カーネルやデバイスドライバなどのソースコードも変更することができます(下図:橙③)。あらゆるカスタマイズにより、独自のハードウェアへの対応や、リソースを一切無駄なく使えるLinuxディストリビューションを作成可能な配布形態です。なお、Wind River Linuxは、ソースコードから開発するため、Linuxのビルド作業が発生します(下図:橙④)。ビルド後、作成されたLinuxディストリビューションをUSBストレージデバイスまたはmicro-SDカードに書き込み (下図:橙⑤)、ターゲットデバイス向けの組込みLinuxディストリビューションを準備できます(下図:橙⑥)。

一方、Wind River Linux Distroは、市場までの投入時間を短縮できる、ビルド済みのバイナリディストリビューションによる提供形態です。イメージをダウンロードし(下図:赤①)USBストレージデバイスまたはmicro-SDカードに書き込むだけで(下図:赤②)ターゲットデバイス向けの組込みLinuxディストリビューションを準備できます(下図:赤③)。なお、Wind River Linux Distroには豊富な機能を盛り込んだfull imageと、OSに必要最小限な機能のみを備えたminimal imageの2種類があります。お客様の製品に最適なリリースを選択することができます。

hypervisor

ターゲットデバイス上でLinuxを実行するまでの手順:Wind River Linux(橙)とWind River Linux Distro(赤)


また、Wind River Linuxには有償版と無償版があります。有償版の特長は、ウインドリバーの提供するサポート&メンテナンスサービスを利用できる点です。無償版にはウインドリバーによるサポート&メンテナンスサービスがありません。なお、新しいWind River Linux Distroの有償版でサポートされているBSP(ボードサポートパッケージ)についてはお問い合わせください。

hypervisor

本記事では無償版のWind River Linux Distroを使ったWind River Linuxの利用手順をご紹介します



Wind River LinuxとWind River Linux Distro、どちらを選ぶか?

Wind River Linuxの優れたカスタマイズ性と、Wind River Linux Distroの市場までの投入時間を短縮できるメリット、いずれも魅力的に感じると思います。そこで、お客様の製品開発に、どちらの製品が向いているかを以下に整理しました。どちらのWind River Linuxを選んだらよいか迷った際に、参考にしてください。

Wind River Linux を推奨するお客様 Wind River Linux Distroを推奨するお客様
  • フルカスタマイズされた独自のLinuxが欲しい
  • カーネルの構成を完全に制御したい
  • カーネルの変更をすべて追跡したい
  • 経験豊富なLinux開発チームがある
  • カスタマイズされたハードウェアを利用する
  • RAMやストレージのフットプリントを可能な限り小さくしたい
  • Linux本体には最小限の変更しか加えない
  • スピードとコストを重視する
  • Linuxを構築した経験がほとんどない
  • ソフトウェアをビルドすることなく評価ボードをすぐに利用したい
  • ラピッドプロトタイピングに利用したい
  • コンテナのベースイメージとして利用したい

まずは、無償版のWind River Linuxを評価にご利用ください。最初は無償版をご利用いただき、有償版へ移行することも可能です。ウインドリバーまでぜひご相談ください。



Wind River Linux Distroを使ってみよう!
ホストPCのみでWind River Linuxを実行する

それでは、ここからQEMUを使って実機なしでWind River Linuxを動かす方法をご紹介します。今回は、ビルド済みのバイナリディストリビューションを使って簡単にスタートできる、無償版のWind River Linux Distroを使ったWind River Linuxの利用手順をご紹介します。

QEMUを使って、ターゲットデバイス無しでOSを起動する

QEMUはホストPC上に仮想的なターゲットデバイスを作ることのできる開発ツールです。QEMUを使うことで、ターゲットデバイスなしにOSを評価したり、アプリケーションを開発することができます。ウインドリバーでは、Wind River Linux Distroのminimal image、full imageと併せて提供しているDevelopment SDKにQEMUを同梱しています。QEMUを利用することにより、Wind River Linux Distroを基盤とするアプリケーションの開発により早く着手することができ、市場までの投入時間を短縮できます。 QEMUにより、高価なターゲットデバイスを開発者の人数分購入するコストや、ハードウェアが製造されるまでの待ち時間は一切不要です。


QEMUのアーキテクチャ

QEMUがホストPC上に作成する仮想ターゲットデバイスのアーキテクチャを下図に示します。これはQEMUによりRaspberry Pi 4をエミュレートした例です。QEMUは仮想CPUアーキテクチャの種類やメインメモリのサイズといったコンピューティングデバイスの基本要素の設定に加えて、仮想SDカード、仮想UART(シリアルコンソール)、仮想モニター、仮想ネットワークデバイスなどを定義します。仮想SDカードには、通常のSDカードと同様にOSをインストールすることができます。また、仮想モニターを利用したGUIの表示や、仮想ネットワークデバイスを介したインターネット接続も可能です。加えて、仮想ターゲットデバイスが起動する際に利用するBIOSを選択することができます。Wind River Linux Distroでは、minimal imageとfull imageのそれぞれにQEMUのBIOSを同梱しています。Wind River Linux Distroを実行する際は、これらのBIOSを選択してください。

hypervisor

QEMUにより生成できるアーキテクチャの一例(仮想Raspberry Pi 4)



ホストPCのみでArm 64bit版Wind River Linuxを実行する

それではQEMUを使ってホストPCのみで、Raspberry Pi 4(CPU:Cortex-A57)向けのWind River Linux Distro を実行してみましょう。実行までの手順は以下の通りです。手順の詳細は動画をご覧ください。

  • 開発/実行環境の準備
  • バイナリイメージとSDKのダウンロード
  • SDKのインストール
  • バイナリイメージの展開
  • 仮想SDカードの作成とWind River Linux Distroのインストール
  • Wind River Linux Distroの起動と初期化
  • QEMUの起動パラメータの解説


hypervisor


開発/実行環境の準備

Wind River Linux Distroを実行するには、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)を選択しています。



バイナリイメージとSDKのダウンロード

Wind River Linux Distroを入手するには、まず、WEBブラウザで「Wind River Linux Distro ダウンロード」へアクセスします。必須項目を入力した後、Linux Boardのリストからターゲットデバイスを選択します。今回は仮想的なRaspberry Pi 4をターゲットデバイスとするため「Raspberry Pi 4」を選択します。使用許諾契約を確認し、送信をクリックすると、指定したメールアドレスにバイナリイメージのダウンロードリンクが含まれたメールが届きます。

メールにはminimal imageとfull imageの両方のバイナリイメージのダウンロードリンクが含まれています。利用したいイメージのリンクをクリックし、バイナリイメージをダウンロードしてください。minimal imageを選択した場合はtarget-minimal-bcm-2xxx-rpi4.tar.bz2が、full imageを選択した場合はtarget-full-bcm-2xxx-rpi4.tar.bz2がローカルに保存されます。

加えて、仮想環境でイメージを起動できるQEMUやLinuxアプリケーションの開発環境(※)が含まれているDevelopment SDKもダウンロードしましょう。sdk-bcm-2xxx-rpi4.tar.bz2がローカルに保存されます。ダウンロードしたすべてのファイルはホストPCのホームディレクトリへ格納してください。

なお、メールには、Wind River Linux Distroに含まれるすべてのパッケージのソースコード(Source Code)やWind River Linux Distroクイックスタート(日本語版)のダウンロードリンクも含まれています。

Why Wind River Linux

※詳細な利用方法については「Wind River Linux Distroクイックスタート」をご参照ください。
※後日、チュートリアル動画をアップロードする予定です。



SDKのインストール

ホームディレクトリに格納したsdk-bcm-2xxx-rpi4.tar.bz2を下記の手順で展開します。展開するとSDKのインストール用スクリプト「wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.sh」を入手できます。インストール用スクリプトを実行するために「chmod a+x」コマンドで実行権限を付与します。

以上でSDKをインストールする準備が整いましたので、インストール用スクリプトを実行します。はじめにインストール先のディレクトリを確認されます。他のユーザーに影響を与えないよう、自身のホームディレクトリ以下のディレクトリを選択するとよいでしょう。下記の例では「/home/USERNAME/wrlinux-sdk/21.20」を指定しています。その後、インストールが完了すると、SDKを使う前に必ず実行するコマンドが表示されます。下記の例では「. /home/USERNAME/wrlinux-sdk/21.20/environment-setup-cortexa72-wrs-linux」となっています。SDKを利用するたびに実行するコマンドです。控えておきましょう。

                        
$ cd ~ 
$ tar jxvf sdk-bcm-2xxx-rpi4.tar.bz2 
$ cd sdk-bcm-2xxx-rpi4 
$ ls . 
appsdk.README.md 
config_bcm-2xxx-rpi4 
sdk.README.md 
wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.host.manifest 
wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.sh 
wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.target.manifest 
$ chmod a+x wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.sh 
$ ./wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.sh 
========================================================= 
Enter target directory for SDK 
(default: /opt/windriver/wrlinux-graphics/21.20): /home/USERNAME/wrlinux-sdk/21.20/ 
You are about to install the SDK to
"/home/USERNAME /wrlinux-sdk/21.20". Proceed [Y/n]? Y 
… 
Each time you wish to use the SDK in a new shell session, 
you need to source the environment setup script e.g. 
 $ . /home/USERNAME/wrlinux-sdk/21.20/environment-setup-cortexa72-wrs-linux 
$ 
                        
                    
ファイル名 用途
appsdk.README.md アプリケーション開発に関するREADMEファイルです。
sdk.README.md SDK全体に関するREADMEファイルです。
wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.sh SDKインストール用スクリプトです。
config_bspName SDKに対応するイメージファイル(minimal image / full image)に統合したパッケージ名とバージョン情報を含むテキストファイルです。
wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.target.manifest パッケージマニフェストとして、SDKに対応するイメージファイル(minimal image / full image)にインストールされたすべてのパッケージの情報を含むテキストファイルです。
wrlinux-graphics-10.21.20.11-glibc-x86_64-bcm_2xxx_rpi4-wrlinux-image-full-sdk.host.manifest パッケージマニフェストとして、SDKを作成する際に利用したホストPCのパッケージ情報を含むテキストファイルです。

  • bspName: full-bcm-2xxx-rpi4またはminimal-bcm-2xxx-rpi4



バイナリイメージの展開

ダウンロードしたfull imageまたはminimal imageファイル(例:full imageの場合はtarget-full-bcm-2xxx-rpi4.tar.bz2)を、下記の手順で展開すると、tar.gz形式に圧縮されたWind River Linuix Distroのバイナリイメージを入手することができます。また、展開後のファイルにはイメージファイルに関する情報が記されたテキストファイルなども含まれています。以下はfull imageを展開した例となります。

                        
$ cd ~ 
$ tar jxvf target-full-bcm-2xxx-rpi4.tar.bz2 
$ cd target-full-bcm-2xxx-rpi4 
$ ls . 
config_bcm-2xxx-rpi4 
qemu-u-boot-bcm-2xxx-rpi4.bin 
sha256sum.txt 
target_bcm-2xxx-rpi4.README.md 
wrlinux-image-full-bcm-2xxx-rpi4.manifest 
wrlinux-image-full-bcm-2xxx-rpi4.ustart.img.bmap 
wrlinux-image-full-bcm-2xxx-rpi4.ustart.img.gz 
                        
                    
ファイル名 用途
imageType.README.md イメージのREADMEファイルです。
imageType.ustart.img.gz イメージをデバイスにインストールするためのバイナリイメージが圧縮されたファイルです。
imageType.ustart.img.bmap バイナリイメージの各領域にどのデータが格納されているかを記したXMLファイルです。
imageType.manifest パッケージマニフェストとして、バイナリイメージにインストールされたすべてのパッケージのリストを含んだテキストファイルです。
config_bspName イメージファイルを作成する際に利用したパッケージと、各パッケージのバージョン情報を含んだテキストファイルです。
qemu-u-boot-bspName.bin QEMU上でバイナリイメージを実行する際に使用する、コンパイル済みのバイナリ形式のBIOSファイルです。
sha256sum.txt バイナリイメージの完全性を確認するためのチェックサムファイルです。

  • imageType:wrlinux-image-full-bcm-2xxx-rpi4またはwrlinux-image-minimal-bcm-2xxx-rpi4
  • bspName: full-bcm-2xxx-rpi4またはminimal-bcm-2xxx-rpi4


仮想SDカードの作成とWind River Linux Distroのインストール

QEMU用の仮想SDカードを作成し、仮想SDカードの中にWind River Linux Distroのバイナリイメージを書き込みます。


仮想SDカードの作成

QEMU用の仮想SDカード(仮想ストレージ)は「qemu-img create」コマンドで作成します。コマンドのオプションには、ファイルの内容がそのままストレージ上のデータ列となる「raw」を選択し、仮想ストレージを作成するパスとファイル名を指定し、ストレージのサイズを入力します。以下の例では8GBの仮想SDカード「img」を作成しています。

                        
$ . /home/USERNAME/wrlinux-sdk/21.20/environment-setup-cortexa72-wrs-linux 
$ qemu-img create -f raw path_to_vsd/img 8G 
$ ls path_to_vsd/ 
img 
                        
                    

  • path_to_vsd:仮想SDカードを格納するディレクトリへのパス

Why Wind River Linux


Wind River Linux Distroのインストール

次に「zcat」コマンドと「dd」コマンドを利用し、入手したWind River Linux Distroのバイナリイメージを仮想SDカードへ書き込みます。このとき「dd」コマンドには「conv=notrunc」オプションを付与してください。このオプションを指定しなかった場合、仮想SDカードの容量がバイナリイメージのサイズに切り詰められてしまい、起動時にストレージ容量不足のエラーが発生します。

                        
$ ls path_to_vsd/ 
img 
$ ls path_to_img/ 
imageType.ustart.img.gz 
$ zcat path_to_img/imageType.ustart.img.gz | sudo dd of=path_to_vsd/img conv=notrunc 
                        
                    

  • path_to_vsd:仮想SDカードが含まれているディレクトリへのパス
  • path_to_img:wrlinux-image-*-bcm-2xxx-rpi4が含まれているディレクトリへのパス(~/ target-full-bcm-2xxx-rpi4 または ~/ target-minimal-bcm-2xxx-rpi4)
  • imageType:wrlinux-image-full-bcm-2xxx-rpi4またはwrlinux-image-minimal-bcm-2xxx-rpi4

Wind River Linux Distroの起動と初期化

仮想Raspberry Pi 4を作成するためのQEMUコマンド

それでは、いよいよホストPC上でArm 64bit、Wind River Linux Distro LTS21 for Raspberry Pi 4を実行してみましょう。実行するためのコマンドを以下に示します。非常に長いコマンドですが、それぞれのオプションの意味を下表で確認いただくと、理解しやすいと思います。コマンドを実行すると、仮想Raspberry Pi 4が起動します。

                        
$ . /home/USERNAME/wrlinux-sdk/21.20/environment-setup-cortexa72-wrs-linux 
$ qemu-system-aarch64 -machine virt -cpu cortex-a57 \
-device virtio-net-device,netdev=net0 -netdev user,id=net0 -m 512 \
 -bios path_to_img/qemu-u-boot-bcm-2xxx-rpi4.bin -device virtio-gpu-pci \
-serial stdio -device qemu-xhci -device usb-tablet -device usb-kbd \
-drive id=disk0,file= path_to_vsd/img,if=none,format=raw -device virtio-blk-device,drive=disk0 
                        
                    
Why Wind River Linux

設定値 概要
qemu-system-aarch64 Arm 64bitの仮想ターゲットデバイスを作成
-machine virt -cpu cortex-a57 仮想CPUの選択(Coretex-A57)
-device virtio-net-decremented=net0 -netdev user,id=net0 仮想ネットワークデバイスの設定
-m 512 仮想メモリの設定(512MB)
-bios path_to_img/qemu-u-boot-bcm-2xxx-rpi4.bin BIOSの指定
-device virtio-gpu-pci 仮想モニターの設定
-serial stdio 仮想UARTの設定
-device qemu-xhci
-device usb-tablet
-device usb-kbd
仮想キーボード&マウスの設定
-drive id=disk0,file= path_to_vsd/img,if=none,format=raw
-device virtio-blk-device,drive=disk0
仮想SDカードの設定

  • path_to_img:wrlinux-image-*-bcm-2xxx-rpi4が含まれているディレクトリへのパス(~/ target-full-bcm-2xxx-rpi4 または ~/ target-minimal-bcm-2xxx-rpi4)
  • path_to_vsd:仮想SDカードが含まれているディレクトリへのパス



起動と初期化

仮想Raspberry Pi 4が起動すると、仮想SDカード内のWind River Linux Distroがシステムの初期化を開始します。初期化完了後、Wind River Linux Distroが起動します。full imageの場合はGUIのログイン画面が、minimal imageの場合はCUIのログイン画面が表示されます(下図)。ユーザー名「root」でログインすると、最初に設定したいパスワードを聞かれますので入力します。以降は、通常のLinux同様に操作することができます。

hypervisor

Wind River Linuxのログイン画面(左:full image、右:minimal image)



Wind River Linuxにパッケージを追加して機能を拡充する

Wind River Linux Distroのfull imageはGUIを備えており、グラフィカルな組込み製品を簡単に開発することができます。一方、標準でCUIとなっているminimal imageも、追加パッケージをインストールすることによりGUIが利用可能です。ここではWind River Linuxにパッケージを追加して機能を拡充する手順をご紹介します。



パッケージを追加する

Wind River Linuxでは、OSTreeという機能によりシステムを構成するファイルシステムツリー全体が管理されています。デフォルト状態(インストール直後の状態)では、OSTreeがパッケージの追加や削除などの構成変更をロックしています。そのため、minimal imageにGUIをインストールするには、まずOSTreeの構成変更のロックを解除してから、パッケージを追加する必要があります。なお、OSTreeは常にシステムへの変更を記録しているため、システムをロールバックすることもできます(後述)。

なお、GUIのパッケージを追加する操作では、操作中に仮想モニターの表示モードが変更され、表示が失われます。そのため、仮想モニターを使ったインストール操作はできません。そのため、以降の作業は仮想UARTから実施してください(下図)。

hypervisor

GUIのパッケージは仮想UARTを使って追加します



GUIのパッケージを追加するには、インターネット接続が必要です。まず、「ifconfig」コマンドを利用してRaspberry Pi 4に割り当てられたIPアドレスを確認してください。ネットワーク上にDHCPサーバがない場合は手動でIPアドレスを設定します。

                        
# ifconfig
                        
                    

次に、OSTreeの構成変更ロックを解除します。解除には「ostree admin unlock」コマンドを使います。

                        
# ostree admin unlock –hotfix 
                        
                    

構成変更ロックの解除後、「dnf」コマンドでGUIの追加パッケージをインストールします。

                        
# dnf install -y packagegroup-xfce-base \
packagegroup-core-x11-base gsettings-desktop-schemas \
wr-themes kernel-module-*
                        
                    
パッケージ名 用途
packagegroup-xfce-base XFCEデスクトップ機能を追加する。
packagegroup-core-x11-base 描画機能の基盤であるX11を追加する。
gsettings-desktop-schemas デスクトップの様々なコンポーネントから共有される設定用のGSettings chemasのコレクションを追加する。
wr-themes Wind Riverのデスクトップテーマをインストールする。
kernel-module-* カーネルモジュールをインストールする。


パッケージのインストールが完了した後、「systemctl set-default」コマンドで、デフォルトの起動モードをGUIに設定し、「reboot」コマンドでシステムを再起動します。再起動後、GUIのログイン画面が表示されます。

                        
# systemctl set-default graphical.target 
# sudo reboot 
                        
                    
Why Wind River Linux

再起動後、GUIを利用できます

パッケージ追加前の状態へとロールバックする

Wind River Linuxでは、OSTreeがシステムを構成するファイルシステムツリー全体を管理しているため、GUIパッケージの追加をロールバックすることができます。また、Wind River Linuxにはロールバック用のスクリプト「ostree_reset.sh」が同梱されています。今回はこのスクリプトを使います。なお、ロールバックに伴い、仮想モニターの表示モードがGUIよりCUIに変更されるため、以下の手順は仮想UART上で操作する必要があります。

システムのロールバック手順は、まず「ostree_reset.sh -n」を実行し、ロールバックにより、消去または更新されるパッケージ、実行ファイル、設定ファイルを確認します。これをドライランと呼びます。ドライランに含まれているファイルのうち、ロールバックしたくないものがあればバックアップしましょう。最後に「ostree_reset.sh -F」でロールバックします。

                        
# systemctl set-default multi-user.target 
# sudo reboot 
# ostree_reset.sh -n 
#### 消去または更新されるパッケージ、実行ファイル、設定ファイルリストを表示 
# ostree_reset.sh -F 
                        
                    

以上が、Wind River Linux Distroを実行する手順となります。x86アーキテクチャでの確認やHello Worldサンプルアプリケーションの作成などWind River Linux Distroの各種動作手順は「Wind River Linux Distroクイックスタート」に記載しておりますので、ぜひダウンロードしてください。

今回は、Wind River Linux Distroを使う手順をご紹介しました。 次回の記事では、ソースコードベースのビルドシステムを含む、Wind River Linuxを実行する手順についてご紹介します。

リソース