| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | 
 | 2 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" | 
 | 3 | [<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] > | 
 | 4 |  | 
 | 5 | <chapter id='dev-manual-qemu'> | 
 | 6 |  | 
 | 7 | <title>Using the Quick EMUlator (QEMU)</title> | 
 | 8 |  | 
 | 9 | <para> | 
 | 10 |     Quick EMUlator (QEMU) is an Open Source project the Yocto Project uses | 
 | 11 |     as part of its development "tool set". | 
 | 12 |     As such, the information in this chapter is limited to the | 
 | 13 |     Yocto Project integration of QEMU and not QEMU in general. | 
 | 14 |     For official information and documentation on QEMU, see the | 
 | 15 |     following references: | 
 | 16 |     <itemizedlist> | 
 | 17 |         <listitem><para><emphasis><ulink url='http://wiki.qemu.org/Main_Page'>QEMU Website</ulink>:</emphasis> | 
 | 18 |             The official website for the QEMU Open Source project. | 
 | 19 |             </para></listitem> | 
 | 20 |         <listitem><para><emphasis><ulink url='http://wiki.qemu.org/Manual'>Documentation</ulink>:</emphasis> | 
 | 21 |             The QEMU user manual. | 
 | 22 |             </para></listitem> | 
 | 23 |     </itemizedlist> | 
 | 24 | </para> | 
 | 25 |  | 
 | 26 | <para> | 
 | 27 |     This chapter provides an overview of the Yocto Project's integration of | 
 | 28 |     QEMU, a description of how you use QEMU and its various options, running | 
 | 29 |     under a Network File System (NFS) server, and a few tips and tricks you | 
 | 30 |     might find helpful when using QEMU. | 
 | 31 | </para> | 
 | 32 |  | 
 | 33 | <section id='qemu-overview'> | 
 | 34 |     <title>Overview</title> | 
 | 35 |  | 
 | 36 |     <para> | 
 | 37 |         Within the context of the Yocto Project, QEMU is an | 
 | 38 |         emulator and virtualization machine that allows you to run a complete | 
 | 39 |         image you have built using the Yocto Project as just another task | 
 | 40 |         on your build system. | 
 | 41 |         QEMU is useful for running and testing images and applications on | 
 | 42 |         supported Yocto Project architectures without having actual hardware. | 
 | 43 |         Among other things, the Yocto Project uses QEMU to run automated | 
 | 44 |         Quality Assurance (QA) tests on final images shipped with each | 
 | 45 |         release. | 
 | 46 |     </para> | 
 | 47 |  | 
 | 48 |     <para> | 
 | 49 |         QEMU is made available with the Yocto Project a number of ways. | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 50 |         One method is to install a Software Development Kit (SDK). | 
 | 51 |         For more information on how to make sure you have | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 52 |         QEMU available, see the | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 53 |         <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-intro'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>. | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 54 |     </para> | 
 | 55 | </section> | 
 | 56 |  | 
 | 57 | <section id='qemu-running-qemu'> | 
 | 58 |     <title>Running QEMU</title> | 
 | 59 |  | 
 | 60 |     <para> | 
 | 61 |         Running QEMU involves having your build environment set up, having the | 
 | 62 |         right artifacts available, and understanding how to use the many | 
 | 63 |         options that are available to you when you start QEMU using the | 
 | 64 |         <filename>runqemu</filename> command. | 
 | 65 |     </para> | 
 | 66 |  | 
 | 67 |     <section id='qemu-setting-up-the-environment'> | 
 | 68 |         <title>Setting Up the Environment</title> | 
 | 69 |  | 
 | 70 |         <para> | 
 | 71 |             You run QEMU in the same environment from which you run BitBake. | 
 | 72 |             This means you need to source a build environment script (i.e. | 
 | 73 |             <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink> | 
 | 74 |             or | 
 | 75 |             <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>). | 
 | 76 |         </para> | 
 | 77 |     </section> | 
 | 78 |  | 
 | 79 |     <section id='qemu-using-the-runqemu-command'> | 
 | 80 |         <title>Using the <filename>runqemu</filename> Command</title> | 
 | 81 |  | 
 | 82 |         <para> | 
 | 83 |             The basic <filename>runqemu</filename> command syntax is as | 
 | 84 |             follows: | 
 | 85 |             <literallayout class='monospaced'> | 
 | 86 |      $ runqemu [<replaceable>option</replaceable> ]  [...] | 
 | 87 |             </literallayout> | 
 | 88 |             Based on what you provide on the command line, | 
 | 89 |             <filename>runqemu</filename> does a good job of figuring out what | 
 | 90 |             you are trying to do. | 
 | 91 |             For example, by default, QEMU looks for the most recently built | 
 | 92 |             image according to the timestamp when it needs to look for an | 
 | 93 |             image. | 
 | 94 |             Minimally, through the use of options, you must provide either | 
 | 95 |             a machine name, a virtual machine image | 
 | 96 |             (<filename>*.vmdk</filename>), or a kernel image | 
 | 97 |             (<filename>*.bin</filename>). | 
 | 98 |         </para> | 
 | 99 |  | 
 | 100 |         <para> | 
 | 101 |             Following is a description of <filename>runqemu</filename> | 
 | 102 |             options you can provide on the command line: | 
 | 103 |             <note><title>Tip</title> | 
 | 104 |                 If you do provide some "illegal" option combination or perhaps | 
 | 105 |                 you do not provide enough in the way of options, | 
 | 106 |                 <filename>runqemu</filename> provides appropriate error | 
 | 107 |                 messaging to help you correct the problem. | 
 | 108 |             </note> | 
 | 109 |             <itemizedlist> | 
 | 110 |                 <listitem><para><replaceable>QEMUARCH</replaceable>: | 
 | 111 |                     The QEMU machine architecture, which must be "qemux86", | 
 | 112 |                     "qemux86_64", "qemuarm", "qemumips", "qemumipsel", | 
 | 113 |                     “qemumips64", "qemush4", "qemuppc", "qemumicroblaze", | 
 | 114 |                     or "qemuzynq". | 
 | 115 |                     </para></listitem> | 
 | 116 |                 <listitem><para><filename><replaceable>VM</replaceable></filename>: | 
 | 117 |                     The virtual machine image, which must be a | 
 | 118 |                     <filename>.vmdk</filename> file. | 
 | 119 |                     Use this option when you want to boot a | 
 | 120 |                     <filename>.vmdk</filename> image. | 
 | 121 |                     The image filename you provide must contain one of the | 
 | 122 |                     following strings: "qemux86-64", "qemux86", "qemuarm", | 
 | 123 |                     "qemumips64", "qemumips", "qemuppc", or "qemush4". | 
 | 124 |                     </para></listitem> | 
 | 125 |                 <listitem><para><replaceable>ROOTFS</replaceable>: | 
 | 126 |                     A root filesystem that has one of the following | 
 | 127 |                     filetype extensions: "ext2", "ext3", "ext4", "jffs2", | 
 | 128 |                     "nfs", or "btrfs". | 
 | 129 |                     If the filename you provide for this option uses “nfs”, it | 
 | 130 |                     must provide an explicit root filesystem path. | 
 | 131 |                     </para></listitem> | 
 | 132 |                 <listitem><para><replaceable>KERNEL</replaceable>: | 
 | 133 |                     A kernel image, which is a <filename>.bin</filename> file. | 
 | 134 |                     When you provide a <filename>.bin</filename> file, | 
 | 135 |                     <filename>runqemu</filename> detects it and assumes the | 
 | 136 |                     file is a kernel image. | 
 | 137 |                     </para></listitem> | 
 | 138 |                 <listitem><para><replaceable>MACHINE</replaceable>: | 
 | 139 |                     The architecture of the QEMU machine, which must be one | 
 | 140 |                     of the following: "qemux86", | 
 | 141 |                     "qemux86-64", "qemuarm", "qemumips", "qemumipsel", | 
 | 142 |                     “qemumips64", "qemush4", "qemuppc", "qemumicroblaze", | 
 | 143 |                     or "qemuzynq". | 
 | 144 |                     The <replaceable>MACHINE</replaceable> and | 
 | 145 |                     <replaceable>QEMUARCH</replaceable> options are basically | 
 | 146 |                     identical. | 
 | 147 |                     If you do not provide a <replaceable>MACHINE</replaceable> | 
 | 148 |                     option, <filename>runqemu</filename> tries to determine | 
 | 149 |                     it based on other options. | 
 | 150 |                     </para></listitem> | 
 | 151 |                 <listitem><para><filename>ramfs</filename>: | 
 | 152 |                     Indicates you are booting an initial RAM disk (initramfs) | 
 | 153 |                     image, which means the <filename>FSTYPE</filename> is | 
 | 154 |                     <filename>cpio.gz</filename>. | 
 | 155 |                     </para></listitem> | 
 | 156 |                 <listitem><para><filename>iso</filename>: | 
 | 157 |                     Indicates you are booting an ISO image, which means the | 
 | 158 |                     <filename>FSTYPE</filename> is | 
 | 159 |                     <filename>.iso</filename>. | 
 | 160 |                     </para></listitem> | 
 | 161 |                 <listitem><para><filename>nographic</filename>: | 
 | 162 |                     Disables the video console, which sets the console to | 
 | 163 |                     "ttys0". | 
 | 164 |                     </para></listitem> | 
 | 165 |                 <listitem><para><filename>serial</filename>: | 
 | 166 |                     Enables a serial console on | 
 | 167 |                     <filename>/dev/ttyS0</filename>. | 
 | 168 |                     </para></listitem> | 
 | 169 |                 <listitem><para><filename>biosdir</filename>: | 
 | 170 |                     Establishes a custom directory for BIOS, VGA BIOS and | 
 | 171 |                     keymaps. | 
 | 172 |                     </para></listitem> | 
 | 173 |                 <listitem><para><filename>biosfilename</filename>: | 
 | 174 |                     Establishes a custom BIOS name. | 
 | 175 |                     </para></listitem> | 
 | 176 |                 <listitem><para><filename>qemuparams=\"<replaceable>xyz</replaceable>\"</filename>: | 
 | 177 |                     Specifies custom QEMU parameters. | 
 | 178 |                     Use this option to pass options other than the simple | 
 | 179 |                     "kvm" and "serial" options. | 
 | 180 |                     </para></listitem> | 
 | 181 |                 <listitem><para><filename>bootparams=\"<replaceable>xyz</replaceable>\"</filename>: | 
 | 182 |                     Specifies custom boot parameters for the kernel. | 
 | 183 |                     </para></listitem> | 
 | 184 |                 <listitem><para><filename>audio</filename>: | 
 | 185 |                     Enables audio in QEMU. | 
 | 186 |                     The <replaceable>MACHINE</replaceable> option must be | 
 | 187 |                     either "qemux86" or "qemux86-64" in order for audio to be | 
 | 188 |                     enabled. | 
 | 189 |                     Additionally, the <filename>snd_intel8x0</filename> | 
 | 190 |                     or <filename>snd_ens1370</filename> driver must be | 
 | 191 |                     installed in linux guest. | 
 | 192 |                     </para></listitem> | 
 | 193 |                 <listitem><para><filename>slirp</filename>: | 
 | 194 |                     Enables "slirp" networking, which is a different way | 
 | 195 |                     of networking that does not need root access | 
 | 196 |                     but also is not as easy to use or comprehensive | 
 | 197 |                     as the default. | 
 | 198 |                     </para></listitem> | 
| Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 199 |                 <listitem><para id='kvm-cond'><filename>kvm</filename>: | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 200 |                     Enables KVM when running "qemux86" or "qemux86-64" | 
 | 201 |                     QEMU architectures. | 
 | 202 |                     For KVM to work, all the following conditions must be met: | 
 | 203 |                     <itemizedlist> | 
 | 204 |                         <listitem><para> | 
 | 205 |                             Your <replaceable>MACHINE</replaceable> must be either | 
| Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 206 | qemux86" or "qemux86-64". | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 207 |                             </para></listitem> | 
 | 208 |                         <listitem><para> | 
 | 209 |                             Your build host has to have the KVM modules | 
 | 210 |                             installed, which are | 
 | 211 |                             <filename>/dev/kvm</filename>. | 
 | 212 |                             </para></listitem> | 
 | 213 |                         <listitem><para> | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 214 |                             The  build host <filename>/dev/kvm</filename> | 
 | 215 |                             directory has to be both writable and readable. | 
 | 216 |                             </para></listitem> | 
| Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 217 |                     </itemizedlist> | 
 | 218 |                     </para></listitem> | 
 | 219 |                 <listitem><para><filename>kvm-vhost</filename>: | 
 | 220 |                     Enables KVM with VHOST support when running "qemux86" or "qemux86-64" | 
 | 221 |                     QEMU architectures. | 
 | 222 |                     For KVM with VHOST to work, the following conditions must | 
 | 223 |                     be met: | 
 | 224 |                     <itemizedlist> | 
 | 225 |                         <listitem><para> | 
 | 226 |                             <link linkend='kvm-cond'>kvm</link> option | 
 | 227 |                             conditions must be met. | 
 | 228 |                             </para></listitem> | 
 | 229 |                         <listitem><para> | 
 | 230 |                             Your build host has to have virtio net device, which | 
 | 231 |                             are <filename>/dev/vhost-net</filename>. | 
 | 232 |                             </para></listitem> | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 233 |                         <listitem><para> | 
 | 234 |                             The build host <filename>/dev/vhost-net</filename> | 
 | 235 |                             directory has to be either readable or writable | 
 | 236 |                             and “slirp-enabled”. | 
 | 237 |                             </para></listitem> | 
 | 238 |                     </itemizedlist> | 
 | 239 |                     </para></listitem> | 
 | 240 |                 <listitem><para><filename>publicvnc</filename>: | 
 | 241 |                     Enables a VNC server open to all hosts. | 
 | 242 |                     </para></listitem> | 
 | 243 |             </itemizedlist> | 
 | 244 |         </para> | 
 | 245 |  | 
 | 246 |         <para> | 
 | 247 |             For further understanding regarding option use with | 
 | 248 |             <filename>runqemu</filename>, consider some examples. | 
 | 249 |         </para> | 
 | 250 |  | 
 | 251 |         <para> | 
 | 252 |             This example starts QEMU with | 
 | 253 |             <replaceable>MACHINE</replaceable> set to "qemux86". | 
 | 254 |             Assuming a standard | 
 | 255 |             <link linkend='build-directory'>Build Directory</link>, | 
 | 256 |             <filename>runqemu</filename> automatically finds the | 
 | 257 |             <filename>bzImage-qemux86.bin</filename> image file and | 
 | 258 |             the | 
 | 259 |             <filename>core-image-minimal-qemux86-20140707074611.rootfs.ext3</filename> | 
 | 260 |             (assuming the current build created a | 
 | 261 |             <filename>core-image-minimal</filename> image). | 
 | 262 |             <note> | 
 | 263 |                 When more than one image with the same name exists, QEMU finds | 
 | 264 |                 and uses the most recently built image according to the | 
 | 265 |                 timestamp. | 
 | 266 |             </note> | 
 | 267 |             <literallayout class='monospaced'> | 
 | 268 |     $ runqemu qemux86 | 
 | 269 |             </literallayout> | 
 | 270 |             This example produces the exact same results as the | 
 | 271 |             previous example. | 
 | 272 |             This command, however, specifically provides the image | 
 | 273 |             and root filesystem type. | 
 | 274 |             <literallayout class='monospaced'> | 
 | 275 |      $ runqemu qemux86 core-image-minimal ext3 | 
 | 276 |             </literallayout> | 
 | 277 |             This example specifies to boot an initial RAM disk image | 
 | 278 |             and to enable audio in QEMU. | 
 | 279 |             For this case, <filename>runqemu</filename> set the | 
 | 280 |             internal variable <filename>FSTYPE</filename> to | 
 | 281 |             "cpio.gz". | 
 | 282 |             Also, for audio to be enabled, an appropriate driver must | 
 | 283 |             be installed (see the previous description for the | 
 | 284 |             <filename>audio</filename> option for more information). | 
 | 285 |             <literallayout class='monospaced'> | 
 | 286 |      $ runqemu qemux86 ramfs audio | 
 | 287 |             </literallayout> | 
 | 288 |             This example does not provide enough information for | 
 | 289 |             QEMU to launch. | 
 | 290 |             While the command does provide a root filesystem type, it | 
 | 291 |             must also minimally provide a | 
 | 292 |             <replaceable>MACHINE</replaceable>, | 
 | 293 |             <replaceable>KERNEL</replaceable>, or | 
 | 294 |             <replaceable>VM</replaceable> option. | 
 | 295 |             <literallayout class='monospaced'> | 
 | 296 |      $ runqemu ext3 | 
 | 297 |             </literallayout> | 
 | 298 |             This example specifies to boot a virtual machine image | 
 | 299 |             (<filename>.vmdk</filename> file). | 
 | 300 |             From the <filename>.vmdk</filename>, | 
 | 301 |             <filename>runqemu</filename> determines the QEMU | 
 | 302 |             architecture (<replaceable>MACHINE</replaceable>) to be | 
 | 303 |             "qemux86" and the root filesystem type to be "vmdk". | 
 | 304 |             <literallayout class='monospaced'> | 
 | 305 |      $ runqemu /home/scott-lenovo/vm/core-image-minimal-qemux86.vmdk | 
 | 306 |             </literallayout> | 
 | 307 |         </para> | 
 | 308 |     </section> | 
 | 309 | </section> | 
 | 310 |  | 
 | 311 | <section id='qemu-running-under-a-network-file-system-nfs-server'> | 
 | 312 |     <title>Running Under a Network File System (NFS) Server</title> | 
 | 313 |  | 
 | 314 |     <para> | 
 | 315 |         One method for running QEMU is to run it on an NFS server. | 
 | 316 |         This is useful when you need to access the same file system from both | 
 | 317 |         the build and the emulated system at the same time. | 
 | 318 |         It is also worth noting that the system does not need root privileges | 
 | 319 |         to run. | 
 | 320 |         It uses a user space NFS server to avoid that. | 
 | 321 |         This section describes how to set up for running QEMU using an NFS | 
 | 322 |         server and then how you can start and stop the server. | 
 | 323 |     </para> | 
 | 324 |  | 
 | 325 |     <section id='qemu-setting-up-to-use-nfs'> | 
 | 326 |         <title>Setting Up to Use NFS</title> | 
 | 327 |  | 
 | 328 |         <para> | 
 | 329 |             Once you are able to run QEMU in your environment, you can use the | 
 | 330 |             <filename>runqemu-extract-sdk</filename> script, which is located | 
 | 331 |             in the <filename>scripts</filename> directory along with | 
 | 332 |             <filename>runqemu</filename> script. | 
 | 333 |             The <filename>runqemu-extract-sdk</filename> takes a root | 
 | 334 |             file system tarball and extracts it into a location that you | 
 | 335 |             specify. | 
 | 336 |             Then, when you run <filename>runqemu</filename>, you can specify | 
 | 337 |             the location that has the file system to pass it to QEMU. | 
 | 338 |             Here is an example that takes a file system and extracts it to | 
 | 339 |             a directory named <filename>test-nfs</filename>: | 
 | 340 |             <literallayout class='monospaced'> | 
 | 341 |      runqemu-extract-sdk ./tmp/deploy/images/qemux86/core-image-sato-qemux86.tar.bz2 test-nfs | 
 | 342 |             </literallayout> | 
 | 343 |             Once you have extracted the file system, you can run | 
 | 344 |             <filename>runqemu</filename> normally with the additional | 
 | 345 |             location of the file system. | 
 | 346 |             You can then also make changes to the files within | 
 | 347 |             <filename>./test-nfs</filename> and see those changes appear in the | 
 | 348 |             image in real time. | 
 | 349 |             Here is an example using the <filename>qemux86</filename> image: | 
 | 350 |             <literallayout class='monospaced'> | 
 | 351 |      runqemu qemux86 ./test-nfs | 
 | 352 |             </literallayout> | 
 | 353 |         </para> | 
 | 354 |     </section> | 
 | 355 |  | 
 | 356 |     <section id='qemu-starting-and-stopping-nfs'> | 
 | 357 |         <title>Starting and Stopping NFS</title> | 
 | 358 |  | 
 | 359 |         <para> | 
 | 360 |             You can manually start and stop the NFS share using these | 
 | 361 |             commands: | 
 | 362 |             <itemizedlist> | 
 | 363 |                 <listitem><para><emphasis><filename>start</filename>:</emphasis> | 
 | 364 |                     Starts the NFS share: | 
 | 365 |                     <literallayout class='monospaced'> | 
 | 366 |      runqemu-export-rootfs start <replaceable>file-system-location</replaceable> | 
 | 367 |                     </literallayout> | 
 | 368 |                     </para></listitem> | 
 | 369 |                 <listitem><para><emphasis><filename>stop</filename>:</emphasis> | 
 | 370 |                     Stops the NFS share: | 
 | 371 |                     <literallayout class='monospaced'> | 
 | 372 |      runqemu-export-rootfs stop <replaceable>file-system-location</replaceable> | 
 | 373 |                     </literallayout> | 
 | 374 |                     </para></listitem> | 
 | 375 |                 <listitem><para><emphasis><filename>restart</filename>:</emphasis> | 
 | 376 |                     Restarts the NFS share: | 
 | 377 |                     <literallayout class='monospaced'> | 
 | 378 |      runqemu-export-rootfs restart <replaceable>file-system-location</replaceable> | 
 | 379 |                     </literallayout> | 
 | 380 |                     </para></listitem> | 
 | 381 |             </itemizedlist> | 
 | 382 |         </para> | 
 | 383 |     </section> | 
 | 384 | </section> | 
 | 385 |  | 
 | 386 | <section id='qemu-tips-and-tricks'> | 
 | 387 |     <title>Tips and Tricks</title> | 
 | 388 |  | 
 | 389 |     <para> | 
 | 390 |         The following list describes things you can do to make running QEMU | 
 | 391 |         in the context of the Yocto Project a better experience: | 
 | 392 |         <itemizedlist> | 
 | 393 |             <listitem><para><emphasis>Switching Between Consoles:</emphasis> | 
 | 394 |                 When booting or running QEMU, you can switch between | 
 | 395 |                 supported consoles by using | 
 | 396 |                 Ctrl+Alt+<replaceable>number</replaceable>. | 
 | 397 |                 For example, Ctrl+Alt+3 switches you to the serial console as | 
 | 398 |                 long as that console is enabled. | 
 | 399 |                 Being able to switch consoles is helpful, for example, if the | 
 | 400 |                 main QEMU console breaks for some reason. | 
 | 401 |                 <note> | 
 | 402 |                     Usually, "2" gets you to the main console and "3" gets you | 
 | 403 |                     to the serial console. | 
 | 404 |                 </note> | 
 | 405 |                 </para></listitem> | 
 | 406 |             <listitem><para><emphasis>Removing the Splash Screen:</emphasis> | 
 | 407 |                 You can remove the splash screen when QEMU is booting by | 
 | 408 |                 using Alt+left. | 
 | 409 |                 Removing the splash screen allows you to see what is happening | 
 | 410 |                 in the background. | 
 | 411 |                 </para></listitem> | 
 | 412 |             <listitem><para><emphasis>Disabling the Cursor Grab:</emphasis> | 
 | 413 |                 The default QEMU integration captures the cursor within the | 
 | 414 |                 main window. | 
 | 415 |                 It does this since standard mouse devices only provide relative | 
 | 416 |                 input and not absolute coordinates. | 
 | 417 |                 You then have to break out of the grab using the "Ctrl+Alt" key | 
 | 418 |                 combination. | 
 | 419 |                 However, the Yocto Project's integration of QEMU enables the | 
 | 420 |                 wacom USB touch pad driver by default to allow input of absolute | 
 | 421 |                 coordinates. | 
 | 422 |                 This default means that the mouse can enter and leave the | 
 | 423 |                 main window without the grab taking effect leading to a better | 
 | 424 |                 user experience. | 
 | 425 |                 </para></listitem> | 
 | 426 |         </itemizedlist> | 
 | 427 |     </para> | 
 | 428 | </section> | 
 | 429 |  | 
 | 430 | </chapter> | 
 | 431 | <!-- | 
 | 432 | vim: expandtab tw=80 ts=4 | 
 | 433 | --> |