ゲスト側のLinuxカーネルでシリアルコンソールを有効にしているときに、ホストからpythonでシリアルコンソールにアクセスするときメモです。
ゲスト側はカーネルのコマンドラインでシリアルの設定をするのと、qemuのオプションで-serial ptyとしてptyを使うようにする。
$ qemu-kvm -initrd ./initramfs-4.17.2-200.fc28.x86_64.img -kernel ./vmlinuz-4.17.2-200.fc28.x86_64 -m 512 -append "console=ttyS0,115200" -serial pty -nographic QEMU 2.11.1 monitor - type 'help' for more information (qemu) qemu-system-x86_64: -serial pty: char device redirected to /dev/pts/2 (label serial0)
pythonのコードは特にパッケージとかはインストールしていなくて、qemu起動時に表示された /dev/pts/Xをオープンしてデータの読み書きを行います。
#!/usr/bin/env python3 # qemu-system-x86_64 -initrd ./initramfs-4.17.2-200.fc28.x86_64.img -kernel ./vmlinuz-4.17.2-200.fc28.x86_64 -m 512 -append "console=ttyS0,115200" -serial pty -nographic import io, os pty = io.TextIOWrapper( io.FileIO( os.open( "/dev/pts/2", os.O_NOCTTY | os.O_RDWR ), "w+" ) ) pty.write("uname -a\n"); for line in iter(pty.readline, None): print(line.strip())
こんな感じで使えます。
- 作者: 西餅
- 出版社/メーカー: 講談社
- 発売日: 2014/07/23
- メディア: Kindle版
- この商品を含むブログ (6件) を見る