From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MjVZR-00069r-AW for qemu-devel@nongnu.org; Fri, 04 Sep 2009 05:59:05 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MjVZJ-00068F-6D for qemu-devel@nongnu.org; Fri, 04 Sep 2009 05:59:02 -0400 Received: from [199.232.76.173] (port=46800 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MjVZI-00068C-Vj for qemu-devel@nongnu.org; Fri, 04 Sep 2009 05:58:57 -0400 Received: from mail-pz0-f186.google.com ([209.85.222.186]:52213) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MjVZI-00007t-Hm for qemu-devel@nongnu.org; Fri, 04 Sep 2009 05:58:56 -0400 Received: by pzk16 with SMTP id 16so665512pzk.18 for ; Fri, 04 Sep 2009 02:58:54 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <60cad3f0909021632n6e7528cam479720b74bb61c67@mail.gmail.com> References: <1600c7720909020555i3a16970eq35e753b33ebf3f78@mail.gmail.com> <60cad3f0909021632n6e7528cam479720b74bb61c67@mail.gmail.com> Date: Fri, 4 Sep 2009 15:28:54 +0530 Message-ID: <1600c7720909040258i2fa51f31g72dafb308ef90c25@mail.gmail.com> Subject: Re: [Qemu-devel] How does QEMU kernel receive any input events from host OS From: Amey Moghe Content-Type: text/plain; charset=ISO-8859-1 List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Turner Cc: qemu-devel Hello, Thanks for the details.I understood how any input event is processed. But if I pressed a key in guest OS environment then how does client i.e. guest OS ( with reference to VNC server ) come to know that it has to send key_event to VNC server? Does client through qemu, recognise it either from X server running on host OS (e.g. linux ) or directly from host OS's kernel ? Thanks, Amey. On 9/3/09, David Turner wrote: > 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 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? >