QEMU: не работают порты мультипортовки в гостевой ОС
От: Alexander Pazdnikov  
Дата: 27.01.10 12:48
Оценка:
Здравствуйте, Коллеги.

Полная тишина на отображенном порте мультипортовки Advantech-1612 в гостевой ОС WinXP Pro English SP2.
Хостовая ОС — Kubuntu 9.10, qemu-0.11.0-0ubuntu6.

Делаю отображение на tcp-порт, нормально могу общаться по терминалкам, меняю на /dev/ttyS0 — все тишинаю.
Причем, при замапленном /dev/ttyS0 из хостовой kubuntu могу запустить minicom на /dev/ttyS0 и нормально работаю в нем. (т.е. qemu не захватывает порт ??? )

Что посоветуете?

setserial /dev/ttyS0

/dev/ttyS0, UART: 8250, Port: 0x9400, IRQ: 19

пробовал и родной для карты тип uart : 16954

winxp.xml из libvirt
<domain type='kvm'>
  <name>WinXP</name>
  <uuid>66c9894b-f3a9-09c2-37db-a7b5a6f9f3a9</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-0.11'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <pae/>
    <acpi/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='block' device='disk'>
      <source dev='/dev/sda'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='block' device='cdrom'>
      <source dev='/dev/cdrom'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>
    <interface type='bridge'>
      <mac address='54:52:00:62:10:e6'/>
      <source bridge='br0'/>
    </interface>
    <serial type='dev'>
        <source path='/dev/ttyS0'/>
        <target port='1'/>
    </serial>
    <serial type='tcp'>
        <source mode='bind' host='127.0.0.1' service='2445'/>
        <protocol type='raw'/>
        <target port='2'/>
    </serial>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
    </video>
  </devices>
</domain>
qemu serial multiport
Re: QEMU: не работают порты мультипортовки в гостевой ОС
От: Zhendos  
Дата: 27.01.10 18:18
Оценка:
Здравствуйте, Alexander Pazdnikov, Вы писали:

AP> Здравствуйте, Коллеги.


AP>Полная тишина на отображенном порте мультипортовки Advantech-1612 в гостевой ОС WinXP Pro English SP2.

AP>Хостовая ОС — Kubuntu 9.10, qemu-0.11.0-0ubuntu6.

AP>Делаю отображение на tcp-порт, нормально могу общаться по терминалкам, меняю на /dev/ttyS0 — все тишинаю.

AP>Причем, при замапленном /dev/ttyS0 из хостовой kubuntu могу запустить minicom на /dev/ttyS0 и нормально работаю в нем. (т.е. qemu не захватывает порт ??? )

что куда меняем непонятно, с какими опциями запускаете qemu?
Если TCP работает между гостем и основной ОС, то можно socat запустить
и перенаправиться данные на tty
Re[2]: QEMU: не работают порты мультипортовки в гостевой ОС
От: Alexander Pazdnikov  
Дата: 28.01.10 08:57
Оценка:
Здравствуйте, Zhendos, Вы писали:

Z>что куда меняем непонятно, с какими опциями запускаете qemu?


Host OS — Kubuntu 9.10
Guest OS — WinXP Pro Eng SP2

Плата PCI AD-1612, 4 порта 232/485, ttyS0-ttyS3.

libvirt запускает qemu командой:
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/home/sasha USER=root LOGNAME=root 
/usr/bin/kvm -S -M pc-0.11 -m 1024 -smp 1 -name WinXP -uuid 66c9894b-f3a9-09c2-37db-a7b5a6f9f3a9 
-monitor unix:/var/run/libvirt/qemu/WinXP.monitor,server,nowait 
-localtime -boot c -drive file=/dev/sda,if=ide,index=0,boot=on -drive file=/dev/cdrom,if=ide,media=cdrom,index=2 
-net nic,macaddr=54:52:00:62:10:e6,vlan=0,name=nic.0 -net tap,fd=17,vlan=0,name=tap.0 
-serial /dev/ttyS0 -serial tcp:127.0.0.1:2445,server,nowait
-parallel none -usb -usbdevice tablet -vnc 127.0.0.1:0 -k en-us -vga cirrus


К ttyS0 подключена консоль контроллера.
При запущенной гостевой WinXP, запускаю minicom на ttyS0 и нормально работаю в консоли.
Запускаю терминалку в WinXP на соотв. порт (COM1), и пусто, как будто к порту ничего не подключено.
Т.е. qemu не захватывает порт.

Как сделать так, чтобы захватывал.

Z>Если TCP работает между гостем и основной ОС, то можно socat запустить

Z>и перенаправиться данные на tty
К сожалению, такой способ мне не подойдет, т.к. протоколы устройств бывают такие, что нужно по ходу завязки сессии переключать скорость. Для разных устройств может быть разная длина слова и четность. Поэтому нужен реальный порт.
Re[3]: QEMU: не работают порты мультипортовки в гостевой ОС
От: Zhendos  
Дата: 28.01.10 11:44
Оценка:
Здравствуйте, Alexander Pazdnikov, Вы писали:

AP>Здравствуйте, Zhendos, Вы писали:


Z>>что куда меняем непонятно, с какими опциями запускаете qemu?


AP>Host OS — Kubuntu 9.10

AP>Guest OS — WinXP Pro Eng SP2

AP>Плата PCI AD-1612, 4 порта 232/485, ttyS0-ttyS3.


AP>libvirt запускает qemu командой:

AP>
AP>LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/home/sasha USER=root LOGNAME=root 
AP>/usr/bin/kvm -S -M pc-0.11 -m 1024 -smp 1 -name WinXP -uuid 66c9894b-f3a9-09c2-37db-a7b5a6f9f3a9 
AP>-monitor unix:/var/run/libvirt/qemu/WinXP.monitor,server,nowait 
AP>-localtime -boot c -drive file=/dev/sda,if=ide,index=0,boot=on -drive file=/dev/cdrom,if=ide,media=cdrom,index=2 
AP>-net nic,macaddr=54:52:00:62:10:e6,vlan=0,name=nic.0 -net tap,fd=17,vlan=0,name=tap.0 
AP>-serial /dev/ttyS0 -serial tcp:127.0.0.1:2445,server,nowait
AP>-parallel none -usb -usbdevice tablet -vnc 127.0.0.1:0 -k en-us -vga cirrus
AP>


AP>К ttyS0 подключена консоль контроллера.

AP>При запущенной гостевой WinXP, запускаю minicom на ttyS0 и нормально работаю в консоли.
AP>Запускаю терминалку в WinXP на соотв. порт (COM1), и пусто, как будто к порту ничего не подключено.
AP>Т.е. qemu не захватывает порт.

у вас же два порта получается, а если оставить только -serial /dev/ttyS0 ?
попробуйте вызвать qemu из командной строки выдаст ли он что-нибудь?
Если нет, посмотрите что будет если добавить strace -f в начало команды по вызову qemu,
и для совсем смелых людей есть вариант открыть в редакторе
исходники-qemu/qemu-char.c и добавить в функцию qemu_chr_open_tty
после вызова open(filename
строчку типа printf("open fd %d\n", fd);

в том qemu с которым я работаю, ошибка при открытии /dev/tty просто тихо игнорируется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.