Qemu - ホストからゲストシステムにttyデバイスを渡す

Qemu - ホストからゲストシステムにttyデバイスを渡す

私の目標は、Qemuのホストからゲストにttyデバイスを渡すことです。

USB-CDCデバイスに接続されているQemuを使用してARM64 Linuxデバイスをエミュレートしようとしています。これまで、以下のように、UDPを介してホストのptsデバイスにシミュレートされたデータを渡すことで、USB-CDCデバイスをシミュレートしました。

sudo socat -d -d UDP-L:14550 pty,link=/dev/ttyFAKEACM0,raw,echo=0

ホストから minicom を使用して ttyACM0 を読み込み、予想されるデータを取得できます。

ホストの/dev/ttyFAKEACM0をゲストQemuに渡し、ゲストにttyとして表示されるようにしたいと思います。私は次のように-chardevを使ってみました。

  qemu-system-aarch64 \
  -m 4G \
  -smp 4 \
  -cpu cortex-a57 \
  -M virt -nographic \
  -kernel ${IMGDIR}/Image \
  -initrd ${IMGDIR}/uInitrd-5.7.0 \
  -append "root=/dev/vda1 serial=tty0 ubootpart=00000000-01 console=ttyAMA0,115200n8 rootwait init=/sbin/init rw earlyprintk rootfstype=ext4" \
  -drive if=none,id=mmc0,file=${IMGDIR}/edge-rootfs.img,index=1,format=raw \
  -device virtio-blk-device,drive=mmc0 \
  -chardev tty,path=/dev/ttyFAKEACM0,id=facm \
  -device pci-serial,chardev=facm 

Qemuを起動すると、ttyFAKEACM0はゲストにまったく表示されません。 chardevの仕組みを誤解していますか?ホストからゲストに文字デバイスを渡すには?

ありがとう

答え1

また、ホストからゲストにTTYデバイスを渡してみました。私の場合はUSBアダプタ、コントローラです。

Qemuを使って成功しました。USBエミュレーション:

-chardev serial,path=/dev/ttyACM0,id=acm \
-usb -device usb-serial,chardev=acm

ゲストがUSBをttyUSB0

「root」以外のユーザーとして実行している場合は、デバイスの権限を調整する必要があります。私の場合は、アダプタ、コントローラ用の特別なグループを作成し、それに応じて権限を調整しましたchmod g+rw /dev/ttyACM0

関連情報