Statistics
| Branch: | Revision:

root / qemu-doc.texi @ a8c490cd

History | View | Annotate | Download (27.3 kB)

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

    
3
@iftex
4
@settitle QEMU CPU Emulator User Documentation
5
@titlepage
6
@sp 7
7
@center @titlefont{QEMU CPU Emulator User 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 using dynamic translation to
17
achieve good emulation speed.
18

    
19
QEMU has two operating modes:
20

    
21
@itemize @minus
22

    
23
@item 
24
Full system emulation. In this mode, QEMU emulates a full system (for
25
example a PC), including a processor and various peripherials. It can
26
be used to launch different Operating Systems without rebooting the
27
PC or to debug system code.
28

    
29
@item 
30
User mode emulation (Linux host only). In this mode, QEMU can launch
31
Linux processes compiled for one CPU on another CPU. It can be used to
32
launch the Wine Windows API emulator (@url{http://www.winehq.org}) or
33
to ease cross-compilation and cross-debugging.
34

    
35
@end itemize
36

    
37
As QEMU requires no host kernel driver to run, it is very safe and
38
easy to use.
39

    
40
For system emulation, the following hardware targets are supported:
41
@itemize
42
@item PC (x86 processor)
43
@item PREP (PowerPC processor)
44
@end itemize
45

    
46
For user emulation, x86, PowerPC, ARM, and SPARC CPUs are supported.
47

    
48
@chapter Installation
49

    
50
@section Linux
51

    
52
If you want to compile QEMU, please read the @file{README} which gives
53
the related information. Otherwise just download the binary
54
distribution (@file{qemu-XXX-i386.tar.gz}) and untar it as root in
55
@file{/}:
56

    
57
@example
58
su
59
cd /
60
tar zxvf /tmp/qemu-XXX-i386.tar.gz
61
@end example
62

    
63
@section Windows
64
w
65
@itemize
66
@item Install the current versions of MSYS and MinGW from
67
@url{http://www.mingw.org/}. You can find detailed installation
68
instructions in the download section and the FAQ.
69

    
70
@item Download 
71
the MinGW development library of SDL 1.2.x
72
(@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
73
@url{http://www.libsdl.org}. Unpack it in a temporary place, and
74
unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
75
directory. Edit the @file{sdl-config} script so that it gives the
76
correct SDL directory when invoked.
77

    
78
@item Extract the current version of QEMU.
79
 
80
@item Start the MSYS shell (file @file{msys.bat}).
81

    
82
@item Change to the QEMU directory. Launch @file{./configure} and 
83
@file{make}.  If you have problems using SDL, verify that
84
@file{sdl-config} can be launched from the MSYS command line.
85

    
86
@item You can install QEMU in @file{Program Files/Qemu} by typing 
87
@file{make install}. Don't forget to copy @file{SDL.dll} in
88
@file{Program Files/Qemu}.
89

    
90
@end itemize
91

    
92
@section Cross compilation for Windows with Linux
93

    
94
@itemize
95
@item
96
Install the MinGW cross compilation tools available at
97
@url{http://www.mingw.org/}.
98

    
99
@item 
100
Install the Win32 version of SDL (@url{http://www.libsdl.org}) by
101
unpacking @file{i386-mingw32msvc.tar.gz}. Set up the PATH environment
102
variable so that @file{i386-mingw32msvc-sdl-config} can be launched by
103
the QEMU configuration script.
104

    
105
@item 
106
Configure QEMU for Windows cross compilation:
107
@example
108
./configure --enable-mingw32
109
@end example
110
If necessary, you can change the cross-prefix according to the prefix
111
choosen for the MinGW tools with --cross-prefix. You can also use
112
--prefix to set the Win32 install path.
113

    
114
@item You can install QEMU in the installation directory by typing 
115
@file{make install}. Don't forget to copy @file{SDL.dll} in the
116
installation directory. 
117

    
118
@end itemize
119

    
120
Note: Currently, Wine does not seem able to launch
121
QEMU for Win32.
122

    
123
@section Mac OS X
124

    
125
Mac OS X is currently not supported.
126

    
127
@chapter QEMU PC System emulator invocation
128

    
129
@section Introduction
130

    
131
@c man begin DESCRIPTION
132

    
133
The QEMU System emulator simulates a complete PC.
134

    
135
In order to meet specific user needs, two versions of QEMU are
136
available:
137

    
138
@enumerate
139

    
140
@item 
141
@code{qemu-fast} uses the host Memory Management Unit (MMU) to simulate 
142
the x86 MMU. It is @emph{fast} but has limitations because the whole 4 GB
143
address space cannot be used and some memory mapped peripherials
144
cannot be emulated accurately yet. Therefore, a specific Linux kernel
145
must be used (@xref{linux_compile}).
146

    
147
@item 
148
@code{qemu} uses a software MMU. It is about @emph{two times 
149
slower} but gives a more accurate emulation. 
150

    
151
@end enumerate
152

    
153
QEMU emulates the following PC peripherials:
154

    
155
@itemize @minus
156
@item
157
VGA (hardware level, including all non standard modes)
158
@item
159
PS/2 mouse and keyboard
160
@item 
161
2 IDE interfaces with hard disk and CD-ROM support
162
@item
163
Floppy disk
164
@item 
165
up to 6 NE2000 network adapters
166
@item
167
Serial port
168
@item 
169
Soundblaster 16 card
170
@end itemize
171

    
172
@c man end
173

    
174
@section Quick Start
175

    
176
Download and uncompress the linux image (@file{linux.img}) and type:
177

    
178
@example
179
qemu linux.img
180
@end example
181

    
182
Linux should boot and give you a prompt.
183

    
184
@section Invocation
185

    
186
@example
187
@c man begin SYNOPSIS
188
usage: qemu [options] [disk_image]
189
@c man end
190
@end example
191

    
192
@c man begin OPTIONS
193
@var{disk_image} is a raw hard disk image for IDE hard disk 0.
194

    
195
General options:
196
@table @option
197
@item -fda file
198
@item -fdb file
199
Use @var{file} as floppy disk 0/1 image (@xref{disk_images}).
200

    
201
@item -hda file
202
@item -hdb file
203
@item -hdc file
204
@item -hdd file
205
Use @var{file} as hard disk 0, 1, 2 or 3 image (@xref{disk_images}).
206

    
207
@item -cdrom file
208
Use @var{file} as CD-ROM image (you cannot use @option{-hdc} and and
209
@option{-cdrom} at the same time).
210

    
211
@item -boot [a|c|d]
212
Boot on floppy (a), hard disk (c) or CD-ROM (d). Hard disk boot is
213
the default.
214

    
215
@item -snapshot
216
Write to temporary files instead of disk image files. In this case,
217
the raw disk image you use is not written back. You can however force
218
the write back by pressing @key{C-a s} (@xref{disk_images}). 
219

    
220
@item -m megs
221
Set virtual RAM size to @var{megs} megabytes.
222

    
223
@item -initrd file
224
Use @var{file} as initial ram disk.
225

    
226
@item -nographic
227

    
228
Normally, QEMU uses SDL to display the VGA output. With this option,
229
you can totally disable graphical output so that QEMU is a simple
230
command line application. The emulated serial port is redirected on
231
the console. Therefore, you can still use QEMU to debug a Linux kernel
232
with a serial console.
233

    
234
@item -enable-audio
235

    
236
The SB16 emulation is disabled by default as it may give problems with
237
Windows. You can enable it manually with this option.
238

    
239
@end table
240

    
241
Network options:
242

    
243
@table @option
244

    
245
@item -n script      
246
Set TUN/TAP network init script [default=/etc/qemu-ifup]. This script
247
is launched to configure the host network interface (usually tun0)
248
corresponding to the virtual NE2000 card.
249

    
250
@item -macaddr addr   
251

    
252
Set the mac address of the first interface (the format is
253
aa:bb:cc:dd:ee:ff in hexa). The mac address is incremented for each
254
new network interface.
255

    
256
@item -tun-fd fd
257
Assumes @var{fd} talks to a tap/tun host network interface and use
258
it. Read @url{http://bellard.org/qemu/tetrinet.html} to have an
259
example of its use.
260

    
261
@item -user-net 
262
(Experimental) Use the user mode network stack. This is the default if
263
no tun/tap network init script is found.
264

    
265
@item -dummy-net 
266
Use the dummy network stack: no packet will be received on the network
267
cards.
268

    
269
@end table
270

    
271
Linux boot specific. When using this options, you can use a given
272
Linux kernel without installing it in the disk image. It can be useful
273
for easier testing of various kernels.
274

    
275
@table @option
276

    
277
@item -kernel bzImage 
278
Use @var{bzImage} as kernel image.
279

    
280
@item -append cmdline 
281
Use @var{cmdline} as kernel command line
282

    
283
@item -initrd file
284
Use @var{file} as initial ram disk.
285

    
286
@end table
287

    
288
Debug options:
289
@table @option
290
@item -s
291
Wait gdb connection to port 1234 (@xref{gdb_usage}). 
292
@item -p port
293
Change gdb connection port.
294
@item -S
295
Do not start CPU at startup (you must type 'c' in the monitor).
296
@item -d             
297
Output log in /tmp/qemu.log
298
@end table
299

    
300
During emulation, if you are using the serial console, use @key{C-a h}
301
to get terminal commands:
302

    
303
@table @key
304
@item C-a h
305
Print this help
306
@item C-a x    
307
Exit emulatior
308
@item C-a s    
309
Save disk data back to file (if -snapshot)
310
@item C-a b
311
Send break (magic sysrq in Linux)
312
@item C-a c
313
Switch between console and monitor
314
@item C-a C-a
315
Send C-a
316
@end table
317
@c man end
318

    
319
@ignore
320

    
321
@setfilename qemu 
322
@settitle QEMU System Emulator
323

    
324
@c man begin SEEALSO
325
The HTML documentation of QEMU for more precise information and Linux
326
user mode emulator invocation.
327
@c man end
328

    
329
@c man begin AUTHOR
330
Fabrice Bellard
331
@c man end
332

    
333
@end ignore
334

    
335
@end ignore
336

    
337

    
338
@section QEMU Monitor
339

    
340
The QEMU monitor is used to give complex commands to the QEMU
341
emulator. You can use it to:
342

    
343
@itemize @minus
344

    
345
@item
346
Remove or insert removable medias images
347
(such as CD-ROM or floppies)
348

    
349
@item 
350
Freeze/unfreeze the Virtual Machine (VM) and save or restore its state
351
from a disk file.
352

    
353
@item Inspect the VM state without an external debugger.
354

    
355
@end itemize
356

    
357
@subsection Commands
358

    
359
The following commands are available:
360

    
361
@table @option
362

    
363
@item help or ? [cmd]
364
Show the help for all commands or just for command @var{cmd}.
365

    
366
@item commit  
367
Commit changes to the disk images (if -snapshot is used)
368

    
369
@item info subcommand 
370
show various information about the system state
371

    
372
@table @option
373
@item info network
374
show the network state
375
@item info block
376
show the block devices
377
@item info registers
378
show the cpu registers
379
@item info history
380
show the command line history
381
@end table
382

    
383
@item q or quit
384
Quit the emulator.
385

    
386
@item eject [-f] device
387
Eject a removable media (use -f to force it).
388

    
389
@item change device filename
390
Change a removable media.
391

    
392
@item screendump filename
393
Save screen into PPM image @var{filename}.
394

    
395
@item log item1[,...]
396
Activate logging of the specified items to @file{/tmp/qemu.log}.
397

    
398
@item savevm filename
399
Save the whole virtual machine state to @var{filename}.
400

    
401
@item loadvm filename
402
Restore the whole virtual machine state from @var{filename}.
403

    
404
@item stop
405
Stop emulation.
406

    
407
@item c or cont
408
Resume emulation.
409

    
410
@item gdbserver [port]
411
Start gdbserver session (default port=1234)
412

    
413
@item x/fmt addr
414
Virtual memory dump starting at @var{addr}.
415

    
416
@item xp /fmt addr
417
Physical memory dump starting at @var{addr}.
418

    
419
@var{fmt} is a format which tells the command how to format the
420
data. Its syntax is: @option{/@{count@}@{format@}@{size@}}
421

    
422
@table @var
423
@item count 
424
is the number of items to be dumped.
425

    
426
@item format
427
can be x (hexa), d (signed decimal), u (unsigned decimal), o (octal),
428
c (char) or i (asm instruction).
429

    
430
@item size
431
can be b (8 bits), h (16 bits), w (32 bits) or g (64 bits). On x86,
432
@code{h} or @code{w} can be specified with the @code{i} format to
433
respectively select 16 or 32 bit code instruction size.
434

    
435
@end table
436

    
437
Examples: 
438
@itemize
439
@item
440
Dump 10 instructions at the current instruction pointer:
441
@example 
442
(qemu) x/10i $eip
443
0x90107063:  ret
444
0x90107064:  sti
445
0x90107065:  lea    0x0(%esi,1),%esi
446
0x90107069:  lea    0x0(%edi,1),%edi
447
0x90107070:  ret
448
0x90107071:  jmp    0x90107080
449
0x90107073:  nop
450
0x90107074:  nop
451
0x90107075:  nop
452
0x90107076:  nop
453
@end example
454

    
455
@item
456
Dump 80 16 bit values at the start of the video memory.
457
@example 
458
(qemu) xp/80hx 0xb8000
459
0x000b8000: 0x0b50 0x0b6c 0x0b65 0x0b78 0x0b38 0x0b36 0x0b2f 0x0b42
460
0x000b8010: 0x0b6f 0x0b63 0x0b68 0x0b73 0x0b20 0x0b56 0x0b47 0x0b41
461
0x000b8020: 0x0b42 0x0b69 0x0b6f 0x0b73 0x0b20 0x0b63 0x0b75 0x0b72
462
0x000b8030: 0x0b72 0x0b65 0x0b6e 0x0b74 0x0b2d 0x0b63 0x0b76 0x0b73
463
0x000b8040: 0x0b20 0x0b30 0x0b35 0x0b20 0x0b4e 0x0b6f 0x0b76 0x0b20
464
0x000b8050: 0x0b32 0x0b30 0x0b30 0x0b33 0x0720 0x0720 0x0720 0x0720
465
0x000b8060: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
466
0x000b8070: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
467
0x000b8080: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
468
0x000b8090: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
469
@end example
470
@end itemize
471

    
472
@item p or print/fmt expr
473

    
474
Print expression value. Only the @var{format} part of @var{fmt} is
475
used.
476

    
477
@end table
478

    
479
@subsection Integer expressions
480

    
481
The monitor understands integers expressions for every integer
482
argument. You can use register names to get the value of specifics
483
CPU registers by prefixing them with @emph{$}.
484

    
485
@node disk_images
486
@section Disk Images
487

    
488
@subsection Raw disk images
489

    
490
The disk images can simply be raw images of the hard disk. You can
491
create them with the command:
492
@example
493
dd if=/dev/zero of=myimage bs=1024 count=mysize
494
@end example
495
where @var{myimage} is the image filename and @var{mysize} is its size
496
in kilobytes.
497

    
498
@subsection Snapshot mode
499

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

    
505
NOTE: The snapshot mode only works with raw disk images.
506

    
507
@subsection Copy On Write disk images
508

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

    
515
To create a COW disk images, use the command:
516

    
517
@example
518
qemu-mkcow -f myrawimage.bin mycowimage.cow
519
@end example
520

    
521
@file{myrawimage.bin} is a raw image you want to use as original disk
522
image. It will never be written to.
523

    
524
@file{mycowimage.cow} is the COW disk image which is created by
525
@code{qemu-mkcow}. You can use it directly with the @option{-hdx}
526
options. You must not modify the original raw disk image if you use
527
COW images, as COW images only store the modified sectors from the raw
528
disk image. QEMU stores the original raw disk image name and its
529
modified time in the COW disk image so that chances of mistakes are
530
reduced.
531

    
532
If the raw disk image is not read-only, by pressing @key{C-a s} you
533
can flush the COW disk image back into the raw disk image, as in
534
snapshot mode.
535

    
536
COW disk images can also be created without a corresponding raw disk
537
image. It is useful to have a big initial virtual disk image without
538
using much disk space. Use:
539

    
540
@example
541
qemu-mkcow mycowimage.cow 1024
542
@end example
543

    
544
to create a 1 gigabyte empty COW disk image.
545

    
546
NOTES: 
547
@enumerate
548
@item
549
COW disk images must be created on file systems supporting
550
@emph{holes} such as ext2 or ext3.
551
@item 
552
Since holes are used, the displayed size of the COW disk image is not
553
the real one. To know it, use the @code{ls -ls} command.
554
@end enumerate
555

    
556
@section Network emulation
557

    
558
QEMU simulates up to 6 networks cards (NE2000 boards). Each card can
559
be connected to a specific host network interface.
560

    
561
@subsection Using tun/tap network interface
562

    
563
This is the standard way to emulate network. QEMU adds a virtual
564
network device on your host (called @code{tun0}), and you can then
565
configure it as if it was a real ethernet card.
566

    
567
As an example, you can download the @file{linux-test-xxx.tar.gz}
568
archive and copy the script @file{qemu-ifup} in @file{/etc} and
569
configure properly @code{sudo} so that the command @code{ifconfig}
570
contained in @file{qemu-ifup} can be executed as root. You must verify
571
that your host kernel supports the TUN/TAP network interfaces: the
572
device @file{/dev/net/tun} must be present.
573

    
574
See @ref{direct_linux_boot} to have an example of network use with a
575
Linux distribution.
576

    
577
@subsection Using the user mode network stack
578

    
579
This is @emph{experimental} (version 0.5.4). You must configure qemu
580
with @code{--enable-slirp}. Then by using the option
581
@option{-user-net} or if you have no tun/tap init script, QEMU uses a
582
completely user mode network stack (you don't need root priviledge to
583
use the virtual network). The virtual network configuration is the
584
following:
585

    
586
@example
587

    
588
QEMU Virtual Machine    <------>  Firewall/DHCP server <-----> Internet
589
     (10.0.2.x)            |          (10.0.2.2)
590
                           |
591
                           ---->  DNS 
592
                              (10.0.2.3)
593
@end example
594

    
595
The QEMU VM behaves as if it was behind a firewall which blocks all
596
incoming connections. You can use a DHCP client to automatically
597
configure the network in the QEMU VM.
598

    
599
In order to check that the user mode network is working, you can ping
600
the address 10.0.2.2 and verify that you got an address in the range
601
10.0.2.x from the QEMU virtual DHCP server.
602

    
603
@node direct_linux_boot
604
@section Direct Linux Boot
605

    
606
This section explains how to launch a Linux kernel inside QEMU without
607
having to make a full bootable image. It is very useful for fast Linux
608
kernel testing. The QEMU network configuration is also explained.
609

    
610
@enumerate
611
@item
612
Download the archive @file{linux-test-xxx.tar.gz} containing a Linux
613
kernel and a disk image. 
614

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

    
622
When network is enabled, there is a virtual network connection between
623
the host kernel and the emulated kernel. The emulated kernel is seen
624
from the host kernel at IP address 172.20.0.2 and the host kernel is
625
seen from the emulated kernel at IP address 172.20.0.1.
626

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

    
629
@example
630
> ./qemu.sh 
631
Connected to host network interface: tun0
632
Linux version 2.4.21 (bellard@voyager.localdomain) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
633
BIOS-provided physical RAM map:
634
 BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
635
 BIOS-e801: 0000000000100000 - 0000000002000000 (usable)
636
32MB LOWMEM available.
637
On node 0 totalpages: 8192
638
zone(0): 4096 pages.
639
zone(1): 4096 pages.
640
zone(2): 0 pages.
641
Kernel command line: root=/dev/hda sb=0x220,5,1,5 ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe console=ttyS0
642
ide_setup: ide2=noprobe
643
ide_setup: ide3=noprobe
644
ide_setup: ide4=noprobe
645
ide_setup: ide5=noprobe
646
Initializing CPU#0
647
Detected 2399.621 MHz processor.
648
Console: colour EGA 80x25
649
Calibrating delay loop... 4744.80 BogoMIPS
650
Memory: 28872k/32768k available (1210k kernel code, 3508k reserved, 266k data, 64k init, 0k highmem)
651
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
652
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
653
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
654
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
655
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
656
CPU: Intel Pentium Pro stepping 03
657
Checking 'hlt' instruction... OK.
658
POSIX conformance testing by UNIFIX
659
Linux NET4.0 for Linux 2.4
660
Based upon Swansea University Computer Society NET3.039
661
Initializing RT netlink socket
662
apm: BIOS not found.
663
Starting kswapd
664
Journalled Block Device driver loaded
665
Detected PS/2 Mouse Port.
666
pty: 256 Unix98 ptys configured
667
Serial driver version 5.05c (2001-07-08) with no serial options enabled
668
ttyS00 at 0x03f8 (irq = 4) is a 16450
669
ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
670
Last modified Nov 1, 2000 by Paul Gortmaker
671
NE*000 ethercard probe at 0x300: 52 54 00 12 34 56
672
eth0: NE2000 found at 0x300, using IRQ 9.
673
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
674
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
675
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
676
hda: QEMU HARDDISK, ATA DISK drive
677
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
678
hda: attached ide-disk driver.
679
hda: 20480 sectors (10 MB) w/256KiB Cache, CHS=20/16/63
680
Partition check:
681
 hda:
682
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
683
NET4: Linux TCP/IP 1.0 for NET4.0
684
IP Protocols: ICMP, UDP, TCP, IGMP
685
IP: routing cache hash table of 512 buckets, 4Kbytes
686
TCP: Hash tables configured (established 2048 bind 4096)
687
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
688
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
689
VFS: Mounted root (ext2 filesystem).
690
Freeing unused kernel memory: 64k freed
691
 
692
Linux version 2.4.21 (bellard@voyager.localdomain) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
693
 
694
QEMU Linux test distribution (based on Redhat 9)
695
 
696
Type 'exit' to halt the system
697
 
698
sh-2.05b# 
699
@end example
700

    
701
@item
702
Then you can play with the kernel inside the virtual serial console. You
703
can launch @code{ls} for example. Type @key{Ctrl-a h} to have an help
704
about the keys you can type inside the virtual serial console. In
705
particular, use @key{Ctrl-a x} to exit QEMU and use @key{Ctrl-a b} as
706
the Magic SysRq key.
707

    
708
@item 
709
If the network is enabled, launch the script @file{/etc/linuxrc} in the
710
emulator (don't forget the leading dot):
711
@example
712
. /etc/linuxrc
713
@end example
714

    
715
Then enable X11 connections on your PC from the emulated Linux: 
716
@example
717
xhost +172.20.0.2
718
@end example
719

    
720
You can now launch @file{xterm} or @file{xlogo} and verify that you have
721
a real Virtual Linux system !
722

    
723
@end enumerate
724

    
725
NOTES:
726
@enumerate
727
@item 
728
A 2.5.74 kernel is also included in the archive. Just
729
replace the bzImage in qemu.sh to try it.
730

    
731
@item 
732
qemu-fast creates a temporary file in @var{$QEMU_TMPDIR} (@file{/tmp} is the
733
default) containing all the simulated PC memory. If possible, try to use
734
a temporary directory using the tmpfs filesystem to avoid too many
735
unnecessary disk accesses.
736

    
737
@item 
738
In order to exit cleanly from qemu, you can do a @emph{shutdown} inside
739
qemu. qemu will automatically exit when the Linux shutdown is done.
740

    
741
@item 
742
You can boot slightly faster by disabling the probe of non present IDE
743
interfaces. To do so, add the following options on the kernel command
744
line:
745
@example
746
ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
747
@end example
748

    
749
@item 
750
The example disk image is a modified version of the one made by Kevin
751
Lawton for the plex86 Project (@url{www.plex86.org}).
752

    
753
@end enumerate
754

    
755
@node linux_compile
756
@section Linux Kernel Compilation
757

    
758
You can use any linux kernel with QEMU. However, if you want to use
759
@code{qemu-fast} to get maximum performances, you must use a modified
760
guest kernel. If you are using a 2.6 guest kernel, you can use
761
directly the patch @file{linux-2.6-qemu-fast.patch} made by Rusty
762
Russel available in the QEMU source archive. Otherwise, you can make the
763
following changes @emph{by hand} to the Linux kernel:
764

    
765
@enumerate
766
@item
767
The kernel must be mapped at 0x90000000 (the default is
768
0xc0000000). You must modify only two lines in the kernel source:
769

    
770
In @file{include/asm/page.h}, replace
771
@example
772
#define __PAGE_OFFSET           (0xc0000000)
773
@end example
774
by
775
@example
776
#define __PAGE_OFFSET           (0x90000000)
777
@end example
778

    
779
And in @file{arch/i386/vmlinux.lds}, replace
780
@example
781
  . = 0xc0000000 + 0x100000;
782
@end example
783
by 
784
@example
785
  . = 0x90000000 + 0x100000;
786
@end example
787

    
788
@item
789
If you want to enable SMP (Symmetric Multi-Processing) support, you
790
must make the following change in @file{include/asm/fixmap.h}. Replace
791
@example
792
#define FIXADDR_TOP	(0xffffX000UL)
793
@end example
794
by 
795
@example
796
#define FIXADDR_TOP	(0xa7ffX000UL)
797
@end example
798
(X is 'e' or 'f' depending on the kernel version). Although you can
799
use an SMP kernel with QEMU, it only supports one CPU.
800

    
801
@item
802
If you are not using a 2.6 kernel as host kernel but if you use a target
803
2.6 kernel, you must also ensure that the 'HZ' define is set to 100
804
(1000 is the default) as QEMU cannot currently emulate timers at
805
frequencies greater than 100 Hz on host Linux systems < 2.6. In
806
@file{include/asm/param.h}, replace:
807

    
808
@example
809
# define HZ		1000		/* Internal kernel timer frequency */
810
@end example
811
by
812
@example
813
# define HZ		100		/* Internal kernel timer frequency */
814
@end example
815

    
816
@end enumerate
817

    
818
The file config-2.x.x gives the configuration of the example kernels.
819

    
820
Just type
821
@example
822
make bzImage
823
@end example
824

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

    
829
@node gdb_usage
830
@section GDB usage
831

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

    
835
In order to use gdb, launch qemu with the '-s' option. It will wait for a
836
gdb connection:
837
@example
838
> qemu -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img -append "root=/dev/hda"
839
Connected to host network interface: tun0
840
Waiting gdb connection on port 1234
841
@end example
842

    
843
Then launch gdb on the 'vmlinux' executable:
844
@example
845
> gdb vmlinux
846
@end example
847

    
848
In gdb, connect to QEMU:
849
@example
850
(gdb) target remote localhost:1234
851
@end example
852

    
853
Then you can use gdb normally. For example, type 'c' to launch the kernel:
854
@example
855
(gdb) c
856
@end example
857

    
858
Here are some useful tips in order to use gdb on system code:
859

    
860
@enumerate
861
@item
862
Use @code{info reg} to display all the CPU registers.
863
@item
864
Use @code{x/10i $eip} to display the code at the PC position.
865
@item
866
Use @code{set architecture i8086} to dump 16 bit code. Then use
867
@code{x/10i $cs*16+*eip} to dump the code at the PC position.
868
@end enumerate
869

    
870
@chapter QEMU PREP PowerPC System emulator invocation
871

    
872
Use the executable @file{qemu-system-ppc} to simulate a complete PREP
873
PowerPC system.
874

    
875
QEMU emulates the following PREP peripherials:
876

    
877
@itemize @minus
878
@item 
879
2 IDE interfaces with hard disk and CD-ROM support
880
@item
881
Floppy disk
882
@item 
883
up to 6 NE2000 network adapters
884
@item
885
Serial port
886
@item
887
PREP Non Volatile RAM
888
@end itemize
889

    
890
You can read the qemu PC system emulation chapter to have more
891
informations about QEMU usage.
892

    
893
More information is available at
894
@url{http://jocelyn.mayer.free.fr/qemu-ppc/}.
895

    
896
@chapter QEMU User space emulator invocation
897

    
898
@section Quick Start
899

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

    
903
@itemize
904

    
905
@item On x86, you can just try to launch any process by using the native
906
libraries:
907

    
908
@example 
909
qemu-i386 -L / /bin/ls
910
@end example
911

    
912
@code{-L /} tells that the x86 dynamic linker must be searched with a
913
@file{/} prefix.
914

    
915
@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):
916

    
917
@example 
918
qemu-i386 -L / qemu-i386 -L / /bin/ls
919
@end example
920

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

    
925
@example
926
unset LD_LIBRARY_PATH 
927
@end example
928

    
929
Then you can launch the precompiled @file{ls} x86 executable:
930

    
931
@example
932
qemu-i386 tests/i386/ls
933
@end example
934
You can look at @file{qemu-binfmt-conf.sh} so that
935
QEMU is automatically launched by the Linux kernel when you try to
936
launch x86 executables. It requires the @code{binfmt_misc} module in the
937
Linux kernel.
938

    
939
@item The x86 version of QEMU is also included. You can try weird things such as:
940
@example
941
qemu-i386 /usr/local/qemu-i386/bin/qemu-i386 /usr/local/qemu-i386/bin/ls-i386
942
@end example
943

    
944
@end itemize
945

    
946
@section Wine launch
947

    
948
@itemize
949

    
950
@item Ensure that you have a working QEMU with the x86 glibc
951
distribution (see previous section). In order to verify it, you must be
952
able to do:
953

    
954
@example
955
qemu-i386 /usr/local/qemu-i386/bin/ls-i386
956
@end example
957

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

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

    
965
@item Then you can try the example @file{putty.exe}:
966

    
967
@example
968
qemu-i386 /usr/local/qemu-i386/wine/bin/wine /usr/local/qemu-i386/wine/c/Program\ Files/putty.exe
969
@end example
970

    
971
@end itemize
972

    
973
@section Command line options
974

    
975
@example
976
usage: qemu-i386 [-h] [-d] [-L path] [-s size] program [arguments...]
977
@end example
978

    
979
@table @option
980
@item -h
981
Print the help
982
@item -L path   
983
Set the x86 elf interpreter prefix (default=/usr/local/qemu-i386)
984
@item -s size
985
Set the x86 stack size in bytes (default=524288)
986
@end table
987

    
988
Debug options:
989

    
990
@table @option
991
@item -d
992
Activate log (logfile=/tmp/qemu.log)
993
@item -p pagesize
994
Act as if the host page size was 'pagesize' bytes
995
@end table
996