近年の組み込みシステム開発では、ソフトウェア開発だけでなく、サービスの要件を満たすようハードウェアにも手を加えるケースが増えてきています。ハードウェアの核となるCPUを再選定することも増えており、命令セットアーキテクチャ(Intel x86-64、Arm、PowerPC、etc.)を跨いだ変更を検討する開発も珍しくありません。また、同じArmアーキテクチャであったとしても、ISA(コア世代|例:Armv7からArmv8)の更新や、シングルコアからマルチコアへの移行といったように、ソフトウェア開発の地盤であるハードウェア構成は日々目まぐるしく変化し続けています。一方、これらの開発にはハードウェアの選定や検証に長い時間がかかるため、ハードウェアの完成を待ってから、ソフトウェア開発を始める従来型の手法では、開発期間が圧迫され、品質保証が難しくなる課題があります。
こうした課題を解決に導く、ハードウェアを待つことなくソフトウェアの開発に着手することのできる開発ツールがWind River Linux開発環境にも同梱されている「QEMU」です。QEMUは、開発用PC上で動作するプロセッサエミュレータです。CPUやメモリはもちろん、周辺ハードウェア(ペリフェラル)も模擬し、組み込みシステム向けにビルドしたソフトウェアを開発用PC上で実行することができます。今回の初心者講座では、組み込みLinux開発におけるQEMUの導入効果を解説し、実際の使い方を動画にて紹介いたします。
また、今回は組み込みシステム開発にて採用されている、開発するアーキテクチャと実行するアーキテクチャが異なるクロス開発(クロスプラットフォーム開発)についても解説いたします。
8本すべて無料!組み込みLinuxウェビナー
組み込みLinuxの基礎知識から、Docker/コンテナ技術の開発方法、さらには起動シーケンスを理解し、実際のLinuxアプリ開発も学べる。開発デモはRaspberry Pi 4を使用しているので、受講後すぐにお試しいただくことで可能です。
視聴申込はこちらから
QEMU×組み込みLinuxを理解し、クロス開発を成功させる
Intel x86-64がデファクトスタンダードとなっている汎用系(オープン系)のシステムとは異なり、組み込みシステムでは機能/性能/入手性/原価などの目標を達成するため、システムの中心であるCPU/SoCを含むすべてのハードウェア構成を製品ごとに大きく変更します。本節ではまず、組み込みシステムの開発手法であるクロス開発に触れ、続いてハードウェアが準備できていない時期からソフトウェアを先行開発できるエミュレータ「QEMU」について解説いたします。
クロス開発とは
Intel x86-64を代表とする汎用系のシステムでは、開発と実行を同じアーキテクチャ上で行います。これをネイティブ開発またはセルフ開発と言います。対して、組み込みシステムの開発では、開発と実行のアーキテクチャが異なるクロス開発と呼ばれる開発手法が採用されています(図1)。
クロス開発が採用される理由は、組み込みシステムのアーキテクチャはリソースが少ないという制限があるためです。これにより、実行するアーキテクチャ上に開発環境を構築できず、リソースに余裕のあるアーキテクチャを準備しなければソフトウェアを開発できません。一般的に開発用のアーキテクチャにはIntel x86-64と汎用OSを組み合わせたシステムが利用されます。汎用PC上で開発できるため、馴染みのある既存の開発ツールと多くのリソースにより効率的に開発できます。
クロス開発では、開発用PC上で実装/コンパイル/ビルドして生成した実行プログラムを最終製品あるいは最終製品に極めて近いハードウェアであるターゲットシステム上で実行します。開発するアーキテクチャと実行するアーキテクチャがクロスしていることから、クロス開発と呼ばれます(図2)。クロス開発で利用する開発用PCのアーキテクチャと異なるアーキテクチャの実行ファイルを生成するコンパイラのことをクロスコンパイラと呼びます。
第2回では、Intel x86-64の開発用PC上でArm 64bit用の組み込みLinuxディストリビューションを開発し、ターゲットシステム Raspberry Pi 4上でプログラムを実行しました。
クロス開発のメリット
クロス開発の最大のメリットは、開発環境が汎用系と同じであることから、汎用系の開発を支えてきた豊富な開発ツールを活用し、効率の良いシステム開発を推進できることです。そのため「扱いやすい組み込みシステムの開発環境」とは、開発をより効率化するツールを如何に組み合わせるかが重要です。Wind River Linux開発環境は、ターゲットシステムとして様々な組み込みシステムのアーキテクチャに対応しながら、開発環境として多彩な開発ツール/検証ツールを同梱するリッチな開発環境です。
組み込みLinux入門に最適な1冊
「市場投入までの期間の短縮」「サポートとメンテナンスコストの削減」「コンプライアンス問題への対応」「クラウドネイティブアーキテクチャとコンテナ技術」など、気になるTopicsを網羅したeBookが無料でダウンロードできます。是非ご覧ください。 無料のeBookをダウンロード
クロス開発により生成されるファイル
Wind River Linuxによるクロス開発の様子は「uname -a
」コマンド(ハードウェアアーキテクチャを確認するコマンド)や「file
」コマンド(実行ファイルがどのアーキテクチャ向けにビルドされているか)を使うとわかりやすいでしょう(図3)。
QEMU|プロセッサエミュレータによる実機不要の開発手法
QEMUはプロセッサエミュレータとして、ターゲットシステムに代わってプログラムを解読し、開発用PCの上であたかもターゲットシステムが動いているかのように見せるソフトウェアです。QEMUを使うことにより、ハードウェア開発段階におけるソフトウェア先行実装はもちろん、どのようなハードウェアが良いかをゼロから選定する開発段階では、Linuxディストリビューションを実際に実行し正当性/妥当性を検証することができます(図4)。
さらにQEMUは、PCやサーバのコンピューティングリソースにあわせて同時実行数をスケール可能なため、組み込みシステム開発への投資を最適化することができます。初回の開発に使ったコンピューティングリソースを次回の開発でも使うことができるのです。もちろん、QEMUはソフトウェアですので、組み込みボードのように製造のリードタイムに悩まされることもありません。
Wind River Linux開発環境に同梱されているQEMUのバリエーション
QEMUは、Wind River Linux開発環境にも同梱されています。Wind River Linux開発環境を入手するだけで、様々なアーキテクチャをエミュレートし、ハードウェアを準備することなくLinuxディストリビューションを開発することができます。図5は「./wrlinux-x/sertup.sh –list-machines all 」にて取得できる、Wind River Linux開発環境に同梱されているQEMUのリストです。
$ git clone https://github.com/WindRiver-Labs/wrlinux-x.git $ ./wrlinux-x/setup.sh --list-machines all > machines.txt $ cat machines.txt | grep qemu
開発環境にQEMUが同梱されていることによるメリット
QEMUは公式サイトからも入手可能ですが、様々なハードウェア構成に対応できるように機能が増改築され続けた結果、今では「どのようにインストールすれば、期待するハードウェア構成をエミュレートしてくれるのか」が分からない程に複雑化しています( 公式のインストールマニュアルを読みセットアップするには相当な鍛錬が必要)。
一方、Wind River Linuxと、その母体であるYocto Projectの開発環境にはQEMUが同梱されています。そのため、特別なコンフィグレーション作業をすることなく、簡単にQEMUをインストールし、実行できることから、初心者に優しく、使い勝手の良い開発ツールとして利用可能です。以降、本記事ではWind River Linuxに同梱されたQEMUの操作手順を紹介いたします。
組み込みLinuxをQEMU上で実行|評価ボード不要の開発を体験
それでは、Intel x86-64上にWind River Linuxの開発環境を入手し、実機を使うことなくArm 64bit(AArch64)向けにビルドされた組み込みLinuxディストリビューションを実行してみましょう。以下の動画で実行方法を解説いたします。
Armv8(AArch64)向けのBSPを入手する
上記の動画では、QEMUの提供する仮想ターゲットシステムとして「Arm 64bit(AArch64/Armv8)」を選択しました。setup.sh
の引数に「--list-machines all
」を指定し、Armv8用のQEMUが「qemuarm64」であることを確認した後に(図5)「--machines qemuarm64
」を指定しBSPを準備します。
$ git clone https://github.com/WindRiver-Labs/wrlinux-x.git $ ./wrlinux-x/setup.sh --machines qemuarm64
プロジェクトを作成し、省フットプリントの組み込みLinuxをビルドする
setup.shの実行完了後、通常のターゲットシステムを扱う場合と同様に下記のコマンドを実行します。今回は第2回で紹介しなかった省フットプリントの組み込みLinuxをビルドしてみましょう。WRTEMPLATEにはfeature/busybox
を指定します(後述)。設定ファイルに変更を加え、保存した後、bitbakeスクリプトを実行し組み込みLinuxディストリビューションを生成します。
$ . ./environment-setup-x86_64-wrlinuxsdk-linux $ . ./oe-init-build-env build
$ vi conf/local.conf # BB_NO_NETWORK ?= '1' を下記に変更 BB_NO_NETWORK ?= '0' # WRTEMPLATE ?= "" を下記に変更 WRTEMPLATE += " feature/busybox"
$ bitbake wrlinux-image-small
組み込みLinuxでよく登場する「BusyBox」とは
BusyBoxは組み込みシステム開発によく登場する機能のひとつです。Linuxで頻出するコマンドを1つのバイナリファイルに格納し、Linuxカーネル実行後にBusyBox実行ファイルを起動することで、1つのファイルのみを実行しているにもかかわらず、多数のコマンドに対応することができます。対応しているコマンドは「Wikipedia:BusyBox」をご参照ください。
QEMUで軽量な組み込みLinuxを実行する
最後に、ビルド結果の組み込みLinuxディストリビューションを、QEMUで実行してみましょう。
QEMUの操作は、難しいオプションを指定することなくrunqemu
コマンドにアーキテクチャ名(qemuarm64
)を指定して実行するだけで、組み込みLinuxディストリビューションを起動できます。なお、今回はGUIを持たない軽量なLinuxをビルドしましたので「nographic
」オプションを指定し、仮想ディスプレイデバイスを無効化します(図6)。
$ runqemu qemuarm64 nographic
仮想ディスプレイデバイスを無効化せず(nographicを指定せず)に起動すると図7のようになります。
$ runqemu qemuarm64
QEMUでGUI付きの組み込みLinuxディストリビューションを実行する
QEMUは仮想ディスプレイデバイスを提供しているため、GUI付きの組み込みLinuxディストリビューションも実行することができます。Wind River Linuxによる組み込みLinuxディストリビューションのビルドでは「–machines qemuaerm64」を実行しBSPを取得した後、設定ファイルにWRTEMPLATE=”feature/xfce”と“DISTRO=wrlinux-graphics”を指定しGUI機能を混載し、”bitbake wrlinux-image-std”を実行します(詳細は第2回をご参照ください)。CLI同様「runqemu qemuarm64
」により、Linuxを開発用PC上で実行可能です。
組み込みLinuxディストリビューションのサイズ比較
上記の手順では、bitbake実行時に「wrlinux-image-small
」オプションを指定することで省フットプリントで軽量なLinuxディストリビューションを開発し、実行しました。「wrlinux-image-small
」をテンプレートに使うことにより「全てのサービスが必ずしも必要としない機能」がLinuxディストリビューションから除外されます。除外される機能の一例としてはGUI機能があります。GUI機能は車載製品やウェアラブル製品など直感的な操作/確認を求められるサービスには必須な機能ですが、生活基盤を支える通信(テレコム)系のサービスには不要な機能です。
Wind River Linuxによる組み込みLinuxディストリビューションの開発では、数個のオプションを指定・変更するだけで不必要な機能を除去することが可能です。「wrlinux-graphics /wrlinux-image-std」から「wrlinux-image-small」に切り替えることによりルートファイルシステムの総容量を85%削減、インストールされるパッケージ数を95%削減することができます。こうした優れたカスタマイズ性により、高機能でありながら省フットプリントを達成できる製品を開発可能です(図9)。
組み込みLinux入門に最適な1冊
「市場投入までの期間の短縮」「サポートとメンテナンスコストの削減」「コンプライアンス問題への対応」「クラウドネイティブアーキテクチャとコンテナ技術」など、気になるTopicsを網羅したeBookが無料でダウンロードできます。是非ご覧ください。 無料のeBookをダウンロード
まとめ
今回はQEMUを使ったシステム開発の効率化について紹介しました。加えて、Wind River Linuxは少し設定を変更するだけでリッチなLinuxディストリビューションから、高速動作を期待できる省フットプリントのLinuxディストリビューションまでを生成できることも紹介しました。次回の初心者講座では、Wind River Linuxの提供する各種レシピ(機能群)を活用して組み込みLinuxディストリビューションをカスタマイズする方法を解説いたします。是非、ご期待ください。
Wind River Linuxについて
Wind River Linux®は、商用組み込みLinuxマーケットシェアNo.1!※の業界最先端の組み込みLinux開発プラットフォームです。最大15年の長期サポートや継続的デリバリーにも対応し、信頼性の高いエッジデバイスの開発を支援します。
※出典:VDC Reserch The Global Market IoT & Embedded Operating Systems (2018)
Wind River Linux 製品ウエブサイト Wind River Linux 製品カタログ Wind River Linux ダウンロード
Wind River Linux インタビュー記事
Wind River Linuxが誕生して15年となる。Wind River Linux誕生の背景やこれまでの取り組み、採用事例などについて話を聞いた。
Wind River Linux インタビュー記事
- Linuxは、Linus Torvaldsの米国およびその他の国における商標または登録商標です。
- Raspberry PiはRaspberry Pi財団の登録商標です。
- Ubuntuは、Canonical Ltd.の商標または登録商標です。
- Wind RiverおよびVxWorksはWind River Systems, Inc.の登録商標です。
- その他記載の会社名、製品名は、それぞれの会社の商標または登録商標です。
こちらも是非
“もっと見る” 初心者講座
はじめての公開鍵署名|署名検証のプログラムをサクッと試してみる
公開鍵署名(Public Key Signature)は、デジタル署名の一種で、公開鍵暗号方式を用いた署名方法です。公開鍵署名は、電子メールのセキュリティ、ソフトウェアやファームウェアに対する署名、オンライン取引など、多くのセキュリティが必要なアプリケーションで広く使用されています。