2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BitVisorAdvent Calendar 2018

Day 4

BitVisorのtelnet_dbgsh機能を使う

Last updated at Posted at 2018-12-03

BitVisorのtelnet_dbgsh機能を使ってみます。今回はLinux KVMを有効にしたQEMUを使用し、UEFI(OVMF)を指定しています。

設定:

defconfig
(省略)
                .telnet_dbgsh = 1,
                .tty_mac_address = {
                        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
                },
                .tty_syslog = {
                        .enable = 1,
                        .src_ipaddr = { 192, 168, 0, 64 },
                        .dst_ipaddr = { 192, 168, 0, 27 },
                },
                .driver = {
                        .pci = "driver=pro1000, net=ip, tty=1",
                },
        },
        .ip = {
                .use_dhcp = 1,
        },
};

Intel GbE NIC用のドライバーを指定して、syslogログ出力とTCP/IPスタックを有効にしています。IPアドレスはUDPのsyslogを受け付けるコンピューターのIPアドレスに変えてください。ログ出力の設定に関しては以下の記事をご覧ください。
https://qiita.com/hdk_2/items/2431710fcf257904fc8a

QEMUは適当に以下のようにして起動します。この例ではTCP 8023番ポートを使用しますので、他のポート番号にする場合は適宜読み替えてください。

$ mkdir _
$ ln -s ../bitvisor.elf ../boot/uefi-loader/loadvmm.efi _
$ qemu-system-x86_64 -bios OVMF.fd -cpu host -enable-kvm -m 2048 -snapshot -hda fat:_ -net nic -net user,tcp:127.1:8023-:23

EFI Shellが起動したらloadvmmと打ち込んでBitVisorを起動します。

Shell> loadvmm

BitVisorが起動したら、syslogを参照してきちんとIPアドレスが割り振られたか見てみます。

# tail -4 /var/log/messages
Dec  1 11:17:28 192.168.0.27 bitvisor: PCI: 6 devices found
Dec  1 11:17:28 192.168.0.27 bitvisor: Starting a virtual machine.
Dec  1 11:17:28 192.168.0.27 bitvisor: telnet server "dbgsh" ready
Dec  1 11:17:28 192.168.0.27 bitvisor: IP address changed: 0.0.0.0 -> 10.0.2.15

10.0.2.15はQEMUのSlirpがデフォルトで割り振るIPアドレスですので、良さそうです。QEMUを実行したホスト上からtelnetで接続してみましょう。

$ telnet -- 127.1 -8023
Trying 127.0.0.1...
Connected to 127.1.
Escape character is '^]'.
> 

dbgshのプロンプトが出ました。ホスト名はlocalhostでも構いませんが、最初IPv6で接続しにいってからになるので、ここではIPv4アドレスを指定しています。telnetのポート番号に-を指定しているのは、telnet protocol negotiationを強制的に有効にするためです。詳しくはtelnet(1)のmanual pageをご覧ください。

今回はQEMUのhostfwd機能を使って別のポート番号にフォワードさせたのでこんなことになっていますが、23番ポートで接続できるなら、このような指定はいらないです。ただし、本機能にパスワードなどの認証は一切ありませんので、十分ご注意ください。少なくとも、インターネットから接続可能な状態にはしないことをおすすめします。

このdbgsh上で、logコマンドやdebugコマンドが通常通り使用できます。試しに、リセット時に実行されるファームウェアの部分をダンプしてみます。

$ telnet -- 127.1 -8023
Trying 127.0.0.1...
Connected to 127.1.
Escape character is '^]'.
> debug 
guest state not found
debug> Dp/10 fffffff0 
FFFFFFF0  90 90 EB AC 90 90 90 90-90 90 90 90 90 90 90 90   ................
debug> q 
> exit 
Connection closed by foreign host.

このようにメモリーダンプができますし、exitコマンドで接続を切ることもできます。telnetを途中で切った場合は、再接続すると続きからになります。

$ telnet -- 127.1 -8023
Trying 127.0.0.1...
Connected to 127.1.
Escape character is '^]'.
> deb   
telnet> Connection closed.
$ telnet -- 127.1 -8023
Trying 127.0.0.1...
Connected to 127.1.
Escape character is '^]'.
ug 
guest state not found
debug> 

また、telnetを切らないまま別のtelnetを開始した場合は、古いtelnetのほうが強制的に切れます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?