Commit 4690764bba3a489d5180106d08970ced59113e22

Authored by bellard
1 parent 3c1cf9fa

update


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@312 c046a42c-6fe2-441c-8c8c-71466251a162
Changelog
  1 +version 0.4.2:
  2 +
  3 + - many exception handling fixes (can compile a Linux kernel inside vl)
  4 + - IDE emulation support
  5 + - initial GDB stub support
  6 + - deferred update support for disk images (Rusty Russell)
  7 + - accept user mode Linux Copy On Write disk images
  8 + - SMP kernels can at least be booted
  9 +
1 10 version 0.4.1:
2 11  
3 12 - more accurate timer support in vl.
... ...
Makefile
... ... @@ -141,7 +141,7 @@ endif
141 141  
142 142 # must use static linking to avoid leaving stuff in virtual address space
143 143 vl: vl.o block.o libqemu.a
144   - $(CC) -pg -static -Wl,-T,i386-vl.ld -o $@ $^ $(LIBS)
  144 + $(CC) -static -Wl,-T,i386-vl.ld -o $@ $^ $(LIBS)
145 145  
146 146 vlmkcow: vlmkcow.o
147 147 $(CC) -o $@ $^ $(LIBS)
... ... @@ -213,11 +213,11 @@ dyngen.c dyngen.h dyngen-exec.h ioctls.h syscall_types.h \
213 213 Makefile elf.h elfload.c main.c signal.c qemu.h \
214 214 syscall.c syscall_defs.h vm86.c path.c mmap.c \
215 215 i386.ld ppc.ld alpha.ld s390.ld sparc.ld arm.ld\
216   -vl.c i386-vl.ld vl.h block.c\
  216 +vl.c i386-vl.ld vl.h block.c vlmkcow.c\
217 217 thunk.c cpu-exec.c translate.c cpu-all.h thunk.h exec.h\
218   -exec.c cpu-exec.c\
  218 +exec.c cpu-exec.c gdbstub.c\
219 219 cpu-i386.h op-i386.c helper-i386.c syscall-i386.h translate-i386.c \
220   -exec-i386.h ops_template.h op_string.h opreg_template.h \
  220 +exec-i386.h ops_template.h ops_template_mem.h op_string.h opreg_template.h \
221 221 cpu-arm.h syscall-arm.h exec-arm.h op-arm.c translate-arm.c op-arm-template.h \
222 222 dis-asm.h disas.c disas.h alpha-dis.c ppc-dis.c i386-dis.c sparc-dis.c \
223 223 arm-dis.c \
... ...
1   -
2   -- finish segment ops (call far, ret far, load_seg suppressed)
3   -- fix arm fpu rounding (at least for float->integer conversions)
  1 +- optimize FPU operations (evaluate x87 stack pointer statically) and
  2 + fix cr0.TS emulation
4 3 - fix CCOP optimisation
5   -- optimize FPU operations (evaluate x87 stack pointer statically)
6   -- fpush not before mem load restarting
7 4 - fix all remaining thread lock issues (must put TBs in a specific invalid
8 5 state, find a solution for tb_flush()).
9   -- add gcc 2.96 test configure (some gcc3 flags are needed)
  6 +- cpu loop optimisation (optimise ret case as the cpu state does not change)
  7 +- fix arm fpu rounding (at least for float->integer conversions)
10 8 - add IPC syscalls
11 9  
12 10 lower priority:
13 11 --------------
  12 +- sysenter/sysexit emulation
  13 +- SMP support
  14 +- finish segment ops (call far, ret far, load_seg suppressed)
