仮想PCを活用する

仮想PCとはパソコンの中(Windowsなど)で動くパソコンです。
いろいろなOSで使用できますが、ここではWindowsで使用することを前提に説明します。
仮想PCもソフトウェアなのでディスプレイはWindowsのアプリケーション フレームになります。 1台のパソコンの中に何台でも作ることができます。 パソコンなのでWindowsやLinuxなど違ったOSをインストールすることもできます。

仮想PCを使うメリット

  • 簡単に増やせる、簡単にバックアップできる
    パソコンでいう「ハードディスク」は仮想PCでは「ファイル」です。
    ファイルなのでコピーするだけで簡単に増やしたり、バックアップしたりできます。
    開発案件毎にディスクイメージを保存しておく時も便利です。
  • スナップショット
    実験や評価目的で何かをインストールする時、「スナップショット」という機能を使うと、簡単にインストール前に戻すことが出来ます。
    ディスクイメージをまるまる取っておく方法より手軽に以前の状態に戻すことができるので超便利です。
  • コストが安い
    仮想PCソフトは無料で使用できるものが存在します。物理的にパソコンを買うより安いです。
    また、運用時も面倒な環境セットアップなどは一度、一人が行えばよく、次回時や他の開発者はセットアップ済みのディスクイメージをもらえばいいので時間コストも削減できるといえます。
  • 開発者の人数と先行開発
    開発者の人数が増える時、ターゲットボードを追加購入しなくても仮想PCならコピーするだけで済みます。
    また、ターゲットボードの開発とソフトウェアを両方開発する場合にターゲットボードの完成を待つことなく先行して仮想PCで開発を開始できますので、ハード、ソフトの開発が同時に開始できます。
  • 通信テストも可能
    パソコン同様LAN機能も使えるので複数台必要な通信テストも仮想環境のみで完結できます。

仮想PCの種類

有名なもので次の3種類の仮想PCがあります。

  • サン・マイクロシステムズの「VirtualBox」
    コンパイル済みバイナリ版とソース版(OSE)とがあり、バイナリ版は評価目的で無料となっています。
    ライセンスを読むと商用に使ってもいいような、ダメなような表記で、今回の使い方ではグレーでした。
    機能的には問題なく使用できました。
    バイナリ版は再配布できないことと、ライセンス的にアウトでした。 (私個人の解釈も、Web上でみた他の数人の解釈も同様に、個人でなく会社が研究開発に使用する今回の使い方は 無料のバイナリ版でも問題ないと判断しましたが、念の為、日本サンマイクロさんに問い合わせしたところ 「使用できない」との返事がきましたのでアウトです)
    ソース提供となっているOSE版(オープン ソース エディション)はライセンス的な問題がクリアできます。
  • マイクロソフトの「VirtualPC」
    再配布はできませんので、お客様が直接ダウンロードして使うことになりますが、インストールも簡単で、 ライセンス的にも問題なく使えるものでした。機能的にも1点を除いて問題なく使えるものでした。
    が、その1点が致命的に問題でした。時計がどんどんズレるんです。少しならともかく派手にズレるので コンパイルやバージョン管理をする上でファイルの日付はとても重要ですので、「VirtualPC」で開発を行う ことは無理と判断しました。
  • ヴイエムウェアの「VMware」
    「VMware」は「VMware Server」と「VMware Player」とがあります。
    簡単にいうと、「VMware Server」でマシンを作る。「VMware Player」でそのマシンを使う。というものです。 この2つのソフトを使い分けることが非常に使いにくいことと、「VMware Player」は、ホスト(Windows側)に サービスがインストールされ、絶えず常駐しているのでちょっとイヤってことも。
    グラフィックカード機能が少し弱く、最新バージョンでは随分改善せれていましたが、 他の2つと比べると負けるかなという印象です。

上記3つの仮想PCで実際に開発をしてみた結果、当社では、 サン・マイクロシステムズの「VirtualBox」のOSE版を採用することにしました。

VirtualBoxにできること、できないこと

当社は主としてLinuxでの開発をお手伝いする会社ですので、前提としてWinsowsパソコンで LinuxのGUIアプリケーションの開発を行うという使い方を想定しています。

  • メモリ量、グラフィック解像度と色数、ディスク容量など自由に設定できます。
  • 開発機としても、ターゲット機としても活用できます。
  • バイナリ版はUSBが使えますがOSE版はUSB機能が削除されていますのでUSB機器は使用できません。
  • CD/DVD-ROMが使えます。
  • オーディオ機能もあります。
  • ネットワーク機能もあります。
  • シリアルポートも使えます。
  • 共有フォルダという機能があり、ゲスト側(Linux)からも、ホスト(Windows)からでも同一のフォルダにアクセスできます。
  • スナップショットという機能があり、任意の時点を保存することができ、いつでもその時点に戻せる機能があります。
  • GPIOアクセスを必要とするターゲット機器の代替としては使えません(当然ですが)

VirtualBoxを活用する

