Commit 4690764bba3a489d5180106d08970ced59113e22
1 parent
3c1cf9fa
update
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@312 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
8 changed files
with
104 additions
and
54 deletions
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 | version 0.4.1: | 10 | version 0.4.1: |
| 2 | 11 | ||
| 3 | - more accurate timer support in vl. | 12 | - more accurate timer support in vl. |
Makefile
| @@ -141,7 +141,7 @@ endif | @@ -141,7 +141,7 @@ endif | ||
| 141 | 141 | ||
| 142 | # must use static linking to avoid leaving stuff in virtual address space | 142 | # must use static linking to avoid leaving stuff in virtual address space |
| 143 | vl: vl.o block.o libqemu.a | 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 | vlmkcow: vlmkcow.o | 146 | vlmkcow: vlmkcow.o |
| 147 | $(CC) -o $@ $^ $(LIBS) | 147 | $(CC) -o $@ $^ $(LIBS) |
| @@ -213,11 +213,11 @@ dyngen.c dyngen.h dyngen-exec.h ioctls.h syscall_types.h \ | @@ -213,11 +213,11 @@ dyngen.c dyngen.h dyngen-exec.h ioctls.h syscall_types.h \ | ||
| 213 | Makefile elf.h elfload.c main.c signal.c qemu.h \ | 213 | Makefile elf.h elfload.c main.c signal.c qemu.h \ |
| 214 | syscall.c syscall_defs.h vm86.c path.c mmap.c \ | 214 | syscall.c syscall_defs.h vm86.c path.c mmap.c \ |
| 215 | i386.ld ppc.ld alpha.ld s390.ld sparc.ld arm.ld\ | 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 | thunk.c cpu-exec.c translate.c cpu-all.h thunk.h exec.h\ | 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 | cpu-i386.h op-i386.c helper-i386.c syscall-i386.h translate-i386.c \ | 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 | cpu-arm.h syscall-arm.h exec-arm.h op-arm.c translate-arm.c op-arm-template.h \ | 221 | cpu-arm.h syscall-arm.h exec-arm.h op-arm.c translate-arm.c op-arm-template.h \ |
| 222 | dis-asm.h disas.c disas.h alpha-dis.c ppc-dis.c i386-dis.c sparc-dis.c \ | 222 | dis-asm.h disas.c disas.h alpha-dis.c ppc-dis.c i386-dis.c sparc-dis.c \ |
| 223 | arm-dis.c \ | 223 | arm-dis.c \ |
TODO
| 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 | - fix CCOP optimisation | 3 | - fix CCOP optimisation |
| 5 | -- optimize FPU operations (evaluate x87 stack pointer statically) | ||
| 6 | -- fpush not before mem load restarting | ||
| 7 | - fix all remaining thread lock issues (must put TBs in a specific invalid | 4 | - fix all remaining thread lock issues (must put TBs in a specific invalid |
| 8 | state, find a solution for tb_flush()). | 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 | - add IPC syscalls | 8 | - add IPC syscalls |
| 11 | 9 | ||
| 12 | lower priority: | 10 | lower priority: |
| 13 | -------------- | 11 | -------------- |
| 12 | +- sysenter/sysexit emulation | ||
| 13 | +- SMP support | ||
| 14 | +- finish segment ops (call far, ret far, load_seg suppressed) | ||
| 14 | - use -msoft-float on ARM | 15 | - use -msoft-float on ARM |
| 15 | - use kernel traps for unaligned accesses on ARM ? | 16 | - use kernel traps for unaligned accesses on ARM ? |
| 16 | - handle rare page fault cases (in particular if page fault in heplers or | 17 | - handle rare page fault cases (in particular if page fault in heplers or |
VERSION
cpu-all.h
| @@ -311,7 +311,7 @@ extern CPUState *cpu_single_env; | @@ -311,7 +311,7 @@ extern CPUState *cpu_single_env; | ||
| 311 | 311 | ||
| 312 | #define CPU_INTERRUPT_EXIT 0x01 /* wants exit from main loop */ | 312 | #define CPU_INTERRUPT_EXIT 0x01 /* wants exit from main loop */ |
| 313 | #define CPU_INTERRUPT_HARD 0x02 /* hardware interrupt pending */ | 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 | /* gdb stub API */ | 316 | /* gdb stub API */ |
| 317 | extern int gdbstub_fd; | 317 | extern int gdbstub_fd; |
cpu-arm.h
| @@ -49,7 +49,6 @@ typedef struct CPUARMState { | @@ -49,7 +49,6 @@ typedef struct CPUARMState { | ||
| 49 | 49 | ||
| 50 | CPUARMState *cpu_arm_init(void); | 50 | CPUARMState *cpu_arm_init(void); |
| 51 | int cpu_arm_exec(CPUARMState *s); | 51 | int cpu_arm_exec(CPUARMState *s); |
| 52 | -void cpu_arm_interrupt(CPUARMState *s); | ||
| 53 | void cpu_arm_close(CPUARMState *s); | 52 | void cpu_arm_close(CPUARMState *s); |
| 54 | /* you can call this signal handler from your SIGBUS and SIGSEGV | 53 | /* you can call this signal handler from your SIGBUS and SIGSEGV |
| 55 | signal handlers to inform the virtual CPU of exceptions. non zero | 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,9 +240,9 @@ This section explains how to launch a Linux kernel inside QEMU. | ||
| 240 | 240 | ||
| 241 | @enumerate | 241 | @enumerate |
| 242 | @item | 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 | @item Optional: If you want network support (for example to launch X11 examples), you | 247 | @item Optional: If you want network support (for example to launch X11 examples), you |
| 248 | must copy the script @file{vl-ifup} in @file{/etc} and configure | 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,20 +262,25 @@ seen from the emulated kernel at IP address 172.20.0.1. | ||
| 262 | > ./vl.sh | 262 | > ./vl.sh |
| 263 | connected to host network interface: tun0 | 263 | connected to host network interface: tun0 |
| 264 | Uncompressing Linux... Ok, booting the kernel. | 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 | BIOS-provided physical RAM map: | 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 | 32MB LOWMEM available. | 269 | 32MB LOWMEM available. |
| 270 | On node 0 totalpages: 8192 | 270 | On node 0 totalpages: 8192 |
| 271 | zone(0): 4096 pages. | 271 | zone(0): 4096 pages. |
| 272 | zone(1): 4096 pages. | 272 | zone(1): 4096 pages. |
| 273 | zone(2): 0 pages. | 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 | Initializing CPU#0 | 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 | Dentry cache hash table entries: 4096 (order: 3, 32768 bytes) | 284 | Dentry cache hash table entries: 4096 (order: 3, 32768 bytes) |
| 280 | Inode cache hash table entries: 2048 (order: 2, 16384 bytes) | 285 | Inode cache hash table entries: 2048 (order: 2, 16384 bytes) |
| 281 | Mount-cache hash table entries: 512 (order: 0, 4096 bytes) | 286 | Mount-cache hash table entries: 512 (order: 0, 4096 bytes) |
| @@ -289,24 +294,30 @@ Based upon Swansea University Computer Society NET3.039 | @@ -289,24 +294,30 @@ Based upon Swansea University Computer Society NET3.039 | ||
| 289 | Initializing RT netlink socket | 294 | Initializing RT netlink socket |
| 290 | apm: BIOS not found. | 295 | apm: BIOS not found. |
| 291 | Starting kswapd | 296 | Starting kswapd |
| 297 | +Journalled Block Device driver loaded | ||
| 292 | pty: 256 Unix98 ptys configured | 298 | pty: 256 Unix98 ptys configured |
| 293 | Serial driver version 5.05c (2001-07-08) with no serial options enabled | 299 | Serial driver version 5.05c (2001-07-08) with no serial options enabled |
| 294 | ttyS00 at 0x03f8 (irq = 4) is a 16450 | 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 | ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com) | 308 | ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com) |
| 296 | Last modified Nov 1, 2000 by Paul Gortmaker | 309 | Last modified Nov 1, 2000 by Paul Gortmaker |
| 297 | NE*000 ethercard probe at 0x300: 52 54 00 12 34 56 | 310 | NE*000 ethercard probe at 0x300: 52 54 00 12 34 56 |
| 298 | eth0: NE2000 found at 0x300, using IRQ 9. | 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 | NET4: Linux TCP/IP 1.0 for NET4.0 | 313 | NET4: Linux TCP/IP 1.0 for NET4.0 |
| 301 | IP Protocols: ICMP, UDP, TCP, IGMP | 314 | IP Protocols: ICMP, UDP, TCP, IGMP |
| 302 | IP: routing cache hash table of 512 buckets, 4Kbytes | 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 | NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. | 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 | VFS: Mounted root (ext2 filesystem). | 319 | VFS: Mounted root (ext2 filesystem). |
| 309 | -Freeing unused kernel memory: 48k freed | 320 | +Freeing unused kernel memory: 52k freed |
| 310 | sh: can't access tty; job control turned off | 321 | sh: can't access tty; job control turned off |
| 311 | # | 322 | # |
| 312 | @end example | 323 | @end example |
| @@ -338,7 +349,7 @@ a real Virtual Linux system ! | @@ -338,7 +349,7 @@ a real Virtual Linux system ! | ||
| 338 | NOTES: | 349 | NOTES: |
| 339 | @enumerate | 350 | @enumerate |
| 340 | @item | 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 | replace the bzImage in vl.sh to try it. | 353 | replace the bzImage in vl.sh to try it. |
| 343 | 354 | ||
| 344 | @item | 355 | @item |
| @@ -348,7 +359,19 @@ a temporary directory using the tmpfs filesystem to avoid too many | @@ -348,7 +359,19 @@ a temporary directory using the tmpfs filesystem to avoid too many | ||
| 348 | unnecessary disk accesses. | 359 | unnecessary disk accesses. |
| 349 | 360 | ||
| 350 | @item | 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 | Lawton for the plex86 Project (@url{www.plex86.org}). | 375 | Lawton for the plex86 Project (@url{www.plex86.org}). |
| 353 | 376 | ||
| 354 | @end enumerate | 377 | @end enumerate |
| @@ -363,9 +386,6 @@ usage: vl [options] bzImage [kernel parameters...] | @@ -363,9 +386,6 @@ usage: vl [options] bzImage [kernel parameters...] | ||
| 363 | 386 | ||
| 364 | General options: | 387 | General options: |
| 365 | @table @option | 388 | @table @option |
| 366 | -@item -initrd file | ||
| 367 | -Use 'file' as initial ram disk. | ||
| 368 | - | ||
| 369 | @item -hda file | 389 | @item -hda file |
| 370 | @item -hdb file | 390 | @item -hdb file |
| 371 | Use 'file' as hard disk 0 or 1 image (@xref{disk_images}). | 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,6 +403,9 @@ Set virtual RAM size to @var{megs} megabytes. | ||
| 383 | Set network init script [default=/etc/vl-ifup]. This script is | 403 | Set network init script [default=/etc/vl-ifup]. This script is |
| 384 | launched to configure the host network interface (usually tun0) | 404 | launched to configure the host network interface (usually tun0) |
| 385 | corresponding to the virtual NE2000 card. | 405 | corresponding to the virtual NE2000 card. |
| 406 | + | ||
| 407 | +@item -initrd file | ||
| 408 | +Use 'file' as initial ram disk. | ||
| 386 | @end table | 409 | @end table |
| 387 | 410 | ||
| 388 | Debug options: | 411 | Debug options: |
| @@ -481,13 +504,17 @@ Since holes are used, the displayed size of the COW disk image is not | @@ -481,13 +504,17 @@ Since holes are used, the displayed size of the COW disk image is not | ||
| 481 | the real one. To know it, use the @code{ls -ls} command. | 504 | the real one. To know it, use the @code{ls -ls} command. |
| 482 | @end enumerate | 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 | @example | 518 | @example |
| 492 | #define __PAGE_OFFSET (0xc0000000) | 519 | #define __PAGE_OFFSET (0xc0000000) |
| 493 | @end example | 520 | @end example |
| @@ -496,7 +523,7 @@ by | @@ -496,7 +523,7 @@ by | ||
| 496 | #define __PAGE_OFFSET (0x90000000) | 523 | #define __PAGE_OFFSET (0x90000000) |
| 497 | @end example | 524 | @end example |
| 498 | 525 | ||
| 499 | -And in arch/i386/vmlinux.lds, replace | 526 | +And in @file{arch/i386/vmlinux.lds}, replace |
| 500 | @example | 527 | @example |
| 501 | . = 0xc0000000 + 0x100000; | 528 | . = 0xc0000000 + 0x100000; |
| 502 | @end example | 529 | @end example |
| @@ -505,22 +532,25 @@ by | @@ -505,22 +532,25 @@ by | ||
| 505 | . = 0x90000000 + 0x100000; | 532 | . = 0x90000000 + 0x100000; |
| 506 | @end example | 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 | @example | 538 | @example |
| 512 | -make bzImage | 539 | +#define FIXADDR_TOP (0xffffX000UL) |
| 513 | @end example | 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 | If you are not using a 2.5 kernel as host kernel but if you use a target | 549 | If you are not using a 2.5 kernel as host kernel but if you use a target |
| 520 | 2.5 kernel, you must also ensure that the 'HZ' define is set to 100 | 550 | 2.5 kernel, you must also ensure that the 'HZ' define is set to 100 |
| 521 | (1000 is the default) as QEMU cannot currently emulate timers at | 551 | (1000 is the default) as QEMU cannot currently emulate timers at |
| 522 | frequencies greater than 100 Hz on host Linux systems < 2.5. In | 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 | @example | 555 | @example |
| 526 | # define HZ 1000 /* Internal kernel timer frequency */ | 556 | # define HZ 1000 /* Internal kernel timer frequency */ |
| @@ -530,8 +560,18 @@ by | @@ -530,8 +560,18 @@ by | ||
| 530 | # define HZ 100 /* Internal kernel timer frequency */ | 560 | # define HZ 100 /* Internal kernel timer frequency */ |
| 531 | @end example | 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 | @section PC Emulation | 576 | @section PC Emulation |
| 537 | 577 | ||
| @@ -733,7 +773,7 @@ Correct translated code invalidation is done efficiently by maintaining | @@ -733,7 +773,7 @@ Correct translated code invalidation is done efficiently by maintaining | ||
| 733 | a linked list of every translated block contained in a given page. Other | 773 | a linked list of every translated block contained in a given page. Other |
| 734 | linked lists are also maintained to undo direct block chaining. | 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 | most MSDOS programs can be emulated at reasonnable speed with QEMU and | 777 | most MSDOS programs can be emulated at reasonnable speed with QEMU and |
| 738 | DOSEMU. | 778 | DOSEMU. |
| 739 | 779 | ||
| @@ -802,7 +842,7 @@ reentrancy. | @@ -802,7 +842,7 @@ reentrancy. | ||
| 802 | 842 | ||
| 803 | @section Self-virtualization | 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 | it is not very useful, it is an important test to show the power of the | 846 | it is not very useful, it is an important test to show the power of the |
| 807 | emulator. | 847 | emulator. |
| 808 | 848 |
vlmkcow.c
| @@ -85,7 +85,8 @@ int cow_create(int cow_fd, const char *image_filename, | @@ -85,7 +85,8 @@ int cow_create(int cow_fd, const char *image_filename, | ||
| 85 | 85 | ||
| 86 | void help(void) | 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 | "Create a Copy On Write disk image from an optional raw disk image\n" | 90 | "Create a Copy On Write disk image from an optional raw disk image\n" |
| 90 | "\n" | 91 | "\n" |
| 91 | "-f disk_image set the raw disk image name\n" | 92 | "-f disk_image set the raw disk image name\n" |