Shouldnt the behaviour of -boot option be changed to match this change ? e.g. qemu -cdrom-a disk1.iso -cdrom-b myos.iso -boot cdrom-b
allowing multiple cdrom drives renders "-boot d" a bit strange imo. --- "Jim C. Brown" <[EMAIL PROTECTED]> a écrit : > On Fri, Apr 14, 2006 at 02:41:12PM -0400, Jim C. Brown wrote: > > Attached is a patch that does just that. > > > > The default -cdrom still works, but you can also use -cdrom-a, -cdrom-b, > > -cdrom-c, and > -cdrom-d to specify if the cdrom should be plugged in place over hda, hdb, > hdc, or hdd > respectively. > > > > Also includes a few tests to make sure you don't clobber a hard disk with a > > cdrom, or use the > same -hdX or -cdrom-X option multiple times. > > > > Here is a slightly modified version that enables you to have multiple cdrom > drives at once. > > It is not heavily tested so there may be some bugs. > > -- > Infinite complexity begets infinite beauty. > Infinite precision begets infinite perfection. > > --- vl.c.nocdrom Fri Apr 14 15:12:35 2006 > +++ vl.c Fri Apr 14 15:21:08 2006 > @@ -4730,6 +4730,10 @@ > QEMU_OPTION_hdc, > QEMU_OPTION_hdd, > QEMU_OPTION_cdrom, > + QEMU_OPTION_cdrom_a, > + QEMU_OPTION_cdrom_b, > + QEMU_OPTION_cdrom_c, > + QEMU_OPTION_cdrom_d, > QEMU_OPTION_boot, > QEMU_OPTION_snapshot, > QEMU_OPTION_m, > @@ -4795,6 +4799,10 @@ > { "hdc", HAS_ARG, QEMU_OPTION_hdc }, > { "hdd", HAS_ARG, QEMU_OPTION_hdd }, > { "cdrom", HAS_ARG, QEMU_OPTION_cdrom }, > + { "cdrom-a", HAS_ARG, QEMU_OPTION_cdrom_a }, > + { "cdrom-b", HAS_ARG, QEMU_OPTION_cdrom_b }, > + { "cdrom-c", HAS_ARG, QEMU_OPTION_cdrom_c }, > + { "cdrom-d", HAS_ARG, QEMU_OPTION_cdrom_d }, > { "boot", HAS_ARG, QEMU_OPTION_boot }, > { "snapshot", 0, QEMU_OPTION_snapshot }, > { "m", HAS_ARG, QEMU_OPTION_m }, > @@ -5042,6 +5050,7 @@ > int snapshot, linux_boot; > const char *initrd_filename; > const char *hd_filename[MAX_DISKS], *fd_filename[MAX_FD]; > + int hd_is_cdrom[MAX_DISKS]; > const char *kernel_filename, *kernel_cmdline; > DisplayState *ds = &display_state; > int cyls, heads, secs, translation; > @@ -5079,7 +5088,10 @@ > for(i = 0; i < MAX_FD; i++) > fd_filename[i] = NULL; > for(i = 0; i < MAX_DISKS; i++) > + { > hd_filename[i] = NULL; > + hd_is_cdrom[i] = 0; > + } > ram_size = DEFAULT_RAM_SIZE * 1024 * 1024; > vga_ram_size = VGA_RAM_SIZE; > bios_size = BIOS_SIZE; > @@ -5091,11 +5103,7 @@ > nographic = 0; > kernel_filename = NULL; > kernel_cmdline = ""; > -#ifdef TARGET_PPC > - cdrom_index = 1; > -#else > - cdrom_index = 2; > -#endif > + cdrom_index = -1; //disable by default > cyls = heads = secs = 0; > translation = BIOS_ATA_TRANSLATION_AUTO; > #ifdef _WIN32 > @@ -5127,7 +5135,7 @@ > break; > r = argv[optind]; > if (r[0] != '-') { > - hd_filename[0] = argv[optind++]; > + //hd_filename[0] = argv[optind++]; > } else { > const QEMUOption *popt; > > @@ -5178,9 +5186,12 @@ > { > int hd_index; > hd_index = popt->index - QEMU_OPTION_hda; > + if (hd_filename[hd_index] != NULL) { > + fprintf(stderr, "qemu: can't share multiple > disks\n"); > + exit(1); > + } > hd_filename[hd_index] = optarg; > - if (hd_index == cdrom_index) > - cdrom_index = -1; > + hd_is_cdrom[hd_index] = 0; > } > break; > case QEMU_OPTION_snapshot: > @@ -5235,9 +5246,26 @@ > kernel_cmdline = optarg; > break; > case QEMU_OPTION_cdrom: > - if (cdrom_index >= 0) { > - hd_filename[cdrom_index] = optarg; > + case QEMU_OPTION_cdrom_a: > + case QEMU_OPTION_cdrom_b: > + case QEMU_OPTION_cdrom_c: > + case QEMU_OPTION_cdrom_d: > + if (popt->index == QEMU_OPTION_cdrom) > +/* use a sensible default */ > +#ifdef TARGET_PPC > + cdrom_index = 1; > +#else > + cdrom_index = 2; > +#endif > + else > + cdrom_index = popt->index - QEMU_OPTION_cdrom_a; > + > + if (hd_filename[cdrom_index] != NULL) { > + fprintf(stderr, "qemu: can't share multiple disks\n"); > + exit(1); > } > + hd_filename[cdrom_index] = optarg; > + hd_is_cdrom[cdrom_index] = 1; > break; > case QEMU_OPTION_boot: > boot_device = optarg[0]; > @@ -5555,9 +5583,21 @@ > > /* we always create the cdrom drive, even if no disk is there */ > bdrv_init(); > + int ci = 0; > + char cdrom_name[7]; > + strcpy(cdrom_name, "cdrom"); > + cdrom_name[6] = '\0'; > if (cdrom_index >= 0) { > - bs_table[cdrom_index] = bdrv_new("cdrom"); > - bdrv_set_type_hint(bs_table[cdrom_index], BDRV_TYPE_CDROM); > + for (i = 0; i < MAX_DISKS; i++) > + { > + if (hd_is_cdrom[i]) > + { > + bs_table[i] = bdrv_new(cdrom_name); > + ci++; > + cdrom_name[5] = '0' + (char)ci; > + bdrv_set_type_hint(bs_table[i], BDRV_TYPE_CDROM); > + } > + } > } > > /* open the virtual block devices */ > > _______________________________________________ > Qemu-devel mailing list > Qemu-devel@nongnu.org > http://lists.nongnu.org/mailman/listinfo/qemu-devel > Kind regards, Sylvain Petreolle (aka Usurp) --- --- --- --- --- --- --- --- --- --- --- --- --- Listen to free Music: http://www.jamendo.com Windows is proprietary, use free ReactOS instead : http://www.reactos.org _______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel