webdevqa.jp.net

qemuを使用して端末で非GUI OSを実行する方法は?

部署の高性能コンピュータ(8コアプロセッサ搭載)でいくつかのプログラムを実行したい。今私はターミナルを使用してsshでそのマシンを使用しています。マシンにはRed Hat Linuxがインストールされています。しかし、私のプログラムはSolaris上で実行する必要があります。 Nexenta Solaris for x86を使用しています。

Qemuを使用して、ターミナルを介してそのマシンでNexenta Solarisを実行できます。管理者にできることを納得させる必要があります。そうしないと、そのマシンにqemuがインストールされないため、仮想マシンを介してSolarisを使用できます。また、Nexenta SolarisではGUIを使用せず、コマンドラインのみを使用していることにも注意してください。私のマシンでは、VMwareを使用して実行しています。

22
MetallicPriest

Qemuを自分でコンパイルして、ホームディレクトリにインストールできます。カーネルモードのqemuアクセラレータはありませんが、qemuは機能し、速度はかなり高速になります。

Qemuには、非GUI起動のための2つのオプションがあります: http://wiki.qemu.org/download/qemu-doc.html

表示オプション:

-nographic-通常、QEMUはSDLを使用してVGA出力を表示します。このオプションを使用すると、グラフィック出力を完全に無効にして、QEMUを単純なコマンドラインアプリケーションにすることができます。エミュレートされたシリアルポートは、コンソールでリダイレクトされます。したがって、QEMUを使用して、シリアルコンソールでLinuxカーネルをデバッグできます。

-curses-通常、QEMUはSDLを使用してVGA出力を表示します。このオプションを使用すると、QEMUはcurses/ncursesインターフェイスを使用してテキストモードのときにVGA出力を表示できます。グラフィカルモードでは何も表示されません。

また、VNCプロトコルを介してグラフィック出力を別のマシンに送信することもできます(-vncオプション)

35
osgx

-append 'console=ttyS0'

そのオプションは、次のようにosgxによって言及された-nographicの他に、Linuxカーネルにも必要でした。

qemu-system-x86_64 -append 'console=ttyS0' \
                   -initrd rootfs.cpio.gz \
                   -kernel bzImage \
                   -nographic \
                   -serial mon:stdio \

これで、次のことができます。

console=ttyS0は、ディスプレイの代わりに シリアルポート を使用するようにカーネルに指示します。シリアルポートはディスプレイ上のピクセルではなく、ホストとゲストの間で文字を送信し、QEMUはそれらの文字を端末に表示できます。

-serial mon:stdioは、この最小限のコマンドではオプションですが、通常は使用することをお勧めします。たとえば、後で便利な-monitor telnetも追加する場合の動作が改善されます。

これはBuildroot qemu_x86_64_defconfigで簡単にテストできます。私は作成しました これは高度な自己完結型の自動設定です これを簡単に試すことができます

関連するが、OSの制約が少ない:

Ubuntu 18.04、QEMU 2.11.1でテスト済み。

私はしばらくこれに苦労して、ついにそれを私のために機能させる方法を理解しました:

SGABIOSをインストールする必要があります。興味深いことに、このBIOSはdebian qemuパッケージに含まれていないため、(スーパーユーザーとして)インストールする必要があります。

apt install sgabios  

次に、qemuを実行するときに、-deviceオプションを使用して、仮想マシンにsga出力を使用するように指示します

qemu-system-i386 -nographic -device sga discimage.bin

出来上がり! stdioを介して送信されるモニターとテキスト出力の両方で、sshを介して完全に動作します。 C-a cでqemuモニターにアクセスできます。

乾杯、ベン

5
Ben White