14 15 - use -msoft-float on ARM
15 16 - use kernel traps for unaligned accesses on ARM ?
16 17 - handle rare page fault cases (in particular if page fault in heplers or
... ...
1   -0.4.1
2 1 \ No newline at end of file
  2 +0.4.2
3 3 \ No newline at end of file
... ...
cpu-all.h
... ... @@ -311,7 +311,7 @@ extern CPUState *cpu_single_env;
311 311  
312 312 #define CPU_INTERRUPT_EXIT 0x01 /* wants exit from main loop */
313 313 #define CPU_INTERRUPT_HARD 0x02 /* hardware interrupt pending */
314   -void cpu_interrupt(CPUX86State *s, int mask);
  314 +void cpu_interrupt(CPUState *s, int mask);
315 315  
316 316 /* gdb stub API */
317 317 extern int gdbstub_fd;
... ...
cpu-arm.h
... ... @@ -49,7 +49,6 @@ typedef struct CPUARMState {
49 49  
50 50 CPUARMState *cpu_arm_init(void);
51 51 int cpu_arm_exec(CPUARMState *s);
52   -void cpu_arm_interrupt(CPUARMState *s);
53 52 void cpu_arm_close(CPUARMState *s);
54 53 /* you can call this signal handler from your SIGBUS and SIGSEGV
55 54 signal handlers to inform the virtual CPU of exceptions. non zero
... ...
qemu-doc.texi
... ... @@ -240,9 +240,9 @@ This section explains how to launch a Linux kernel inside QEMU.
240 240  
241 241 @enumerate
242 242 @item
243   -Download the archive @file{vl-test-xxx.tar.gz} containing a Linux kernel
244   -and an initrd (initial Ram Disk). The archive also contains a
245   -precompiled version of @file{vl}, the QEMU System emulator.
  243 +Download the archive @file{vl-test-xxx.tar.gz} containing a Linux
  244 +kernel and a disk image. The archive also contains a precompiled
  245 +version of @file{vl}, the QEMU System emulator.
246 246  
247 247 @item Optional: If you want network support (for example to launch X11 examples), you
248 248 must copy the script @file{vl-ifup} in @file{/etc} and configure
... ... @@ -262,20 +262,25 @@ seen from the emulated kernel at IP address 172.20.0.1.
262 262 > ./vl.sh
263 263 connected to host network interface: tun0
264 264 Uncompressing Linux... Ok, booting the kernel.
265   -Linux version 2.4.20 (bellard@voyager) (gcc version 2.95.2 20000220 (Debian GNU/Linux)) #42 Wed Jun 25 14:16:12 CEST 2003
  265 +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
266 266 BIOS-provided physical RAM map:
267   - BIOS-88: 0000000000000000 - 000000000009f000 (usable)
268   - BIOS-88: 0000000000100000 - 0000000002000000 (usable)
  267 + BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
  268 + BIOS-e801: 0000000000100000 - 0000000002000000 (usable)
269 269 32MB LOWMEM available.
270 270 On node 0 totalpages: 8192
271 271 zone(0): 4096 pages.
272 272 zone(1): 4096 pages.
273 273 zone(2): 0 pages.
274   -Kernel command line: root=/dev/ram ramdisk_size=6144
  274 +Kernel command line: root=/dev/hda ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
  275 +ide_setup: ide1=noprobe
  276 +ide_setup: ide2=noprobe
  277 +ide_setup: ide3=noprobe
  278 +ide_setup: ide4=noprobe
  279 +ide_setup: ide5=noprobe
275 280 Initializing CPU#0
276   -Detected 501.785 MHz processor.
277   -Calibrating delay loop... 973.20 BogoMIPS
278   -Memory: 24776k/32768k available (725k kernel code, 7604k reserved, 151k data, 48k init, 0k highmem)
  281 +Detected 501.285 MHz processor.
  282 +Calibrating delay loop... 989.59 BogoMIPS
  283 +Memory: 29268k/32768k available (907k kernel code, 3112k reserved, 212k data, 52k init, 0k highmem)
279 284 Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
280 285 Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
281 286 Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
... ... @@ -289,24 +294,30 @@ Based upon Swansea University Computer Society NET3.039
289 294 Initializing RT netlink socket
290 295 apm: BIOS not found.
291 296 Starting kswapd
  297 +Journalled Block Device driver loaded
292 298 pty: 256 Unix98 ptys configured
293 299 Serial driver version 5.05c (2001-07-08) with no serial options enabled
294 300 ttyS00 at 0x03f8 (irq = 4) is a 16450
  301 +Uniform Multi-Platform E-IDE driver Revision: 6.31
  302 +ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
  303 +hda: QEMU HARDDISK, ATA DISK drive
  304 +ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
  305 +hda: 12288 sectors (6 MB) w/256KiB Cache, CHS=12/16/63
  306 +Partition check:
  307 + hda: unknown partition table
295 308 ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
296 309 Last modified Nov 1, 2000 by Paul Gortmaker
297 310 NE*000 ethercard probe at 0x300: 52 54 00 12 34 56
298 311 eth0: NE2000 found at 0x300, using IRQ 9.
299   -RAMDISK driver initialized: 16 RAM disks of 6144K size 1024 blocksize
  312 +RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
300 313 NET4: Linux TCP/IP 1.0 for NET4.0
301 314 IP Protocols: ICMP, UDP, TCP, IGMP
302 315 IP: routing cache hash table of 512 buckets, 4Kbytes
303   -TCP: Hash tables configured (established 2048 bind 2048)
  316 +TCP: Hash tables configured (established 2048 bind 4096)
304 317 NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
305   -RAMDISK: ext2 filesystem found at block 0
306   -RAMDISK: Loading 6144 blocks [1 disk] into ram disk... done.
307   -Freeing initrd memory: 6144k freed
  318 +EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
308 319 VFS: Mounted root (ext2 filesystem).
309   -Freeing unused kernel memory: 48k freed
  320 +Freeing unused kernel memory: 52k freed
310 321 sh: can't access tty; job control turned off
311 322 #
312 323 @end example
... ... @@ -338,7 +349,7 @@ a real Virtual Linux system !
338 349 NOTES:
339 350 @enumerate
340 351 @item
341   -A 2.5.66 kernel is also included in the vl-test archive. Just
  352 +A 2.5.74 kernel is also included in the vl-test archive. Just
342 353 replace the bzImage in vl.sh to try it.
343 354  
344 355 @item
... ... @@ -348,7 +359,19 @@ a temporary directory using the tmpfs filesystem to avoid too many
348 359 unnecessary disk accesses.
349 360  
350 361 @item
351   -The example initrd is a modified version of the one made by Kevin
  362 +In order to exit cleanly for vl, you can do a @emph{shutdown} inside
  363 +vl. vl will automatically exit when the Linux shutdown is done.
  364 +
  365 +@item
  366 +You can boot slightly faster by disabling the probe of non present IDE
  367 +interfaces. To do so, add the following options on the kernel command
  368 +line:
  369 +@example
  370 +ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
  371 +@end example
  372 +
  373 +@item
  374 +The example disk image is a modified version of the one made by Kevin
352 375 Lawton for the plex86 Project (@url{www.plex86.org}).
353 376  
354 377 @end enumerate
... ... @@ -363,9 +386,6 @@ usage: vl [options] bzImage [kernel parameters...]
363 386  
364 387 General options:
365 388 @table @option
366   -@item -initrd file
367   -Use 'file' as initial ram disk.
368   -
369 389 @item -hda file
370 390 @item -hdb file
371 391 Use 'file' as hard disk 0 or 1 image (@xref{disk_images}).
... ... @@ -383,6 +403,9 @@ Set virtual RAM size to @var{megs} megabytes.
383 403 Set network init script [default=/etc/vl-ifup]. This script is
384 404 launched to configure the host network interface (usually tun0)
385 405 corresponding to the virtual NE2000 card.
  406 +
  407 +@item -initrd file
  408 +Use 'file' as initial ram disk.
386 409 @end table
387 410  
388 411 Debug options:
... ... @@ -481,13 +504,17 @@ Since holes are used, the displayed size of the COW disk image is not
481 504 the real one. To know it, use the @code{ls -ls} command.
482 505 @end enumerate
483 506  
484   -@section Kernel Compilation
  507 +@section Linux Kernel Compilation
  508 +
  509 +You should be able to use any kernel with QEMU provided you make the
  510 +following changes (only 2.4.x and 2.5.x were tested):
485 511  
486   -You can use any Linux kernel within QEMU provided it is mapped at
487   -address 0x90000000 (the default is 0xc0000000). You must modify only two
488   -lines in the kernel source:
  512 +@enumerate
  513 +@item
  514 +The kernel must be mapped at 0x90000000 (the default is
  515 +0xc0000000). You must modify only two lines in the kernel source:
489 516  
490   -In asm/page.h, replace
  517 +In @file{include/asm/page.h}, replace
491 518 @example
492 519 #define __PAGE_OFFSET (0xc0000000)
493 520 @end example
... ... @@ -496,7 +523,7 @@ by
496 523 #define __PAGE_OFFSET (0x90000000)
497 524 @end example
498 525  
499   -And in arch/i386/vmlinux.lds, replace
  526 +And in @file{arch/i386/vmlinux.lds}, replace
500 527 @example
501 528 . = 0xc0000000 + 0x100000;
502 529 @end example
... ... @@ -505,22 +532,25 @@ by
505 532 . = 0x90000000 + 0x100000;
506 533 @end example
507 534  
508   -The file config-2.4.20 gives the configuration of the example kernel.
509   -
510   -Just type
  535 +@item
  536 +If you want to enable SMP (Symmetric Multi-Processing) support, you
  537 +must make the following change in @file{include/asm/fixmap.h}. Replace
511 538 @example
512   -make bzImage
  539 +#define FIXADDR_TOP (0xffffX000UL)
513 540 @end example
  541 +by
  542 +@example
  543 +#define FIXADDR_TOP (0xa7ffX000UL)
  544 +@end example
  545 +(X is 'e' or 'f' depending on the kernel version). Although you can
  546 +use an SMP kernel with QEMU, it only supports one CPU.
514 547  
515   -As you would do to make a real kernel. Then you can use with QEMU
516   -exactly the same kernel as you would boot on your PC (in
517   -@file{arch/i386/boot/bzImage}).
518   -
  548 +@item
519 549 If you are not using a 2.5 kernel as host kernel but if you use a target
520 550 2.5 kernel, you must also ensure that the 'HZ' define is set to 100
521 551 (1000 is the default) as QEMU cannot currently emulate timers at
522 552 frequencies greater than 100 Hz on host Linux systems < 2.5. In
523   -asm/param.h, replace:
  553 +@file{include/asm/param.h}, replace:
524 554  
525 555 @example
526 556 # define HZ 1000 /* Internal kernel timer frequency */
... ... @@ -530,8 +560,18 @@ by
530 560 # define HZ 100 /* Internal kernel timer frequency */
531 561 @end example
532 562  
533   -If you have problems running your kernel, verify that neither the SMP nor
534   -HIGHMEM configuration options are activated.
  563 +@end enumerate
  564 +
  565 +The file config-2.x.x gives the configuration of the example kernels.
  566 +
  567 +Just type
  568 +@example
  569 +make bzImage
  570 +@end example
  571 +
  572 +As you would do to make a real kernel. Then you can use with QEMU
  573 +exactly the same kernel as you would boot on your PC (in
  574 +@file{arch/i386/boot/bzImage}).
535 575  
536 576 @section PC Emulation
537 577  
... ... @@ -733,7 +773,7 @@ Correct translated code invalidation is done efficiently by maintaining
733 773 a linked list of every translated block contained in a given page. Other
734 774 linked lists are also maintained to undo direct block chaining.
735 775  
736   -Althought the overhead of doing @code{mprotect()} calls is important,
  776 +Although the overhead of doing @code{mprotect()} calls is important,
737 777 most MSDOS programs can be emulated at reasonnable speed with QEMU and
738 778 DOSEMU.
739 779  
... ... @@ -802,7 +842,7 @@ reentrancy.
802 842  
803 843 @section Self-virtualization
804 844  
805   -QEMU was conceived so that ultimately it can emulate itself. Althought
  845 +QEMU was conceived so that ultimately it can emulate itself. Although
806 846 it is not very useful, it is an important test to show the power of the
807 847 emulator.
808 848  
... ...
vlmkcow.c
... ... @@ -85,7 +85,8 @@ int cow_create(int cow_fd, const char *image_filename,
85 85  
86 86 void help(void)
87 87 {
88   - printf("usage vlmkcow [-h] [-f disk_image] cow_image [cow_size]\n"
  88 + printf("vlmkcow version " QEMU_VERSION ", Copyright (c) 2003 Fabrice Bellard\n"
  89 + "usage: vlmkcow [-h] [-f disk_image] cow_image [cow_size]\n"
89 90 "Create a Copy On Write disk image from an optional raw disk image\n"
90 91 "\n"
91 92 "-f disk_image set the raw disk image name\n"
... ...