Statistics
| Branch: | Revision:

root / qemu-doc.texi @ 6e59c1db

History | View | Annotate | Download (32.6 kB)

1
\input texinfo @c -*- texinfo -*-
2

    
3
@iftex
4
@settitle QEMU CPU Emulator Reference Documentation
5
@titlepage
6
@sp 7
7
@center @titlefont{QEMU CPU Emulator Reference Documentation}
8
@sp 3
9
@end titlepage
10
@end iftex
11

    
12
@chapter Introduction
13

    
14
@section Features
15

    
16
QEMU is a FAST! processor emulator. By using dynamic translation it
17
achieves a reasonnable speed while being easy to port on new host
18
CPUs.
19

    
20
QEMU has two operating modes:
21

    
22
@itemize @minus
23

    
24
@item 
25
User mode emulation. In this mode, QEMU can launch Linux processes
26
compiled for one CPU on another CPU. Linux system calls are converted
27
because of endianness and 32/64 bit mismatches. The Wine Windows API
28
emulator (@url{http://www.winehq.org}) and the DOSEMU DOS emulator
29
(@url{www.dosemu.org}) are the main targets for QEMU.
30

    
31
@item 
32
Full system emulation. In this mode, QEMU emulates a full
33
system, including a processor and various peripherials. Currently, it
34
is only used to launch an x86 Linux kernel on an x86 Linux system. It
35
enables easier testing and debugging of system code. It can also be
36
used to provide virtual hosting of several virtual PCs on a single
37
server.
38

    
39
@end itemize
40

    
41
As QEMU requires no host kernel patches to run, it is very safe and
42
easy to use.
43

    
44
QEMU generic features:
45

    
46
@itemize 
47

    
48
@item User space only or full system emulation.
49

    
50
@item Using dynamic translation to native code for reasonnable speed.
51

    
52
@item Working on x86 and PowerPC hosts. Being tested on ARM, Sparc32, Alpha and S390.
53

    
54
@item Self-modifying code support.
55

    
56
@item Precise exceptions support.
57

    
58
@item The virtual CPU is a library (@code{libqemu}) which can be used 
59
in other projects.
60

    
61
@end itemize
62

    
63
QEMU user mode emulation features:
64
@itemize 
65
@item Generic Linux system call converter, including most ioctls.
66

    
67
@item clone() emulation using native CPU clone() to use Linux scheduler for threads.
68

    
69
@item Accurate signal handling by remapping host signals to target signals. 
70
@end itemize
71
@end itemize
72

    
73
QEMU full system emulation features:
74
@itemize 
75
@item Using mmap() system calls to simulate the MMU
76
@end itemize
77

    
78
@section x86 emulation
79

    
80
QEMU x86 target features:
81

    
82
@itemize 
83

    
84
@item The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation. 
85
LDT/GDT and IDT are emulated. VM86 mode is also supported to run DOSEMU.
86

    
87
@item Support of host page sizes bigger than 4KB in user mode emulation.
88

    
89
@item QEMU can emulate itself on x86.
90

    
91
@item An extensive Linux x86 CPU test program is included @file{tests/test-i386}. 
92
It can be used to test other x86 virtual CPUs.
93

    
94
@end itemize
95

    
96
Current QEMU limitations:
97

    
98
@itemize 
99

    
100
@item No SSE/MMX support (yet).
101

    
102
@item No x86-64 support.
103

    
104
@item IPC syscalls are missing.
105

    
106
@item The x86 segment limits and access rights are not tested at every 
107
memory access.
108

    
109
@item On non x86 host CPUs, @code{double}s are used instead of the non standard 
110
10 byte @code{long double}s of x86 for floating point emulation to get
111
maximum performances.
112

    
113
@item Full system emulation only works if no data are mapped above the virtual address 
114
0xc0000000 (yet).
115

    
116
@item Some priviledged instructions or behaviors are missing. Only the ones 
117
needed for proper Linux kernel operation are emulated.
118

    
119
@item No memory separation between the kernel and the user processes is done. 
120
It will be implemented very soon.
121

    
122
@end itemize
123

    
124
@section ARM emulation
125

    
126
@itemize
127

    
128
@item ARM emulation can currently launch small programs while using the
129
generic dynamic code generation architecture of QEMU.
130

    
131
@item No FPU support (yet).
132

    
133
@item No automatic regression testing (yet).
134

    
135
@end itemize
136

    
137
@section SPARC emulation
138

    
139
The SPARC emulation is currently in development.
140

    
141
@chapter QEMU User space emulator invocation
142

    
143
@section Quick Start
144

    
145
If you need to compile QEMU, please read the @file{README} which gives
146
the related information.
147

    
148
In order to launch a Linux process, QEMU needs the process executable
149
itself and all the target (x86) dynamic libraries used by it. 
150

    
151
@itemize
152

    
153
@item On x86, you can just try to launch any process by using the native
154
libraries:
155

    
156
@example 
157
qemu-i386 -L / /bin/ls
158
@end example
159

    
160
@code{-L /} tells that the x86 dynamic linker must be searched with a
161
@file{/} prefix.
162

    
163
@item Since QEMU is also a linux process, you can launch qemu with qemu:
164

    
165
@example 
166
qemu-i386 -L / qemu-i386 -L / /bin/ls
167
@end example
168

    
169
@item On non x86 CPUs, you need first to download at least an x86 glibc
170
(@file{qemu-XXX-i386-glibc21.tar.gz} on the QEMU web page). Ensure that
171
@code{LD_LIBRARY_PATH} is not set:
172

    
173
@example
174
unset LD_LIBRARY_PATH 
175
@end example
176

    
177
Then you can launch the precompiled @file{ls} x86 executable:
178

    
179
@example
180
qemu-i386 /usr/local/qemu-i386/bin/ls-i386
181
@end example
182
You can look at @file{/usr/local/qemu-i386/bin/qemu-conf.sh} so that
183
QEMU is automatically launched by the Linux kernel when you try to
184
launch x86 executables. It requires the @code{binfmt_misc} module in the
185
Linux kernel.
186

    
187
@item The x86 version of QEMU is also included. You can try weird things such as:
188
@example
189
qemu-i386 /usr/local/qemu-i386/bin/qemu-i386 /usr/local/qemu-i386/bin/ls-i386
190
@end example
191

    
192
@end itemize
193

    
194
@section Wine launch
195

    
196
@itemize
197

    
198
@item Ensure that you have a working QEMU with the x86 glibc
199
distribution (see previous section). In order to verify it, you must be
200
able to do:
201

    
202
@example
203
qemu-i386 /usr/local/qemu-i386/bin/ls-i386
204
@end example
205

    
206
@item Download the binary x86 Wine install
207
(@file{qemu-XXX-i386-wine.tar.gz} on the QEMU web page). 
208

    
209
@item Configure Wine on your account. Look at the provided script
210
@file{/usr/local/qemu-i386/bin/wine-conf.sh}. Your previous
211
@code{$@{HOME@}/.wine} directory is saved to @code{$@{HOME@}/.wine.org}.
212

    
213
@item Then you can try the example @file{putty.exe}:
214

    
215
@example
216
qemu-i386 /usr/local/qemu-i386/wine/bin/wine /usr/local/qemu-i386/wine/c/Program\ Files/putty.exe
217
@end example
218

    
219
@end itemize
220

    
221
@section Command line options
222

    
223
@example
224
usage: qemu-i386 [-h] [-d] [-L path] [-s size] program [arguments...]
225
@end example
226

    
227
@table @option
228
@item -h
229
Print the help
230
@item -L path   
231
Set the x86 elf interpreter prefix (default=/usr/local/qemu-i386)
232
@item -s size
233
Set the x86 stack size in bytes (default=524288)
234
@end table
235

    
236
Debug options:
237

    
238
@table @option
239
@item -d
240
Activate log (logfile=/tmp/qemu.log)
241
@item -p pagesize
242
Act as if the host page size was 'pagesize' bytes
243
@end table
244

    
245
@chapter QEMU System emulator invocation
246

    
247
@section Introduction
248

    
249
@c man begin DESCRIPTION
250

    
251
The QEMU System emulator simulates a complete PC. It can either boot
252
directly a Linux kernel (without any BIOS or boot loader) or boot like a
253
real PC with the included BIOS.
254

    
255
In order to meet specific user needs, two versions of QEMU are
256
available:
257

    
258
@enumerate
259

    
260
@item 
261
@code{qemu} uses the host Memory Management Unit (MMU) to simulate 
262
the x86 MMU. It is @emph{fast} but has limitations because the whole 4 GB
263
address space cannot be used and some memory mapped peripherials
264
cannot be emulated accurately yet. Therefore, a specific Linux kernel
265
must be used (@xref{linux_compile}).
266

    
267
@item 
268
@code{qemu-softmmu} uses a software MMU. It is about @emph{two times 
269
slower} but gives a more accurate emulation. (XXX: Linux cannot be ran
270
unpatched yet).
271

    
272
@end enumerate
273

    
274
QEMU emulates the following PC peripherials:
275

    
276
@itemize @minus
277
@item
278
VGA (hardware level, including all non standard modes)
279
@item
280
PS/2 mouse and keyboard
281
@item 
282
IDE disk interface (port=0x1f0, irq=14)
283
@item 
284
NE2000 network adapter (port=0x300, irq=9)
285
@item
286
Serial port (port=0x3f8, irq=4)
287
@item
288
PIC (interrupt controler)
289
@item
290
PIT (timers)
291
@item 
292
CMOS memory
293
@end itemize
294

    
295
@c man end
296

    
297
@section Quick Start
298

    
299
Download the linux image (@file{linux.img}) and type:
300

    
301
@example
302
qemu-softmmu linux.img
303
@end example
304

    
305
Linux should boot and give you a prompt.
306

    
307
@section Direct Linux Boot and Network emulation
308

    
309
This section explains how to launch a Linux kernel inside QEMU without
310
having to make a full bootable image. It is very useful for fast Linux
311
kernel testing. The QEMU network configuration is also explained.
312

    
313
@enumerate
314
@item
315
Download the archive @file{linux-test-xxx.tar.gz} containing a Linux
316
kernel and a disk image. 
317

    
318
@item Optional: If you want network support (for example to launch X11 examples), you
319
must copy the script @file{qemu-ifup} in @file{/etc} and configure
320
properly @code{sudo} so that the command @code{ifconfig} contained in
321
@file{qemu-ifup} can be executed as root. You must verify that your host
322
kernel supports the TUN/TAP network interfaces: the device
323
@file{/dev/net/tun} must be present.
324

    
325
When network is enabled, there is a virtual network connection between
326
the host kernel and the emulated kernel. The emulated kernel is seen
327
from the host kernel at IP address 172.20.0.2 and the host kernel is
328
seen from the emulated kernel at IP address 172.20.0.1.
329

    
330
@item Launch @code{qemu.sh}. You should have the following output:
331

    
332
@example
333
> ./qemu.sh 
334
connected to host network interface: tun0
335
Uncompressing Linux... Ok, booting the kernel.
336
Linux version 2.4.20 (fabrice@localhost.localdomain) (gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)) #22 lun jui 7 13:37:41 CEST 2003
337
BIOS-provided physical RAM map:
338
 BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
339
 BIOS-e801: 0000000000100000 - 0000000002000000 (usable)
340
32MB LOWMEM available.
341
On node 0 totalpages: 8192
342
zone(0): 4096 pages.
343
zone(1): 4096 pages.
344
zone(2): 0 pages.
345
Kernel command line: root=/dev/hda ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
346
ide_setup: ide1=noprobe
347
ide_setup: ide2=noprobe
348
ide_setup: ide3=noprobe
349
ide_setup: ide4=noprobe
350
ide_setup: ide5=noprobe
351
Initializing CPU#0
352
Detected 501.285 MHz processor.
353
Calibrating delay loop... 989.59 BogoMIPS
354
Memory: 29268k/32768k available (907k kernel code, 3112k reserved, 212k data, 52k init, 0k highmem)
355
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
356
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
357
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
358
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
359
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
360
CPU: Intel Pentium Pro stepping 03
361
Checking 'hlt' instruction... OK.
362
POSIX conformance testing by UNIFIX
363
Linux NET4.0 for Linux 2.4
364
Based upon Swansea University Computer Society NET3.039
365
Initializing RT netlink socket
366
apm: BIOS not found.
367
Starting kswapd
368
Journalled Block Device driver loaded
369
pty: 256 Unix98 ptys configured
370
Serial driver version 5.05c (2001-07-08) with no serial options enabled
371
ttyS00 at 0x03f8 (irq = 4) is a 16450
372
Uniform Multi-Platform E-IDE driver Revision: 6.31
373
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
374
hda: QEMU HARDDISK, ATA DISK drive
375
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
376
hda: 12288 sectors (6 MB) w/256KiB Cache, CHS=12/16/63
377
Partition check:
378
 hda: unknown partition table
379
ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
380
Last modified Nov 1, 2000 by Paul Gortmaker
381
NE*000 ethercard probe at 0x300: 52 54 00 12 34 56
382
eth0: NE2000 found at 0x300, using IRQ 9.
383
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
384
NET4: Linux TCP/IP 1.0 for NET4.0
385
IP Protocols: ICMP, UDP, TCP, IGMP
386
IP: routing cache hash table of 512 buckets, 4Kbytes
387
TCP: Hash tables configured (established 2048 bind 4096)
388
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
389
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
390
VFS: Mounted root (ext2 filesystem).
391
Freeing unused kernel memory: 52k freed
392
sh: can't access tty; job control turned off
393
#
394
@end example
395

    
396
@item
397
Then you can play with the kernel inside the virtual serial console. You
398
can launch @code{ls} for example. Type @key{Ctrl-a h} to have an help
399
about the keys you can type inside the virtual serial console. In
400
particular, use @key{Ctrl-a x} to exit QEMU and use @key{Ctrl-a b} as
401
the Magic SysRq key.
402

    
403
@item 
404
If the network is enabled, launch the script @file{/etc/linuxrc} in the
405
emulator (don't forget the leading dot):
406
@example
407
. /etc/linuxrc
408
@end example
409

    
410
Then enable X11 connections on your PC from the emulated Linux: 
411
@example
412
xhost +172.20.0.2
413
@end example
414

    
415
You can now launch @file{xterm} or @file{xlogo} and verify that you have
416
a real Virtual Linux system !
417

    
418
@end enumerate
419

    
420
NOTES:
421
@enumerate
422
@item 
423
A 2.5.74 kernel is also included in the archive. Just
424
replace the bzImage in qemu.sh to try it.
425

    
426
@item 
427
vl creates a temporary file in @var{$QEMU_TMPDIR} (@file{/tmp} is the
428
default) containing all the simulated PC memory. If possible, try to use
429
a temporary directory using the tmpfs filesystem to avoid too many
430
unnecessary disk accesses.
431

    
432
@item 
433
In order to exit cleanly for vl, you can do a @emph{shutdown} inside
434
vl. vl will automatically exit when the Linux shutdown is done.
435

    
436
@item 
437
You can boot slightly faster by disabling the probe of non present IDE
438
interfaces. To do so, add the following options on the kernel command
439
line:
440
@example
441
ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
442
@end example
443

    
444
@item 
445
The example disk image is a modified version of the one made by Kevin
446
Lawton for the plex86 Project (@url{www.plex86.org}).
447

    
448
@end enumerate
449

    
450
@section Invocation
451

    
452
@example
453
@c man begin SYNOPSIS
454
usage: qemu [options] [disk_image]
455
@c man end
456
@end example
457

    
458
@c man begin OPTIONS
459
@var{disk_image} is a raw hard image image for IDE hard disk 0.
460

    
461
General options:
462
@table @option
463
@item -hda file
464
@item -hdb file
465
Use @var{file} as hard disk 0 or 1 image (@xref{disk_images}). 
466

    
467
@item -snapshot
468

    
469
Write to temporary files instead of disk image files. In this case,
470
the raw disk image you use is not written back. You can however force
471
the write back by pressing @key{C-a s} (@xref{disk_images}). 
472

    
473
@item -m megs
474
Set virtual RAM size to @var{megs} megabytes.
475

    
476
@item -n script      
477
Set network init script [default=/etc/vl-ifup]. This script is
478
launched to configure the host network interface (usually tun0)
479
corresponding to the virtual NE2000 card.
480

    
481
@item -initrd file
482
Use @var{file} as initial ram disk.
483

    
484
@item -tun-fd fd      
485
Assumes @var{fd} talks to tap/tun and use it. Read
486
@url{http://bellard.org/qemu/tetrinet.html} to have an example of its
487
use.
488

    
489
@item -nographic
490

    
491
Normally, QEMU uses SDL to display the VGA output. With this option,
492
you can totally disable graphical output so that QEMU is a simple
493
command line application. The emulated serial port is redirected on
494
the console. Therefore, you can still use QEMU to debug a Linux kernel
495
with a serial console.
496

    
497
@end table
498

    
499
Linux boot specific (does not require a full PC boot with a BIOS):
500
@table @option
501

    
502
@item -kernel bzImage 
503
Use @var{bzImage} as kernel image.
504

    
505
@item -append cmdline 
506
Use @var{cmdline} as kernel command line
507

    
508
@item -initrd file
509
Use @var{file} as initial ram disk.
510

    
511
@end table
512

    
513
Debug options:
514
@table @option
515
@item -s
516
Wait gdb connection to port 1234 (@xref{gdb_usage}). 
517
@item -p port
518
Change gdb connection port.
519
@item -d             
520
Output log in /tmp/vl.log
521
@end table
522

    
523
During emulation, use @key{C-a h} to get terminal commands:
524

    
525
@table @key
526
@item C-a h
527
Print this help
528
@item C-a x    
529
Exit emulatior
530
@item C-a s    
531
Save disk data back to file (if -snapshot)
532
@item C-a b
533
Send break (magic sysrq)
534
@item C-a C-a
535
Send C-a
536
@end table
537
@c man end
538

    
539
@ignore
540

    
541
@setfilename qemu 
542
@settitle QEMU System Emulator
543

    
544
@c man begin SEEALSO
545
The HTML documentation of QEMU for more precise information and Linux
546
user mode emulator invocation.
547
@c man end
548

    
549
@c man begin AUTHOR
550
Fabrice Bellard
551
@c man end
552

    
553
@end ignore
554

    
555
@end ignore
556
@node disk_images
557
@section Disk Images
558

    
559
@subsection Raw disk images
560

    
561
The disk images can simply be raw images of the hard disk. You can
562
create them with the command:
563
@example
564
dd if=/dev/zero of=myimage bs=1024 count=mysize
565
@end example
566
where @var{myimage} is the image filename and @var{mysize} is its size
567
in kilobytes.
568

    
569
@subsection Snapshot mode
570

    
571
If you use the option @option{-snapshot}, all disk images are
572
considered as read only. When sectors in written, they are written in
573
a temporary file created in @file{/tmp}. You can however force the
574
write back to the raw disk images by pressing @key{C-a s}.
575

    
576
NOTE: The snapshot mode only works with raw disk images.
577

    
578
@subsection Copy On Write disk images
579

    
580
QEMU also supports user mode Linux
581
(@url{http://user-mode-linux.sourceforge.net/}) Copy On Write (COW)
582
disk images. The COW disk images are much smaller than normal images
583
as they store only modified sectors. They also permit the use of the
584
same disk image template for many users.
585

    
586
To create a COW disk images, use the command:
587

    
588
@example
589
qemu-mkcow -f myrawimage.bin mycowimage.cow
590
@end example
591

    
592
@file{myrawimage.bin} is a raw image you want to use as original disk
593
image. It will never be written to.
594

    
595
@file{mycowimage.cow} is the COW disk image which is created by
596
@code{qemu-mkcow}. You can use it directly with the @option{-hdx}
597
options. You must not modify the original raw disk image if you use
598
COW images, as COW images only store the modified sectors from the raw
599
disk image. QEMU stores the original raw disk image name and its
600
modified time in the COW disk image so that chances of mistakes are
601
reduced.
602

    
603
If the raw disk image is not read-only, by pressing @key{C-a s} you
604
can flush the COW disk image back into the raw disk image, as in
605
snapshot mode.
606

    
607
COW disk images can also be created without a corresponding raw disk
608
image. It is useful to have a big initial virtual disk image without
609
using much disk space. Use:
610

    
611
@example
612
qemu-mkcow mycowimage.cow 1024
613
@end example
614

    
615
to create a 1 gigabyte empty COW disk image.
616

    
617
NOTES: 
618
@enumerate
619
@item
620
COW disk images must be created on file systems supporting
621
@emph{holes} such as ext2 or ext3.
622
@item 
623
Since holes are used, the displayed size of the COW disk image is not
624
the real one. To know it, use the @code{ls -ls} command.
625
@end enumerate
626

    
627
@node linux_compile
628
@section Linux Kernel Compilation
629

    
630
You should be able to use any kernel with QEMU provided you make the
631
following changes (only 2.4.x and 2.5.x were tested):
632

    
633
@enumerate
634
@item
635
The kernel must be mapped at 0x90000000 (the default is
636
0xc0000000). You must modify only two lines in the kernel source:
637

    
638
In @file{include/asm/page.h}, replace
639
@example
640
#define __PAGE_OFFSET           (0xc0000000)
641
@end example
642
by
643
@example
644
#define __PAGE_OFFSET           (0x90000000)
645
@end example
646

    
647
And in @file{arch/i386/vmlinux.lds}, replace
648
@example
649
  . = 0xc0000000 + 0x100000;
650
@end example
651
by 
652
@example
653
  . = 0x90000000 + 0x100000;
654
@end example
655

    
656
@item
657
If you want to enable SMP (Symmetric Multi-Processing) support, you
658
must make the following change in @file{include/asm/fixmap.h}. Replace
659
@example
660
#define FIXADDR_TOP	(0xffffX000UL)
661
@end example
662
by 
663
@example
664
#define FIXADDR_TOP	(0xa7ffX000UL)
665
@end example
666
(X is 'e' or 'f' depending on the kernel version). Although you can
667
use an SMP kernel with QEMU, it only supports one CPU.
668

    
669
@item
670
If you are not using a 2.5 kernel as host kernel but if you use a target
671
2.5 kernel, you must also ensure that the 'HZ' define is set to 100
672
(1000 is the default) as QEMU cannot currently emulate timers at
673
frequencies greater than 100 Hz on host Linux systems < 2.5. In
674
@file{include/asm/param.h}, replace:
675

    
676
@example
677
# define HZ		1000		/* Internal kernel timer frequency */
678
@end example
679
by
680
@example
681
# define HZ		100		/* Internal kernel timer frequency */
682
@end example
683

    
684
@end enumerate
685

    
686
The file config-2.x.x gives the configuration of the example kernels.
687

    
688
Just type
689
@example
690
make bzImage
691
@end example
692

    
693
As you would do to make a real kernel. Then you can use with QEMU
694
exactly the same kernel as you would boot on your PC (in
695
@file{arch/i386/boot/bzImage}).
696

    
697
@node gdb_usage
698
@section GDB usage
699

    
700
QEMU has a primitive support to work with gdb, so that you can do
701
'Ctrl-C' while the virtual machine is running and inspect its state.
702

    
703
In order to use gdb, launch vl with the '-s' option. It will wait for a
704
gdb connection:
705
@example
706
> vl -s arch/i386/boot/bzImage -hda root-2.4.20.img root=/dev/hda
707
Connected to host network interface: tun0
708
Waiting gdb connection on port 1234
709
@end example
710

    
711
Then launch gdb on the 'vmlinux' executable:
712
@example
713
> gdb vmlinux
714
@end example
715

    
716
In gdb, connect to QEMU:
717
@example
718
(gdb) target remote locahost:1234
719
@end example
720

    
721
Then you can use gdb normally. For example, type 'c' to launch the kernel:
722
@example
723
(gdb) c
724
@end example
725

    
726
WARNING: breakpoints and single stepping are not yet supported.
727

    
728
Here are some useful tips in order to use gdb on system code:
729

    
730
@enumerate
731
@item
732
Use @code{info reg} to display all the CPU registers.
733
@item
734
Use @code{x/10i $eip} to display the code at the PC position.
735
@item
736
Use @code{set architecture i8086} to dump 16 bit code. Then use
737
@code{x/10i $cs*16+*eip} to dump the code at the PC position.
738
@end enumerate
739

    
740
@chapter QEMU Internals
741

    
742
@section QEMU compared to other emulators
743

    
744
Like bochs [3], QEMU emulates an x86 CPU. But QEMU is much faster than
745
bochs as it uses dynamic compilation and because it uses the host MMU to
746
simulate the x86 MMU. The downside is that currently the emulation is
747
not as accurate as bochs (for example, you cannot currently run Windows
748
inside QEMU).
749

    
750
Like Valgrind [2], QEMU does user space emulation and dynamic
751
translation. Valgrind is mainly a memory debugger while QEMU has no
752
support for it (QEMU could be used to detect out of bound memory
753
accesses as Valgrind, but it has no support to track uninitialised data
754
as Valgrind does). The Valgrind dynamic translator generates better code
755
than QEMU (in particular it does register allocation) but it is closely
756
tied to an x86 host and target and has no support for precise exceptions
757
and system emulation.
758

    
759
EM86 [4] is the closest project to user space QEMU (and QEMU still uses
760
some of its code, in particular the ELF file loader). EM86 was limited
761
to an alpha host and used a proprietary and slow interpreter (the
762
interpreter part of the FX!32 Digital Win32 code translator [5]).
763

    
764
TWIN [6] is a Windows API emulator like Wine. It is less accurate than
765
Wine but includes a protected mode x86 interpreter to launch x86 Windows
766
executables. Such an approach as greater potential because most of the
767
Windows API is executed natively but it is far more difficult to develop
768
because all the data structures and function parameters exchanged
769
between the API and the x86 code must be converted.
770

    
771
User mode Linux [7] was the only solution before QEMU to launch a Linux
772
kernel as a process while not needing any host kernel patches. However,
773
user mode Linux requires heavy kernel patches while QEMU accepts
774
unpatched Linux kernels. It would be interesting to compare the
775
performance of the two approaches.
776

    
777
The new Plex86 [8] PC virtualizer is done in the same spirit as the QEMU
778
system emulator. It requires a patched Linux kernel to work (you cannot
779
launch the same kernel on your PC), but the patches are really small. As
780
it is a PC virtualizer (no emulation is done except for some priveledged
781
instructions), it has the potential of being faster than QEMU. The
782
downside is that a complicated (and potentially unsafe) host kernel
783
patch is needed.
784

    
785
@section Portable dynamic translation
786

    
787
QEMU is a dynamic translator. When it first encounters a piece of code,
788
it converts it to the host instruction set. Usually dynamic translators
789
are very complicated and highly CPU dependent. QEMU uses some tricks
790
which make it relatively easily portable and simple while achieving good
791
performances.
792

    
793
The basic idea is to split every x86 instruction into fewer simpler
794
instructions. Each simple instruction is implemented by a piece of C
795
code (see @file{op-i386.c}). Then a compile time tool (@file{dyngen})
796
takes the corresponding object file (@file{op-i386.o}) to generate a
797
dynamic code generator which concatenates the simple instructions to
798
build a function (see @file{op-i386.h:dyngen_code()}).
799

    
800
In essence, the process is similar to [1], but more work is done at
801
compile time. 
802

    
803
A key idea to get optimal performances is that constant parameters can
804
be passed to the simple operations. For that purpose, dummy ELF
805
relocations are generated with gcc for each constant parameter. Then,
806
the tool (@file{dyngen}) can locate the relocations and generate the
807
appriopriate C code to resolve them when building the dynamic code.
808

    
809
That way, QEMU is no more difficult to port than a dynamic linker.
810

    
811
To go even faster, GCC static register variables are used to keep the
812
state of the virtual CPU.
813

    
814
@section Register allocation
815

    
816
Since QEMU uses fixed simple instructions, no efficient register
817
allocation can be done. However, because RISC CPUs have a lot of
818
register, most of the virtual CPU state can be put in registers without
819
doing complicated register allocation.
820

    
821
@section Condition code optimisations
822

    
823
Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a
824
critical point to get good performances. QEMU uses lazy condition code
825
evaluation: instead of computing the condition codes after each x86
826
instruction, it just stores one operand (called @code{CC_SRC}), the
827
result (called @code{CC_DST}) and the type of operation (called
828
@code{CC_OP}).
829

    
830
@code{CC_OP} is almost never explicitely set in the generated code
831
because it is known at translation time.
832

    
833
In order to increase performances, a backward pass is performed on the
834
generated simple instructions (see
835
@code{translate-i386.c:optimize_flags()}). When it can be proved that
836
the condition codes are not needed by the next instructions, no
837
condition codes are computed at all.
838

    
839
@section CPU state optimisations
840

    
841
The x86 CPU has many internal states which change the way it evaluates
842
instructions. In order to achieve a good speed, the translation phase
843
considers that some state information of the virtual x86 CPU cannot
844
change in it. For example, if the SS, DS and ES segments have a zero
845
base, then the translator does not even generate an addition for the
846
segment base.
847

    
848
[The FPU stack pointer register is not handled that way yet].
849

    
850
@section Translation cache
851

    
852
A 2MByte cache holds the most recently used translations. For
853
simplicity, it is completely flushed when it is full. A translation unit
854
contains just a single basic block (a block of x86 instructions
855
terminated by a jump or by a virtual CPU state change which the
856
translator cannot deduce statically).
857

    
858
@section Direct block chaining
859

    
860
After each translated basic block is executed, QEMU uses the simulated
861
Program Counter (PC) and other cpu state informations (such as the CS
862
segment base value) to find the next basic block.
863

    
864
In order to accelerate the most common cases where the new simulated PC
865
is known, QEMU can patch a basic block so that it jumps directly to the
866
next one.
867

    
868
The most portable code uses an indirect jump. An indirect jump makes it
869
easier to make the jump target modification atomic. On some
870
architectures (such as PowerPC), the @code{JUMP} opcode is directly
871
patched so that the block chaining has no overhead.
872

    
873
@section Self-modifying code and translated code invalidation
874

    
875
Self-modifying code is a special challenge in x86 emulation because no
876
instruction cache invalidation is signaled by the application when code
877
is modified.
878

    
879
When translated code is generated for a basic block, the corresponding
880
host page is write protected if it is not already read-only (with the
881
system call @code{mprotect()}). Then, if a write access is done to the
882
page, Linux raises a SEGV signal. QEMU then invalidates all the
883
translated code in the page and enables write accesses to the page.
884

    
885
Correct translated code invalidation is done efficiently by maintaining
886
a linked list of every translated block contained in a given page. Other
887
linked lists are also maintained to undo direct block chaining. 
888

    
889
Although the overhead of doing @code{mprotect()} calls is important,
890
most MSDOS programs can be emulated at reasonnable speed with QEMU and
891
DOSEMU.
892

    
893
Note that QEMU also invalidates pages of translated code when it detects
894
that memory mappings are modified with @code{mmap()} or @code{munmap()}.
895

    
896
@section Exception support
897

    
898
longjmp() is used when an exception such as division by zero is
899
encountered. 
900

    
901
The host SIGSEGV and SIGBUS signal handlers are used to get invalid
902
memory accesses. The exact CPU state can be retrieved because all the
903
x86 registers are stored in fixed host registers. The simulated program
904
counter is found by retranslating the corresponding basic block and by
905
looking where the host program counter was at the exception point.
906

    
907
The virtual CPU cannot retrieve the exact @code{EFLAGS} register because
908
in some cases it is not computed because of condition code
909
optimisations. It is not a big concern because the emulated code can
910
still be restarted in any cases.
911

    
912
@section Linux system call translation
913

    
914
QEMU includes a generic system call translator for Linux. It means that
915
the parameters of the system calls can be converted to fix the
916
endianness and 32/64 bit issues. The IOCTLs are converted with a generic
917
type description system (see @file{ioctls.h} and @file{thunk.c}).
918

    
919
QEMU supports host CPUs which have pages bigger than 4KB. It records all
920
the mappings the process does and try to emulated the @code{mmap()}
921
system calls in cases where the host @code{mmap()} call would fail
922
because of bad page alignment.
923

    
924
@section Linux signals
925

    
926
Normal and real-time signals are queued along with their information
927
(@code{siginfo_t}) as it is done in the Linux kernel. Then an interrupt
928
request is done to the virtual CPU. When it is interrupted, one queued
929
signal is handled by generating a stack frame in the virtual CPU as the
930
Linux kernel does. The @code{sigreturn()} system call is emulated to return
931
from the virtual signal handler.
932

    
933
Some signals (such as SIGALRM) directly come from the host. Other
934
signals are synthetized from the virtual CPU exceptions such as SIGFPE
935
when a division by zero is done (see @code{main.c:cpu_loop()}).
936

    
937
The blocked signal mask is still handled by the host Linux kernel so
938
that most signal system calls can be redirected directly to the host
939
Linux kernel. Only the @code{sigaction()} and @code{sigreturn()} system
940
calls need to be fully emulated (see @file{signal.c}).
941

    
942
@section clone() system call and threads
943

    
944
The Linux clone() system call is usually used to create a thread. QEMU
945
uses the host clone() system call so that real host threads are created
946
for each emulated thread. One virtual CPU instance is created for each
947
thread.
948

    
949
The virtual x86 CPU atomic operations are emulated with a global lock so
950
that their semantic is preserved.
951

    
952
Note that currently there are still some locking issues in QEMU. In
953
particular, the translated cache flush is not protected yet against
954
reentrancy.
955

    
956
@section Self-virtualization
957

    
958
QEMU was conceived so that ultimately it can emulate itself. Although
959
it is not very useful, it is an important test to show the power of the
960
emulator.
961

    
962
Achieving self-virtualization is not easy because there may be address
963
space conflicts. QEMU solves this problem by being an executable ELF
964
shared object as the ld-linux.so ELF interpreter. That way, it can be
965
relocated at load time.
966

    
967
@section MMU emulation
968

    
969
For system emulation, QEMU uses the mmap() system call to emulate the
970
target CPU MMU. It works as long the emulated OS does not use an area
971
reserved by the host OS (such as the area above 0xc0000000 on x86
972
Linux).
973

    
974
It is planned to add a slower but more precise MMU emulation
975
with a software MMU.
976

    
977
@section Bibliography
978

    
979
@table @asis
980

    
981
@item [1] 
982
@url{http://citeseer.nj.nec.com/piumarta98optimizing.html}, Optimizing
983
direct threaded code by selective inlining (1998) by Ian Piumarta, Fabio
984
Riccardi.
985

    
986
@item [2]
987
@url{http://developer.kde.org/~sewardj/}, Valgrind, an open-source
988
memory debugger for x86-GNU/Linux, by Julian Seward.
989

    
990
@item [3]
991
@url{http://bochs.sourceforge.net/}, the Bochs IA-32 Emulator Project,
992
by Kevin Lawton et al.
993

    
994
@item [4]
995
@url{http://www.cs.rose-hulman.edu/~donaldlf/em86/index.html}, the EM86
996
x86 emulator on Alpha-Linux.
997

    
998
@item [5]
999
@url{http://www.usenix.org/publications/library/proceedings/usenix-nt97/full_papers/chernoff/chernoff.pdf},
1000
DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton
1001
Chernoff and Ray Hookway.
1002

    
1003
@item [6]
1004
@url{http://www.willows.com/}, Windows API library emulation from
1005
Willows Software.
1006

    
1007
@item [7]
1008
@url{http://user-mode-linux.sourceforge.net/}, 
1009
The User-mode Linux Kernel.
1010

    
1011
@item [8]
1012
@url{http://www.plex86.org/}, 
1013
The new Plex86 project.
1014

    
1015
@end table
1016

    
1017
@chapter Regression Tests
1018

    
1019
In the directory @file{tests/}, various interesting testing programs
1020
are available. There are used for regression testing.
1021

    
1022
@section @file{hello-i386}
1023

    
1024
Very simple statically linked x86 program, just to test QEMU during a
1025
port to a new host CPU.
1026

    
1027
@section @file{hello-arm}
1028

    
1029
Very simple statically linked ARM program, just to test QEMU during a
1030
port to a new host CPU.
1031

    
1032
@section @file{test-i386}
1033

    
1034
This program executes most of the 16 bit and 32 bit x86 instructions and
1035
generates a text output. It can be compared with the output obtained with
1036
a real CPU or another emulator. The target @code{make test} runs this
1037
program and a @code{diff} on the generated output.
1038

    
1039
The Linux system call @code{modify_ldt()} is used to create x86 selectors
1040
to test some 16 bit addressing and 32 bit with segmentation cases.
1041

    
1042
The Linux system call @code{vm86()} is used to test vm86 emulation.
1043

    
1044
Various exceptions are raised to test most of the x86 user space
1045
exception reporting.
1046

    
1047
@section @file{sha1}
1048

    
1049
It is a simple benchmark. Care must be taken to interpret the results
1050
because it mostly tests the ability of the virtual CPU to optimize the
1051
@code{rol} x86 instruction and the condition code computations.
1052