Add -boot n option for x86 using PXE, by Anthony Liguori.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2293 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-01-05 17:41:07 +00:00
parent 9ae0255520
commit eec85c2a0d
4 changed files with 35 additions and 6 deletions

View File

@ -78,7 +78,8 @@ install: all $(if $(BUILD_DOCS),install-doc)
$(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)" $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
mkdir -p "$(DESTDIR)$(datadir)" mkdir -p "$(DESTDIR)$(datadir)"
for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ 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)"; \ $(INSTALL) -m 644 $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(datadir)"; \
done done
ifndef CONFIG_WIN32 ifndef CONFIG_WIN32

View File

@ -14,3 +14,9 @@
- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable - OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable
firmware implementation. The goal is to implement a 100% IEEE firmware implementation. The goal is to implement a 100% IEEE
1275-1994 (referred to as Open Firmware) compliant firmware. 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/

View File

@ -219,9 +219,9 @@ Use @var{file} as CD-ROM image (you cannot use @option{-hdc} and and
@option{-cdrom} at the same time). You can use the host CD-ROM by @option{-cdrom} at the same time). You can use the host CD-ROM by
using @file{/dev/cdrom} as filename (@pxref{host_drives}). using @file{/dev/cdrom} as filename (@pxref{host_drives}).
@item -boot [a|c|d] @item -boot [a|c|d|n]
Boot on floppy (a), hard disk (c) or CD-ROM (d). Hard disk boot is Boot on floppy (a), hard disk (c), CD-ROM (d), or Etherboot (n). Hard disk boot
the default. is the default.
@item -disk ide,img=file[,hdx=a..dd][,type=disk|cdrom] @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 Use @var{file} as the IDE disk/CD-ROM image. The defaults are: hdx=a,type=disk

26
vl.c
View File

@ -6234,7 +6234,7 @@ void help(void)
"-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n" "-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" "-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" "-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" "-disk ide,img=file[,hdx=a..dd][,type=disk|cdrom] \n"
" defaults are: hdx=a,type=disk \n" " defaults are: hdx=a,type=disk \n"
"-disk scsi,img=file[,sdx=a..g][,type=disk|cdrom][,id=n] \n" "-disk scsi,img=file[,sdx=a..g][,type=disk|cdrom][,id=n] \n"
@ -7056,7 +7056,7 @@ int main(int argc, char **argv)
case QEMU_OPTION_boot: case QEMU_OPTION_boot:
boot_device = optarg[0]; boot_device = optarg[0];
if (boot_device != 'a' && if (boot_device != 'a' &&
#ifdef TARGET_SPARC #if defined(TARGET_SPARC) || defined(TARGET_I386)
// Network boot // Network boot
boot_device != 'n' && boot_device != 'n' &&
#endif #endif
@ -7378,6 +7378,28 @@ int main(int argc, char **argv)
exit(1); 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 */ /* init the memory */
phys_ram_size = ram_size + vga_ram_size + bios_size; phys_ram_size = ram_size + vga_ram_size + bios_size;