サン・マイクロシステムズの「VirtualBox」を開発機として活用してみます。
ライセンスを安全にクリアする為、OSE版(オープン ソース エディション)を使用します。
「Sun VirtualBox Open Source Edition」は、GPLv2ライセンスで提供されるソースコードです。
当社でコンパイルを行ったものを提供していますので、そちらのバイナリを活用下さい。

※OSE版はここの「Closed-source features」 にあるようにUSBなど一部機能が制限されています。
また、ここに書かれている以外にも、ソースコードの一部が欠落しているようでネットワーク機能が完全には動作しません。
評価目的なら使用しても良いというライセンスですので、バイナリ版とOSE版とがどのように違うのか比べてみるのも良いかもしれません。

バイナリ版はここからダウンロード出来ます。

バイナリ版を使用するならここにライセンス 「VirtualBox Personal Use and Evaluation License (PUEL) 」が書いてありますので 読んでみて下さい。
さらにここに Licensing: Frequently Asked Questions が あります、合わせて読んでおくと良いと思います。

VirtualBoxのネットワークの種類~

VirtualBoxのネットワークには次の種類があります。
バイナリ版とOSE版の違いを理解する為、バージョン2.1.4と2.2.2のどちらを使うかを判断する為には ネットワークの違いを理解する必要がありますので、簡単に説明します。

  • Bridged Adapter
    パソコン内部にハブを用意し、そこに仮想PCとホストのWindowsのLANケーブルを挿した状態。
    現状のLANに仮想PCを追加するイメージ。現状のLANが外の環境(WAN)と繋がっている環境ならdebianなどのaptサーバにもアクセスできます。 開発に適した環境と言えます。しかし、OSE版ではどのバージョンでもサポートされていません。
  • Host-Only Adapter
    パソコン内部に独立した別のLANを作ります。LANの中にはホストのWindowsと複数の仮想PCが入っています。
    ホストWindowsのLANが外の環境(WAN)と繋がっている環境なら、インターネット接続共有など使うことによって debianなどのaptサーバにもアクセスできます。 開発に適した環境と言えます。しかし、OSE版ではどのバージョンでもサポートされていません。
  • NAT
    ルータ(VirtualBoxホストがルータになる)経由でインターネットに接続したような状態。 従ってホストのWindowsのLANが外の環境(WAN)と繋がっている環境なら、debianなどのaptサーバにもアクセスできます。 しかしホストのWindowsから仮想PCへのアクセスは出来ません。 しかしポートホワードなどの設定を行えばTelnetなどで通信することは出来ます。 仮想PCどうしの通信は出来ません。
  • 内部ネットワーク
    Host-Only Adapterとよく似ていますが、ホストのWindowsとは接続されません。仮想PC同士のローカルなLANを構築するだけです。 もちろん外の環境(WAN)ともつながりません。
  • TAP Adapter
    ホストのWinsowsにVirtualBoxの仮想ネットワークアダプタというドライバをインストールすることで仮想NICがWindowsに追加されます。
    仮想PCはこの仮想NICを指定することでネットワークを構築します。Windows側からもこの仮想NICは通常のNICと同等に扱えますので ブリッジやインターネット接続共有などの機能を使ってLANの構築、外の環境(WAN)へのアクセスも問題なく動作します。
    開発に適した環境と言えましたが、バージョン2以降廃止された機能で現在ではインストールの手間をなくし、仮想NICは起動時に動的に作成される ような感じになっています。

バージョンについて

  • 2.1.4
    バージョン2以前では、ネットワーク設定にホストインターフェースの登録という手順が存在し、「VirtualBox TAP Adapter」という 仮想NICのようなものをインストールし使用していました。
    バイナリ版のバージョン2以降はこの方式は無くなり、代わりに Bridged Adapter と Host-Only Adapter というものが採用されました。
    しかし、同バージョンのOSE版にはなぜかそれら新しい方式は含まれておらず、古い TAP Adapter 方式のままでした。
    しかしそのおかげでOSE版の2.1.4のネットワークは正常に動作します。
    なぜ「おかげで」なのかは2.2.2を読んで下さい。
    発表以来ずっとこのバージョンを使用していますが特に大きな問題もなく、開発作業ができています。
  • 2.2.2
    上記2.1.4で説明の通り、ネットワークの方式が変更されました。しかし、2.2.0と2.2.2を共に確認しましたが、(残念な事に) バイナリ版同様、OSE版もネットワークの方式が完全に移行してしまいました。この方式は以前のTAPに比べて使いやすくなっています。
    なのに何故「残念な事?」。何故かというと、VirtualBox本体は最新になってるのですが、OSE版にはホスト(Windows)側のドライバソースが含まれていないのです。
    2.1.4が公開された時から何度か「ソースが足りない」という報告がされているにも関わらずその部分の質問には回答が無い。という状況です。
    という訳で Bridged Adapter と Host-Only Adapter は使えません。他のタイプで NAT と内部ネットワークがありますが、 内部ネットワークはホストからのアクセスが出来ないので、開発機として使うことが目的なので NAT しか選択肢がありません。

バグについて

