Revisión | 4690764bba3a489d5180106d08970ced59113e22 (tree) |
---|---|
Tiempo | 2003-07-07 21:17:46 |
Autor | bellard <bellard@c046...> |
Commiter | bellard |
update
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@312 c046a42c-6fe2-441c-8c8c-71466251a162
@@ -1,3 +1,12 @@ | ||
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. |
@@ -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,16 +1,17 @@ | ||
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 +1 @@ | ||
1 | -0.4.1 | |
\ No newline at end of file | ||
1 | +0.4.2 | |
\ No newline at end of file |
@@ -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; |
@@ -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 |
@@ -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 |
@@ -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" |