the QEMU frontend (e.g. the VNC server or the SDL window) is in charge of translating user events
into emulated hardware ones. Most generally, this will mean emulating a keyboard or mouse IRQ
and the associated i/o protocol. Exact details depend on which hardware you want to emulate.
For example, when emulating a PC with PS/2 keyboard and mouse, the code in hw/ps2.c will be used.
Here's a concrete example:
- The VNC server receives packets from the client (see protocol_client_msg in vnc.c).
Some of them correspond to keyboard events (processed in key_event() in the same file),
which end up calling kbd_put_keycode() after translating the VNC keycode/state into
a different key scancode.
- kbd_put_keycode() is defined in vl.c and calls the hardware-specific keycode translator.
- For PC emulation, this happens to be ps2_put_keycode() defined in hw/ps2.c, and
registered at startup by ps2_kbd_init() in the same file. It probably is a different function
for different emulated hardware.
- The implementation of ps2_put_keycode() will end up enqueue-ing a keycode into
a queue then raising an IRQ.
- The guest kernel responds to the IRQ by running its keyboard driver code, the latter
will try to read data from the PS/2 queue
The SDL front-end receives user events differently, but still ends up calling kbd_put_keycode().
Same thing happens for mouse events, and about anything that needs to emulate hardware
(e.g. serial/usb/bluetooth/etc...) but implementations and specifics may differ.
Hope this helps
On Wed, Sep 2, 2009 at 5:55 AM, Amey Moghe
<amey1288@gmail.com> wrote:
Hello all,
I am new to QEMU.While reading about qemu , I came across one
statement: "QEMU does not depend on the presence of graphical output
methods on the host system. Instead, it allows one to access the screen
of the guest OS via VNC. It can also use an emulated serial line,
without any screen, with applicable operating systems." on following
link :
http://en.wikipedia.org/wiki/QEMU
So
please can anybodys tell me how does qemu use VNC server for receiving events and if yes
then how does it receive events from host OS? Or is there any other way
with which QEMU receives input events from host OS?