両バージョン2.1.4、2.2.2と共に次のようなバグがあります。
ハイバネーション機能(多分。確信は無いですが)にバグがあるらしく、ゲスト(Linux側)を起動している状態で、 ホスト(Windows)PCを休止させ、時間をおいてホストPCを起動させるという作業を行うとVBoxSVCというプログラムがCPU使用率100%になって ホストPCつまりWindowsが固まったように遅くなる現象が発生します。
私の環境はCoreDuoなのでその状況下もWindowsは固まらないのでVirtualBoxの再起動が可能なので救済は出来ますが、 シングルCPUの場合マウスもろくに動かなくなるのでイライラします。
未だ回避方法が分かっていないので休止する前に必ずゲストPCの「シャットダウン」もしくは「仮想マシンの状態を保存」でゲストPCを閉じてください。
100%になってしまった後でも、VirtualBoxのGUI用アプリ(VirtualBox.exe)と全てのゲストPC窓を閉じれば自動的にVBoxSVC.exeが終了しCPU稼働は落ち着きます。

どのバージョンを使う?

バイナリ版を使うのであれば最新の2.2.2を使えばいいと思います。
実際に開発機として仕事をするのであればOSE版を使う必要があります。
OSE版を使うなら2.1.4か2.2.2の選択が必要です。
クロスコンパイルを行いターゲットボード用のアプリケーションを開発する、クライアント・サーバータイプのアプリケーションを開発するなど、 仮想PCと他の組込みボードをLANでつなぐ場合や、他の仮想PCとLANでネットワークを構築する場合は2.1.4です。CPU稼働率が100%になってしまうバグがありますが 仮想PC起動中にホストマシンを休止させなければ発生しないバグなので十分使えると思います。
仮想PCの中だけで開発を完結する場合(GUIアプリケーションの開発を体験するだけなど)2.2.2を使って下さい。
要するに、ネットワークにTAPを使いたいなら2.1.4、NATでいいなら2.2.2という事です。

「Bridged Adapter」、「Host-Only Adapter」が使えない以上、圧倒的にTAPが使いやすいです。
今のところ2.1.4で開発をしていて特に問題は発生していませんので2.1.4を使うことをお勧めします。

準備する

どのバージョンを使うかが決まったらコンパイル済みOSE版VirtualBox本体と、開発環境セットアップ済みハードディスクイメージを ダウンロードしてセットアップして下さい。
このVirtualBox仮想PCは、パソコンですのでOSも何も入っていないパソコンのみの提供です。 本来なら、このパソコンにLinuxOSをインストールし、コンパイラや必要ライブラリをインストールし開発機能を構築します。 このセットアップ作業は難しくないことですが、面倒な作業ですので当社で準備したハードディスク イメージ ファイルを提供していますので、 そちらのイメージファイルを活用下さい。

OSE版を自分でコンパイルからやってみたいという方は VirtualBoxをビルドするにビルド方法をまとめましたので参考にして下さい。

開発機能の構築作業も自分でやりたい方は 開発機の作成にインストール方法をまとめましたので参考にして下さい。

先に述べたように OSE版 はネットワーク機能に一部機能が欠落している部分があります。
そのままでは開発に支障がでる部分です。その問題をどう回避するか、どうしたら開発が可能かなど具体的な使い方 は「仮想PCを使ってGUIアプリを開発してみよう 」で説明していますので参照ください。

簡単に全体の構成を説明します

  • プログラミング
    プログラミングはWindows上で行います。
    Windows上で動くエディタを使ってソースコードを編集します。
    作成したファイルはプロジェクト保存専用フォルダを決めてそこに保存します。
    ここで決定したフォルダはVirtualBoxの共有フォルダとして登録します。
    ※「共有フォルダ」とは、登録したフォルダはWindowsホスト側からも、仮想PC内のLinuxゲストからも読み書きできるとても便利な機能です。
  • ビルド
    ビルドは仮想PCの中のLinux上で行います。
    VirtualBoxを起動し「共有フォルダ」としてソースコードを保存したディレクトリを登録しておきます。
    仮想PCのLinuxを起動させ、WindowsのTelnetアプリケーションからログインします。
    ログイン後コンソールから共有フォルダにあるソースコードをビルド(コンパイル・リンク)します。
    Linux上で行うと言っても作業は全てWindows側のアプリケーションから行いますのLinuxで作業している感覚はありません。
  • 実行
    実行は仮想PCの中のLinux上で行います。
    ビルド同様、WindowsのTelnetアプリケーションからログインし、ビルドしたバイナリを実行します。
    GUIアプリを開発している場合は画像は起動中の仮想PCソフトのWindowsフレームに表示されます。

体験

当社が提供する組込み向けGUIツールキットを使って、仮想PCでの開発を体験してみて下さい。

やり方は仮想PCを使ってGUIアプリを開発してみようを読んで下さい。

ダウンロード

説明にでてきた配布ファイルは ここからダウンロードするか 当社オンラインショップのサービスより注文頂ければ無料でCDを発送致します。

Last-modified: 2019-07-22 (月) 17:56:00 (1729d)