QEMU

仮想ハードウェアを構築するために、CPUのシミュレーション用モデルは必須です。市販のCPUモデル(C/C++、SystemCなど)は高額のためなかなか入手するのは難しいという状況です。そのような中、QEMUと呼ばれるフリーのCPUシミュレーションモデルを使うことにより、安価に仮想ハードウェアを構築することが可能となっています。ちなみにQEMUはQuick Emulatorの略だそうです。

  1. QEMUで何ができるのか?
  2. QEMUを使うケースは大きく分けて以下の二通りがあるかと思います。    

          
    • Windowsを使用しながら、同時にLinuxを使いたい場合。これは使用中のWindows画面からQEMUを使って同じPC(パソコン)上でLinuxを起動するようなイメージです。VMware Playerというフリーソフトでも同様のことができます。つまり1台のPC上で、WindowsとLinuxを同時に使うことができます。なお、これとは逆に使用中のLinuxからWindowsを起動して使用することも可能です。    
    • 例えばARMが搭載されたSoC向けに組み込みソフトウェアを開発をしようと思うが、SoC(実機)がまだ手元には無い。実機は手元にないが、なんとかして組み込みソフトウェアを先行して開発したい、というようなケースにもQEMUは使用できます。このような開発環境はバーチャル・プラットフォームあるいは仮想ハードウェアと呼ばれることがあります。同じようなことは、先述のVMware Playerではできないかと思います。弊社が扱うはこちらのケースになります。

  3. QEMUは何をしているのか?
  4. QEMUはC言語で書かれたソフトウェアです。いったいQEMUは何をしているのでしょうか?例えば、先の例にも出てきたARM SoC向け組み込みソフトウェアの先行開発について考えてみます。仮にPC(パソコン)上のLinuxで通常の仕事をしていたとします。このPCにはインテル社のi368系のCPUが搭載されています。組み込み開発においては、Linux上でARM用のクロスコンパイルを行い(もちろんWindows上でクロスコンパイルする場合もあります)、ARM用のバイナリファイル(実行可能形式ファイル)を作成します。そして、このARM用バイナリファイルを実機中のFlash ROM等に書き込み、実機上でそのバイナリ(ソフトウェア)を実行します。しかし、今はこの実機が存在しないので、QEMUになんとかしてもらいます。Linux上で起動されたQEMUは、起動時の引数で指定されたARM用のバイナリファイルを読み込みます。そして読み込んだARM用のバイナリファイルに書かれているARM用の命令をi386用の命令に変換し、変換したバイナリをPC上で実行します。ただし、読み込んだバイナリファイル全体を一度に変換することはせず、少しずつ読んでは変換し実行するという作業を繰り返しています。なお、ここではARMを例に挙げましたが、QEMUは他にも多くの種類のCPUに対応しています。