Fabrice Bellard wrote: > > Ross Kendall Axe wrote: > >> The requirement to provide an -hda argument when doing a direct boot of >> a linux kernel has irritated me for some time. This patch removes that >> requirement by creating a temporary 1 sector hda as needed. >> >> Ross > > I like the idea, but your patch may not compile for win32. Maybe > creating a generic "dummy:[size]" block device would be interesting > instead ? > > Fabrice.
Good point. It wouldn't compile, and, even if it did, it wouldn't run correctly. Attached is a patch that *should* work. The dummy block device idea is interesting. I'll see if I can implement that; hopefully it won't be too difficult. However, IHMO a better, albeit more ambitious solution would be to load the Linux boot code into an emulated boot PROM. Ross
Index: hw/pc.c =================================================================== RCS file: /cvsroot/qemu/qemu/hw/pc.c,v retrieving revision 1.35 diff -u -p -r1.35 pc.c --- hw/pc.c 15 Jan 2005 12:02:56 -0000 1.35 +++ hw/pc.c 28 Apr 2005 23:36:13 -0000 @@ -446,8 +446,40 @@ void pc_init(int ram_size, int vga_ram_s uint8_t old_bootsect[512]; if (bs_table[0] == NULL) { - fprintf(stderr, "A disk image must be given for 'hda' when booting a Linux kernel\n"); - exit(1); +#ifdef WIN32 + char tmpfilename[L_tmpnam]; +#else + char tmpfilename[] = "/tmp/qemu.XXXXXX"; + int tmpfilefd; +#endif + FILE *tmpfile; + + fprintf(stderr, "qemu: Disk image not given for 'hda' when booting" + " a Linux kernel; inventing one\n"); +#ifdef WIN32 + tmpnam(tmpfilename); + tmpfile = fopen(tmpfilename, "wb"); +#else + tmpfilefd = mkstemp(tmpfilename); + tmpfile = (tmpfilefd == -1) ? NULL : fdopen(tmpfilefd, "wb"); +#endif + if(!tmpfile) { + fprintf(stderr, "qemu: couldn't create temporary diskimage\n"); + exit(1); + } + fseek(tmpfile, 511, SEEK_SET); + fputc('0', tmpfile); + fclose(tmpfile); + bs_table[0] = bdrv_new("hda"); + if (bdrv_open(bs_table[0], tmpfilename, 0) < 0) { + fprintf(stderr, "qemu: could not load temporary diskimage '%s'\n", + tmpfilename); + exit(1); + } +#ifndef WIN32 + unlink(tmpfilename); +#endif + boot_device = 'c'; } snprintf(buf, sizeof(buf), "%s/%s", bios_dir, LINUX_BOOT_FILENAME); ret = load_image(buf, bootsect);
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel