XER is to be treated as a 64 bits register on 64 bits implementations,
[qemu] / qemu-doc.texi
index c75d9e0..c3a529b 100644 (file)
@@ -50,13 +50,13 @@ QEMU has two operating modes:
 
 @itemize @minus
 
-@item 
+@item
 Full system emulation. In this mode, QEMU emulates a full system (for
 example a PC), including one or several processors and various
 peripherals. It can be used to launch different Operating Systems
 without rebooting the PC or to debug system code.
 
-@item 
+@item
 User mode emulation. In this mode, QEMU can launch
 processes compiled for one CPU on another CPU. It can be used to
 launch the Wine Windows API emulator (@url{http://www.winehq.org}) or
@@ -65,7 +65,7 @@ to ease cross-compilation and cross-debugging.
 @end itemize
 
 QEMU can run without an host kernel driver and yet gives acceptable
-performance. 
+performance.
 
 For system emulation, the following hardware targets are supported:
 @itemize
@@ -129,6 +129,7 @@ Download the experimental binary installer at
 * pcsys_network::      Network emulation
 * direct_linux_boot::  Direct Linux Boot
 * pcsys_usb::          USB emulation
+* vnc_security::       VNC security
 * gdb_usage::          GDB usage
 * pcsys_os_specific::  Target OS specific information
 @end menu
@@ -142,18 +143,18 @@ The QEMU PC System emulator simulates the
 following peripherals:
 
 @itemize @minus
-@item 
+@item
 i440FX host PCI bridge and PIIX3 PCI to ISA bridge
 @item
 Cirrus CLGD 5446 PCI VGA card or dummy VGA card with Bochs VESA
 extensions (hardware level, including all non standard modes).
 @item
 PS/2 mouse and keyboard
-@item 
+@item
 2 PCI IDE interfaces with hard disk and CD-ROM support
 @item
 Floppy disk
-@item 
+@item
 PCI/ISA PCI network adapters
 @item
 Serial ports
@@ -243,53 +244,6 @@ Set virtual RAM size to @var{megs} megabytes. Default is 128 MB.
 Simulate an SMP system with @var{n} CPUs. On the PC target, up to 255
 CPUs are supported.
 
-@item -nographic
-
-Normally, QEMU uses SDL to display the VGA output. With this option,
-you can totally disable graphical output so that QEMU is a simple
-command line application. The emulated serial port is redirected on
-the console. Therefore, you can still use QEMU to debug a Linux kernel
-with a serial console.
-
-@item -no-frame
-
-Do not use decorations for SDL windows and start them using the whole
-available screen space. This makes the using QEMU in a dedicated desktop
-workspace more convenient.
-
-@item -vnc display
-
-Normally, QEMU uses SDL to display the VGA output.  With this option,
-you can have QEMU listen on VNC display @var{display} and redirect the VGA
-display over the VNC session.  It is very useful to enable the usb
-tablet device when using this option (option @option{-usbdevice
-tablet}). When using the VNC display, you must use the @option{-k}
-option to set the keyboard layout if you are not using en-us.
-
-@var{display} may be in the form @var{interface:d}, in which case connections
-will only be allowed from @var{interface} on display @var{d}. Optionally,
-@var{interface} can be omitted.  @var{display} can also be in the form
-@var{unix:path} where @var{path} is the location of a unix socket to listen for
-connections on.
-
-
-@item -k language
-
-Use keyboard layout @var{language} (for example @code{fr} for
-French). This option is only needed where it is not easy to get raw PC
-keycodes (e.g. on Macs, with some X11 servers or with a VNC
-display). You don't normally need to use it on PC/Linux or PC/Windows
-hosts.
-
-The available layouts are:
-@example
-ar  de-ch  es  fo     fr-ca  hu  ja  mk     no  pt-br  sv
-da  en-gb  et  fr     fr-ch  is  lt  nl     pl  ru     th
-de  en-us  fi  fr-be  hr     it  lv  nl-be  pt  sl     tr
-@end example
-
-The default is @code{en-us}.
-
 @item -audio-help
 
 Will show the audio subsystem help: list of drivers, tunable
@@ -312,9 +266,6 @@ Set the real time clock to local time (the default is to UTC
 time). This option is needed to have correct date in MS-DOS or
 Windows.
 
-@item -full-screen
-Start in full screen.
-
 @item -pidfile file
 Store the QEMU process PID in @var{file}. It is useful if you launch QEMU
 from a script.
@@ -340,6 +291,117 @@ caption.  The name will also be used for the VNC server.
 
 @end table
 
+Display options:
+@table @option
+
+@item -nographic
+
+Normally, QEMU uses SDL to display the VGA output. With this option,
+you can totally disable graphical output so that QEMU is a simple
+command line application. The emulated serial port is redirected on
+the console. Therefore, you can still use QEMU to debug a Linux kernel
+with a serial console.
+
+@item -no-frame
+
+Do not use decorations for SDL windows and start them using the whole
+available screen space. This makes the using QEMU in a dedicated desktop
+workspace more convenient.
+
+@item -full-screen
+Start in full screen.
+
+@item -vnc display[,option[,option[,...]]]
+
+Normally, QEMU uses SDL to display the VGA output.  With this option,
+you can have QEMU listen on VNC display @var{display} and redirect the VGA
+display over the VNC session.  It is very useful to enable the usb
+tablet device when using this option (option @option{-usbdevice
+tablet}). When using the VNC display, you must use the @option{-k}
+parameter to set the keyboard layout if you are not using en-us. Valid
+syntax for the @var{display} is
+
+@table @code
+
+@item @var{interface:d}
+
+TCP connections will only be allowed from @var{interface} on display @var{d}.
+By convention the TCP port is 5900+@var{d}. Optionally, @var{interface} can
+be omitted in which case the server will bind to all interfaces.
+
+@item @var{unix:path}
+
+Connections will be allowed over UNIX domain sockets where @var{path} is the
+location of a unix socket to listen for connections on.
+
+@item @var{none}
+
+VNC is initialized by not started. The monitor @code{change} command can be used
+to later start the VNC server.
+
+@end table
+
+Following the @var{display} value there may be one or more @var{option} flags
+separated by commas. Valid options are
+
+@table @code
+
+@item @var{password}
+
+Require that password based authentication is used for client connections.
+The password must be set separately using the @code{change} command in the
+@ref{pcsys_monitor}
+
+@item @var{tls}
+
+Require that client use TLS when communicating with the VNC server. This
+uses anonymous TLS credentials so is susceptible to a man-in-the-middle
+attack. It is recommended that this option be combined with either the
+@var{x509} or @var{x509verify} options.
+
+@item @var{x509=/path/to/certificate/dir}
+
+Valid if @var{tls} is specified. Require that x509 credentials are used
+for negotiating the TLS session. The server will send its x509 certificate
+to the client. It is recommended that a password be set on the VNC server
+to provide authentication of the client when this is used. The path following
+this option specifies where the x509 certificates are to be loaded from.
+See the @ref{vnc_security} section for details on generating certificates.
+
+@item @var{x509verify=/path/to/certificate/dir}
+
+Valid if @var{tls} is specified. Require that x509 credentials are used
+for negotiating the TLS session. The server will send its x509 certificate
+to the client, and request that the client send its own x509 certificate.
+The server will validate the client's certificate against the CA certificate,
+and reject clients when validation fails. If the certificate authority is
+trusted, this is a sufficient authentication mechanism. You may still wish
+to set a password on the VNC server as a second authentication layer. The
+path following this option specifies where the x509 certificates are to
+be loaded from. See the @ref{vnc_security} section for details on generating
+certificates.
+
+@end table
+
+@item -k language
+
+Use keyboard layout @var{language} (for example @code{fr} for
+French). This option is only needed where it is not easy to get raw PC
+keycodes (e.g. on Macs, with some X11 servers or with a VNC
+display). You don't normally need to use it on PC/Linux or PC/Windows
+hosts.
+
+The available layouts are:
+@example
+ar  de-ch  es  fo     fr-ca  hu  ja  mk     no  pt-br  sv
+da  en-gb  et  fr     fr-ch  is  lt  nl     pl  ru     th
+de  en-us  fi  fr-be  hr     it  lv  nl-be  pt  sl     tr
+@end example
+
+The default is @code{en-us}.
+
+@end table
+
 USB options:
 @table @option
 
@@ -414,12 +476,12 @@ qemu linux.img -net nic,macaddr=52:54:00:12:34:57 \
 @item -net socket[,vlan=n][,fd=h][,mcast=maddr:port]
 
 Create a VLAN @var{n} shared with another QEMU virtual
-machines using a UDP multicast socket, effectively making a bus for 
+machines using a UDP multicast socket, effectively making a bus for
 every QEMU with same multicast address @var{maddr} and @var{port}.
 NOTES:
 @enumerate
-@item 
-Several QEMU can be running on different hosts and share same bus (assuming 
+@item
+Several QEMU can be running on different hosts and share same bus (assuming
 correct multicast setup for these hosts).
 @item
 mcast support is compatible with User Mode Linux (argument @option{eth@var{N}=mcast}), see
@@ -529,10 +591,10 @@ for easier testing of various kernels.
 
 @table @option
 
-@item -kernel bzImage 
+@item -kernel bzImage
 Use @var{bzImage} as kernel image.
 
-@item -append cmdline 
+@item -append cmdline
 Use @var{cmdline} as kernel command line
 
 @item -initrd file
@@ -689,13 +751,13 @@ character to Control-t.
 @end table
 
 @item -s
-Wait gdb connection to port 1234 (@pxref{gdb_usage}). 
+Wait gdb connection to port 1234 (@pxref{gdb_usage}).
 @item -p port
 Change gdb connection port.  @var{port} can be either a decimal number
 to specify a TCP port, or a host device (same devices as the serial port).
 @item -S
 Do not start CPU at startup (you must type 'c' in the monitor).
-@item -d             
+@item -d
 Output log in /tmp/qemu.log
 @item -hdachs c,h,s,[,t]
 Force hard disk 0 physical geometry (1 <= @var{c} <= 16383, 1 <=
@@ -770,9 +832,9 @@ During emulation, if you are using the @option{-nographic} option, use
 @table @key
 @item Ctrl-a h
 Print this help
-@item Ctrl-a x    
+@item Ctrl-a x
 Exit emulator
-@item Ctrl-a s    
+@item Ctrl-a s
 Save disk data back to file (if -snapshot)
 @item Ctrl-a t
 toggle console timestamps
@@ -810,7 +872,7 @@ emulator. You can use it to:
 Remove or insert removable media images
 (such as CD-ROM or floppies)
 
-@item 
+@item
 Freeze/unfreeze the Virtual Machine (VM) and save or restore its state
 from a disk file.
 
@@ -827,10 +889,10 @@ The following commands are available:
 @item help or ? [cmd]
 Show the help for all commands or just for command @var{cmd}.
 
-@item commit  
+@item commit
 Commit changes to the disk images (if -snapshot is used)
 
-@item info subcommand 
+@item info subcommand
 show various information about the system state
 
 @table @option
@@ -862,8 +924,38 @@ Quit the emulator.
 @item eject [-f] device
 Eject a removable medium (use -f to force it).
 
-@item change device filename
-Change a removable medium.
+@item change device setting
+
+Change the configuration of a device
+
+@table @option
+@item change @var{diskdevice} @var{filename}
+Change the medium for a removable disk device to point to @var{filename}. eg
+
+@example
+(qemu) change cdrom /path/to/some.iso
+@end example
+
+@item change vnc @var{display,options}
+Change the configuration of the VNC server. The valid syntax for @var{display}
+and @var{options} are described at @ref{sec_invocation}. eg
+
+@example
+(qemu) change vnc localhost:1
+@end example
+
+@item change vnc password
+
+Change the password associated with the VNC server. The monitor will prompt for
+the new password to be entered. VNC passwords are only significant upto 8 letters.
+eg.
+
+@example
+(qemu) change vnc password
+Password: ********
+@end example
+
+@end table
 
 @item screendump filename
 Save screen into PPM image @var{filename}.
@@ -934,7 +1026,7 @@ Physical memory dump starting at @var{addr}.
 data. Its syntax is: @option{/@{count@}@{format@}@{size@}}
 
 @table @var
-@item count 
+@item count
 is the number of items to be dumped.
 
 @item format
@@ -948,11 +1040,11 @@ respectively select 16 or 32 bit code instruction size.
 
 @end table
 
-Examples: 
+Examples:
 @itemize
 @item
 Dump 10 instructions at the current instruction pointer:
-@example 
+@example
 (qemu) x/10i $eip
 0x90107063:  ret
 0x90107064:  sti
@@ -968,7 +1060,7 @@ Dump 10 instructions at the current instruction pointer:
 
 @item
 Dump 80 16 bit values at the start of the video memory.
-@smallexample 
+@smallexample
 (qemu) xp/80hx 0xb8000
 0x000b8000: 0x0b50 0x0b6c 0x0b65 0x0b78 0x0b38 0x0b36 0x0b2f 0x0b42
 0x000b8010: 0x0b6f 0x0b63 0x0b68 0x0b73 0x0b20 0x0b56 0x0b47 0x0b41
@@ -1105,10 +1197,10 @@ but they are deleted as soon as you exit QEMU.
 
 VM snapshots currently have the following known limitations:
 @itemize
-@item 
+@item
 They cannot cope with removable devices if they are removed or
 inserted after a snapshot is done.
-@item 
+@item
 A few device drivers still have incomplete snapshot support so their
 state is not saved or restored properly (in particular USB).
 @end itemize
@@ -1164,8 +1256,6 @@ change or eject media.
 @item Hard disks
 Hard disks can be used with the syntax: @file{\\.\PhysicalDriveN}
 where @var{N} is the drive number (0 is the first hard disk).
-@file{/dev/hda} is supported as an alias to the first hard disk
-drive @file{\\.\PhysicalDrive0}.
 
 WARNING: unless you know what you do, it is better to only make
 READ-ONLY accesses to the hard disk otherwise you may corrupt your
@@ -1176,7 +1266,7 @@ modifications are written in a temporary file).
 
 @subsubsection Mac OS X
 
-@file{/dev/cdrom} is an alias to the first CDROM. 
+@file{/dev/cdrom} is an alias to the first CDROM.
 
 Currently there is no specific code to handle removable media, so it
 is better to use the @code{change} or @code{eject} monitor commands to
@@ -1188,7 +1278,7 @@ change or eject media.
 QEMU can automatically create a virtual FAT disk image from a
 directory tree. In order to use it, just type:
 
-@example 
+@example
 qemu linux.img -hdb fat:/my_directory
 @end example
 
@@ -1198,14 +1288,14 @@ them via SAMBA or NFS. The default access is @emph{read-only}.
 
 Floppies can be emulated with the @code{:floppy:} option:
 
-@example 
+@example
 qemu linux.img -fda fat:floppy:/my_directory
 @end example
 
 A read/write support is available for testing (beta stage) with the
 @code{:rw:} option:
 
-@example 
+@example
 qemu linux.img -fda fat:floppy:rw:/my_directory
 @end example
 
@@ -1273,7 +1363,7 @@ network). The virtual network configuration is the following:
                            |          (10.0.2.2)
                            |
                            ---->  DNS server (10.0.2.3)
-                           |     
+                           |
                            ---->  SMB server (10.0.2.4)
 @end example
 
@@ -1383,7 +1473,7 @@ using it. USB devices requiring real time streaming (i.e. USB Video
 Cameras) are not supported yet.
 
 @enumerate
-@item If you use an early Linux 2.4 kernel, verify that no Linux driver 
+@item If you use an early Linux 2.4 kernel, verify that no Linux driver
 is actually using the USB device. A simple way to do that is simply to
 disable the corresponding kernel module by renaming it from @file{mydriver.o}
 to @file{mydriver.o.disabled}.
@@ -1400,7 +1490,7 @@ chown -R myuid /proc/bus/usb
 @end example
 
 @item Launch QEMU and do in the monitor:
-@example 
+@example
 info usbhost
   Device 1.2, speed 480 Mb/s
     Class 00: USB device 1234:5678, USB DISK
@@ -1409,7 +1499,7 @@ You should see the list of the devices you can use (Never try to use
 hubs, it won't work).
 
 @item Add the device in QEMU by using:
-@example 
+@example
 usb_add host:1234:5678
 @end example
 
@@ -1423,6 +1513,213 @@ plugged. You can use the option @option{-usbdevice} to do the same.
 When relaunching QEMU, you may have to unplug and plug again the USB
 device to make it work again (this is a bug).
 
+@node vnc_security
+@section VNC security
+
+The VNC server capability provides access to the graphical console
+of the guest VM across the network. This has a number of security
+considerations depending on the deployment scenarios.
+
+@menu
+* vnc_sec_none::
+* vnc_sec_password::
+* vnc_sec_certificate::
+* vnc_sec_certificate_verify::
+* vnc_sec_certificate_pw::
+* vnc_generate_cert::
+@end menu
+@node vnc_sec_none
+@subsection Without passwords
+
+The simplest VNC server setup does not include any form of authentication.
+For this setup it is recommended to restrict it to listen on a UNIX domain
+socket only. For example
+
+@example
+qemu [...OPTIONS...] -vnc unix:/home/joebloggs/.qemu-myvm-vnc
+@end example
+
+This ensures that only users on local box with read/write access to that
+path can access the VNC server. To securely access the VNC server from a
+remote machine, a combination of netcat+ssh can be used to provide a secure
+tunnel.
+
+@node vnc_sec_password
+@subsection With passwords
+
+The VNC protocol has limited support for password based authentication. Since
+the protocol limits passwords to 8 characters it should not be considered
+to provide high security. The password can be fairly easily brute-forced by
+a client making repeat connections. For this reason, a VNC server using password
+authentication should be restricted to only listen on the loopback interface
+or UNIX domain sockets. Password ayuthentication is requested with the @code{password}
+option, and then once QEMU is running the password is set with the monitor. Until
+the monitor is used to set the password all clients will be rejected.
+
+@example
+qemu [...OPTIONS...] -vnc :1,password -monitor stdio
+(qemu) change vnc password
+Password: ********
+(qemu)
+@end example
+
+@node vnc_sec_certificate
+@subsection With x509 certificates
+
+The QEMU VNC server also implements the VeNCrypt extension allowing use of
+TLS for encryption of the session, and x509 certificates for authentication.
+The use of x509 certificates is strongly recommended, because TLS on its
+own is susceptible to man-in-the-middle attacks. Basic x509 certificate
+support provides a secure session, but no authentication. This allows any
+client to connect, and provides an encrypted session.
+
+@example
+qemu [...OPTIONS...] -vnc :1,tls,x509=/etc/pki/qemu -monitor stdio
+@end example
+
+In the above example @code{/etc/pki/qemu} should contain at least three files,
+@code{ca-cert.pem}, @code{server-cert.pem} and @code{server-key.pem}. Unprivileged
+users will want to use a private directory, for example @code{$HOME/.pki/qemu}.
+NB the @code{server-key.pem} file should be protected with file mode 0600 to
+only be readable by the user owning it.
+
+@node vnc_sec_certificate_verify
+@subsection With x509 certificates and client verification
+
+Certificates can also provide a means to authenticate the client connecting.
+The server will request that the client provide a certificate, which it will
+then validate against the CA certificate. This is a good choice if deploying
+in an environment with a private internal certificate authority.
+
+@example
+qemu [...OPTIONS...] -vnc :1,tls,x509verify=/etc/pki/qemu -monitor stdio
+@end example
+
+
+@node vnc_sec_certificate_pw
+@subsection With x509 certificates, client verification and passwords
+
+Finally, the previous method can be combined with VNC password authentication
+to provide two layers of authentication for clients.
+
+@example
+qemu [...OPTIONS...] -vnc :1,password,tls,x509verify=/etc/pki/qemu -monitor stdio
+(qemu) change vnc password
+Password: ********
+(qemu)
+@end example
+
+@node vnc_generate_cert
+@subsection Generating certificates for VNC
+
+The GNU TLS packages provides a command called @code{certtool} which can
+be used to generate certificates and keys in PEM format. At a minimum it
+is neccessary to setup a certificate authority, and issue certificates to
+each server. If using certificates for authentication, then each client
+will also need to be issued a certificate. The recommendation is for the
+server to keep its certificates in either @code{/etc/pki/qemu} or for
+unprivileged users in @code{$HOME/.pki/qemu}.
+
+@menu
+* vnc_generate_ca::
+* vnc_generate_server::
+* vnc_generate_client::
+@end menu
+@node vnc_generate_ca
+@subsubsection Setup the Certificate Authority
+
+This step only needs to be performed once per organization / organizational
+unit. First the CA needs a private key. This key must be kept VERY secret
+and secure. If this key is compromised the entire trust chain of the certificates
+issued with it is lost.
+
+@example
+# certtool --generate-privkey > ca-key.pem
+@end example
+
+A CA needs to have a public certificate. For simplicity it can be a self-signed
+certificate, or one issue by a commercial certificate issuing authority. To
+generate a self-signed certificate requires one core piece of information, the
+name of the organization.
+
+@example
+# cat > ca.info <<EOF
+cn = Name of your organization
+ca
+cert_signing_key
+EOF
+# certtool --generate-self-signed \
+           --load-privkey ca-key.pem
+           --template ca.info \
+           --outfile ca-cert.pem
+@end example
+
+The @code{ca-cert.pem} file should be copied to all servers and clients wishing to utilize
+TLS support in the VNC server. The @code{ca-key.pem} must not be disclosed/copied at all.
+
+@node vnc_generate_server
+@subsubsection Issuing server certificates
+
+Each server (or host) needs to be issued with a key and certificate. When connecting
+the certificate is sent to the client which validates it against the CA certificate.
+The core piece of information for a server certificate is the hostname. This should
+be the fully qualified hostname that the client will connect with, since the client
+will typically also verify the hostname in the certificate. On the host holding the
+secure CA private key:
+
+@example
+# cat > server.info <<EOF
+organization = Name  of your organization
+cn = server.foo.example.com
+tls_www_server
+encryption_key
+signing_key
+EOF
+# certtool --generate-privkey > server-key.pem
+# certtool --generate-certificate \
+           --load-ca-certificate ca-cert.pem \
+           --load-ca-privkey ca-key.pem \
+           --load-privkey server server-key.pem \
+           --template server.info \
+           --outfile server-cert.pem
+@end example
+
+The @code{server-key.pem} and @code{server-cert.pem} files should now be securely copied
+to the server for which they were generated. The @code{server-key.pem} is security
+sensitive and should be kept protected with file mode 0600 to prevent disclosure.
+
+@node vnc_generate_client
+@subsubsection Issuing client certificates
+
+If the QEMU VNC server is to use the @code{x509verify} option to validate client
+certificates as its authentication mechanism, each client also needs to be issued
+a certificate. The client certificate contains enough metadata to uniquely identify
+the client, typically organization, state, city, building, etc. On the host holding
+the secure CA private key:
+
+@example
+# cat > client.info <<EOF
+country = GB
+state = London
+locality = London
+organiazation = Name of your organization
+cn = client.foo.example.com
+tls_www_client
+encryption_key
+signing_key
+EOF
+# certtool --generate-privkey > client-key.pem
+# certtool --generate-certificate \
+           --load-ca-certificate ca-cert.pem \
+           --load-ca-privkey ca-key.pem \
+           --load-privkey client-key.pem \
+           --template client.info \
+           --outfile client-cert.pem
+@end example
+
+The @code{client-key.pem} and @code{client-cert.pem} files should now be securely
+copied to the client for which they were generated.
+
 @node gdb_usage
 @section GDB usage
 
@@ -1529,7 +1826,7 @@ Bartlett): go to the Control Panel => Add/Remove Hardware & Next =>
 Add/Troubleshoot a device => Add a new device & Next => No, select the
 hardware from a list & Next => NT Apm/Legacy Support & Next => Next
 (again) a few times. Now the driver is installed and Windows 2000 now
-correctly instructs QEMU to shutdown at the appropriate moment. 
+correctly instructs QEMU to shutdown at the appropriate moment.
 
 @subsubsection Share a directory between Unix and Windows
 
@@ -1584,13 +1881,13 @@ or PowerMac PowerPC system.
 QEMU emulates the following PowerMac peripherals:
 
 @itemize @minus
-@item 
-UniNorth PCI Bridge 
+@item
+UniNorth PCI Bridge
 @item
 PCI VGA compatible card with VESA Bochs Extensions
-@item 
+@item
 2 PMAC IDE interfaces with hard disk and CD-ROM support
-@item 
+@item
 NE2000 PCI adapters
 @item
 Non Volatile RAM
@@ -1601,15 +1898,15 @@ VIA-CUDA with ADB keyboard and mouse.
 QEMU emulates the following PREP peripherals:
 
 @itemize @minus
-@item 
+@item
 PCI Bridge
 @item
 PCI VGA compatible card with VESA Bochs Extensions
-@item 
+@item
 2 IDE interfaces with hard disk and CD-ROM support
 @item
 Floppy disk
-@item 
+@item
 NE2000 network adapters
 @item
 Serial port
@@ -1628,13 +1925,13 @@ The following options are specific to the PowerPC emulation:
 
 @table @option
 
-@item -g WxH[xDEPTH]  
+@item -g WxH[xDEPTH]
 
 Set the initial VGA graphic mode. The default is 800x600x15.
 
 @end table
 
-@c man end 
+@c man end
 
 
 More information is available at
@@ -1653,7 +1950,7 @@ QEMU emulates the following sun4m peripherals:
 IOMMU
 @item
 TCX Frame buffer
-@item 
+@item
 Lance (Am7990) Ethernet
 @item
 Non Volatile RAM M48T08
@@ -1705,7 +2002,7 @@ Set the emulated machine type. Default is SS-5.
 
 @end table
 
-@c man end 
+@c man end
 
 @node Sparc64 System emulator
 @section Sparc64 System emulator
@@ -1717,7 +2014,7 @@ QEMU emulates the following sun4u peripherals:
 
 @itemize @minus
 @item
-UltraSparc IIi APB PCI Bridge 
+UltraSparc IIi APB PCI Bridge
 @item
 PCI VGA compatible card with VESA Bochs Extensions
 @item
@@ -1746,7 +2043,7 @@ install Debian into a virtual disk image. The following devices are
 emulated:
 
 @itemize @minus
-@item 
+@item
 MIPS 24Kf CPU
 @item
 PC style serial port
@@ -1798,7 +2095,7 @@ devices:
 ARM926E, ARM1026E or ARM946E CPU
 @item
 Two PL011 UARTs
-@item 
+@item
 SMC 91c111 Ethernet adapter
 @item
 PL110 LCD controller
@@ -1817,7 +2114,7 @@ ARM926E CPU
 PL190 Vectored Interrupt Controller
 @item
 Four PL011 UARTs
-@item 
+@item
 SMC 91c111 Ethernet adapter
 @item
 PL110 LCD controller
@@ -1846,7 +2143,7 @@ ARM926E CPU
 ARM AMBA Generic/Distributed Interrupt Controller
 @item
 Four PL011 UARTs
-@item 
+@item
 SMC 91c111 Ethernet adapter
 @item
 PL110 LCD controller
@@ -1904,7 +2201,7 @@ The emulator is able to boot a uClinux kernel.
 The M5208EVB emulation includes the following devices:
 
 @itemize @minus
-@item 
+@item
 MCF5208 ColdFire V2 Microprocessor (ISA A+ with EMAC).
 @item
 Three Two on-chip UARTs.
@@ -1915,14 +2212,14 @@ Fast Ethernet Controller (FEC)
 The AN5206 emulation includes the following devices:
 
 @itemize @minus
-@item 
+@item
 MCF5206 ColdFire V2 Microprocessor.
 @item
 Two on-chip UARTs.
 @end itemize
 
-@node QEMU User space emulator 
-@chapter QEMU User space emulator 
+@node QEMU User space emulator
+@chapter QEMU User space emulator
 
 @menu
 * Supported Operating Systems ::
@@ -1956,14 +2253,14 @@ Mac OS X/Darwin (referred as qemu-darwin-user)
 @subsection Quick Start
 
 In order to launch a Linux process, QEMU needs the process executable
-itself and all the target (x86) dynamic libraries used by it. 
+itself and all the target (x86) dynamic libraries used by it.
 
 @itemize
 
 @item On x86, you can just try to launch any process by using the native
 libraries:
 
-@example 
+@example
 qemu-i386 -L / /bin/ls
 @end example
 
@@ -1973,7 +2270,7 @@ qemu-i386 -L / /bin/ls
 @item Since QEMU is also a linux process, you can launch qemu with
 qemu (NOTE: you can only do that if you compiled QEMU from the sources):
 
-@example 
+@example
 qemu-i386 -L / qemu-i386 -L / /bin/ls
 @end example
 
@@ -1982,7 +2279,7 @@ qemu-i386 -L / qemu-i386 -L / /bin/ls
 @code{LD_LIBRARY_PATH} is not set:
 
 @example
-unset LD_LIBRARY_PATH 
+unset LD_LIBRARY_PATH
 @end example
 
 Then you can launch the precompiled @file{ls} x86 executable:
@@ -2017,7 +2314,7 @@ qemu-i386 /usr/local/qemu-i386/bin/ls-i386
 @end example
 
 @item Download the binary x86 Wine install
-(@file{qemu-XXX-i386-wine.tar.gz} on the QEMU web page). 
+(@file{qemu-XXX-i386-wine.tar.gz} on the QEMU web page).
 
 @item Configure Wine on your account. Look at the provided script
 @file{/usr/local/qemu-i386/@/bin/wine-conf.sh}. Your previous
@@ -2042,7 +2339,7 @@ usage: qemu-i386 [-h] [-d] [-L path] [-s size] program [arguments...]
 @table @option
 @item -h
 Print the help
-@item -L path   
+@item -L path
 Set the x86 elf interpreter prefix (default=/usr/local/qemu-i386)
 @item -s size
 Set the x86 stack size in bytes (default=524288)
@@ -2108,20 +2405,20 @@ CD or compile them by hand.
 @item On x86, you can just try to launch any process by using the native
 libraries:
 
-@example 
+@example
 qemu-i386 /bin/ls
 @end example
 
 or to run the ppc version of the executable:
 
-@example 
+@example
 qemu-ppc /bin/ls
 @end example
 
 @item On ppc, you'll have to tell qemu where your x86 libraries (and dynamic linker)
 are installed:
 
-@example 
+@example
 qemu-i386 -L /opt/x86_root/ /bin/ls
 @end example
 
@@ -2140,7 +2437,7 @@ usage: qemu-i386 [-h] [-d] [-L path] [-s size] program [arguments...]
 @table @option
 @item -h
 Print the help
-@item -L path   
+@item -L path
 Set the library root path (default=/)
 @item -s size
 Set the stack size in bytes (default=524288)
@@ -2207,7 +2504,7 @@ these older versions so that usually you don't have to do anything.
 @url{http://www.mingw.org/}. You can find detailed installation
 instructions in the download section and the FAQ.
 
-@item Download 
+@item Download
 the MinGW development library of SDL 1.2.x
 (@file{SDL-devel-1.2.x-@/mingw32.tar.gz}) from
 @url{http://www.libsdl.org}. Unpack it in a temporary place, and
@@ -2216,14 +2513,14 @@ directory. Edit the @file{sdl-config} script so that it gives the
 correct SDL directory when invoked.
 
 @item Extract the current version of QEMU.
+
 @item Start the MSYS shell (file @file{msys.bat}).
 
-@item Change to the QEMU directory. Launch @file{./configure} and 
+@item Change to the QEMU directory. Launch @file{./configure} and
 @file{make}.  If you have problems using SDL, verify that
 @file{sdl-config} can be launched from the MSYS command line.
 
-@item You can install QEMU in @file{Program Files/Qemu} by typing 
+@item You can install QEMU in @file{Program Files/Qemu} by typing
 @file{make install}. Don't forget to copy @file{SDL.dll} in
 @file{Program Files/Qemu}.
 
@@ -2237,13 +2534,13 @@ correct SDL directory when invoked.
 Install the MinGW cross compilation tools available at
 @url{http://www.mingw.org/}.
 
-@item 
+@item
 Install the Win32 version of SDL (@url{http://www.libsdl.org}) by
 unpacking @file{i386-mingw32msvc.tar.gz}. Set up the PATH environment
 variable so that @file{i386-mingw32msvc-sdl-config} can be launched by
 the QEMU configuration script.
 
-@item 
+@item
 Configure QEMU for Windows cross compilation:
 @example
 ./configure --enable-mingw32
@@ -2252,9 +2549,9 @@ If necessary, you can change the cross-prefix according to the prefix
 chosen for the MinGW tools with --cross-prefix. You can also use
 --prefix to set the Win32 install path.
 
-@item You can install QEMU in the installation directory by typing 
+@item You can install QEMU in the installation directory by typing
 @file{make install}. Don't forget to copy @file{SDL.dll} in the
-installation directory. 
+installation directory.
 
 @end itemize