From: Anthony Liguori <aliguori@cs.utexas.edu>
To: qemu-devel@nongnu.org, Fabrice Bellard <fabrice@bellard.org>
Subject: [Qemu-devel] [PATCH] Add -boot n option for x86 using PXE
Date: Wed, 27 Dec 2006 11:19:57 -0600 [thread overview]
Message-ID: <4592AB3D.5000609@cs.utexas.edu> (raw)
[-- 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;
reply other threads:[~2006-12-27 17:20 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4592AB3D.5000609@cs.utexas.edu \
--to=aliguori@cs.utexas.edu \
--cc=fabrice@bellard.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).