* [Qemu-devel] [PATCH] Add -boot n option for x86 using PXE
@ 2006-12-27 17:19 Anthony Liguori
0 siblings, 0 replies; only message in thread
From: Anthony Liguori @ 2006-12-27 17:19 UTC (permalink / raw)
To: qemu-devel, Fabrice Bellard
[-- Attachment #1: Type: text/plain, Size: 893 bytes --]
Howdy,
The following patch enables -boot n for x86 using etherboot PXE ROMs.
It depends on my previous -option-rom patch.
Essentially, if -boot n is specified, the set of NICs is searched and
the patch looks for a ROM named pxe-<model>.bin in the BIOS path. When
one is found, it is added as an option rom.
Besides applying this patch, three ROMs will have to be added to
pc-bios/. I'd suggest getting them from http://www.rom-o-matic.net.
You'll need ROMs for:
pcnet32:pcnet32 -- [0x1022,0x2000]
ns8390:winbond940 -- [0x1050,0x0940]
rtl8139:rtl8139 -- [0x10ec,0x8139]
And they should be named:
pxe-pcnet.bin
pxe-ne2k_pci.bin
pxe-rtl8139.bin
Right now, I have it limited to TARGET_I386 as I'm not sure whether
other platforms support PXE booting. I also think this is a little
hacky so if anyone has a better suggestion I'd appreciate hearing it.
Regards,
Anthony Liguori
[-- Attachment #2: qemu-pxe.diff --]
[-- Type: text/x-patch, Size: 3639 bytes --]
diff -r a46a54f7808d Makefile
--- a/Makefile Sat Dec 23 16:29:19 2006 -0600
+++ b/Makefile Sat Dec 23 16:29:21 2006 -0600
@@ -79,7 +79,8 @@ install: all $(if $(BUILD_DOCS),install-
$(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
mkdir -p "$(DESTDIR)$(datadir)"
for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
- video.x openbios-sparc32 linux_boot.bin; do \
+ video.x openbios-sparc32 linux_boot.bin pxe-ne2k_pci.bin \
+ pxe-rtl8139.bin pxe-pcnet.bin; do \
$(INSTALL) -m 644 $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(datadir)"; \
done
ifndef CONFIG_WIN32
diff -r a46a54f7808d pc-bios/README
--- a/pc-bios/README Sat Dec 23 16:29:19 2006 -0600
+++ b/pc-bios/README Sat Dec 23 16:29:21 2006 -0600
@@ -14,3 +14,9 @@
- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable
firmware implementation. The goal is to implement a 100% IEEE
1275-1994 (referred to as Open Firmware) compliant firmware.
+
+- The PXE roms come from Rom-o-Matic etherboot 5.4.2.
+ pcnet32:pcnet32 -- [0x1022,0x2000]
+ ns8390:winbond940 -- [0x1050,0x0940]
+ rtl8139:rtl8139 -- [0x10ec,0x8139]
+ http://rom-o-matic.net/
diff -r a46a54f7808d qemu-doc.texi
--- a/qemu-doc.texi Sat Dec 23 16:29:19 2006 -0600
+++ b/qemu-doc.texi Sat Dec 23 16:29:21 2006 -0600
@@ -219,9 +219,9 @@ Use @var{file} as CD-ROM image (you cann
@option{-cdrom} at the same time). You can use the host CD-ROM by
using @file{/dev/cdrom} as filename (@pxref{host_drives}).
-@item -boot [a|c|d]
-Boot on floppy (a), hard disk (c) or CD-ROM (d). Hard disk boot is
-the default.
+@item -boot [a|c|d|n]
+Boot on floppy (a), hard disk (c), CD-ROM (d), or Etherboot (n). Hard disk boot
+is the default.
@item -disk ide,img=file[,hdx=a..dd][,type=disk|cdrom]
Use @var{file} as the IDE disk/CD-ROM image. The defaults are: hdx=a,type=disk
diff -r a46a54f7808d vl.c
--- a/vl.c Sat Dec 23 16:29:19 2006 -0600
+++ b/vl.c Sat Dec 23 16:29:52 2006 -0600
@@ -6111,7 +6111,7 @@ void help(void)
"-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
"-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
"-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
- "-boot [a|c|d] boot on floppy (a), hard disk (c) or CD-ROM (d)\n"
+ "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
"-disk ide,img=file[,hdx=a..dd][,type=disk|cdrom] \n"
" defaults are: hdx=a,type=disk \n"
"-disk scsi,img=file[,sdx=a..g][,type=disk|cdrom][,id=n] \n"
@@ -6910,7 +6910,7 @@ int main(int argc, char **argv)
case QEMU_OPTION_boot:
boot_device = optarg[0];
if (boot_device != 'a' &&
-#ifdef TARGET_SPARC
+#if defined(TARGET_SPARC) || defined(TARGET_I386)
// Network boot
boot_device != 'n' &&
#endif
@@ -7231,6 +7231,28 @@ int main(int argc, char **argv)
exit(1);
}
+#ifdef TARGET_I386
+ if (boot_device == 'n') {
+ for (i = 0; i < nb_nics; i++) {
+ const char *model = nd_table[i].model;
+ char buf[1024];
+ if (model == NULL)
+ model = "ne2k_pci";
+ snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
+ if (get_image_size(buf) > 0) {
+ option_rom[nb_option_roms] = strdup(buf);
+ nb_option_roms++;
+ break;
+ }
+ }
+ if (i == nb_nics) {
+ fprintf(stderr, "No valid PXE rom found for network device\n");
+ exit(1);
+ }
+ boot_device = 'c'; /* to prevent confusion by the BIOS */
+ }
+#endif
+
/* init the memory */
phys_ram_size = ram_size + vga_ram_size + bios_size;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-12-27 17:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-27 17:19 [Qemu-devel] [PATCH] Add -boot n option for x86 using PXE Anthony Liguori
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.