Using Etherboot inside the VMware BIOS

The following mail has been posted on June 26, 2006 by Borg Number One in the EtherBoot mailing list.

EtherBoot ROM in VMware and Bochs - The tutorial

(updated on 07.07.2006)

Declarations

  • Expansion ROM / ExpansionROM , Extension ROM / ExtensionROM , Option ROM / OptionROM , Extension BIOS / ExtensionBIOS

… describes a binary executable in a special format, which can be loaded and started by mainboard's System BIOS This binary executably is genereally stored in the (Flash)-EEPROM of a graphics card, network card, RAID controller and inside a modular System BIOS / module based BIOS.

Introduction

In the past and in the present, many people were/are interested in using EtherBoot for virtual machines, like VMware or Bochs:

http://sourceforge.net/mailarchive/forum.php?thread_id=11504279&forum_id=48022 http://sourceforge.net/mailarchive/forum.php?thread_id=11529915&forum_id=48022 http://sourceforge.net/search/?ml_name=etherboot-discuss&type_of_search=mlists&group_id=4233&words=vmware http://sourceforge.net/search/?ml_name=etherboot-discuss&type_of_search=mlists&group_id=4233&words=bochs

Using Virtual Machines is a really good and really fast way to test and improve EtherBoot (and other extension ROM projects). But in previous virtual machine related requests in the EtherBoot Mailing Lists, I could see that only time consuming methods are known.

Already known general method:

Currently, EtherBoot developers/testers who use VMware or Bochs, have to take a certain time to:

  • put EtherBoot to a floppy disk / CD or into a flopy disk image / CD image
  • store the CD image / floppy disk image to a file
  • start Bochs/VMware and wait for the CD / floppy disk boot process

But there are faster/alternative methods to use EtherBoot in VMware and Bochs.

In the last years, I acquired many BIOS and Option ROM related skills with real hardware and VMware and I also figured out different hints/undocumented VMware switches which were not published anywhere before.

Now, I will show you the methods to make EtherBoot testing/developing faster and easier:

Alternative Methods:

1. Putting EtherBoot into the VMware BIOS

VMware is currently the only PC emulator with a commercial modular BIOS which can be easily modified.
Beside bochs, VMware is currently the best emulator for BIOS related developments, like building/testing user-made Option ROMs ideas/projects.


( Inside the “Microsoft Virtual PC” executable you can find an AMIBIOS resource which can also be modified with AMIBIOS modification utilities.
But there are huge restrictions:

  • never try any Option ROM / Extension ROM experiments –> after the modification Microsoft's Virtual PC hangs while P.O.S.T.
  • Virtual PC is generally just for Windows. )


It is recommended to read the message threads below for an introduction:

After this, compile or download an EtherBoot ROM for the PCNET32 adapter (Vendor ID: 0x1022, DeviceID: 0x2000), because VMware emulates an AMD LANCE / PCNET adapter by default.

After downloading/compiling the AMD LANCE / PCNET32 EtherBoot ROM, open the extracted VMware BIOS file with the Phoenix BIOS Editor and add the EtherBoot ROM as a new Option ROM.

Next, save the modified BIOS file to a certain place and keep the path/filename in mind.

The last step is to add following line:

bios440.filename = "path to the modified BIOS file/BIOS file name"

…to VMware's configuration file.

2. Using EtherBoot as replacement for VMware's build-in network boot ROMs

VMware usually emulates an AMD LANCE network interface card. But with some non-official switches, VMware 5 is able to emulate three different network card types:

  • AMD Am79C970A - PCnet LANCE PCI Ethernet Controller
  • Intel E1000
  • VMXNET - VMware PCI Ethernet Adapter

In VMware, each emulated network card has its own emulated network Boot ROM. In this case the VMware developers decided to use the Intel PXE as network boot ROM code.

So, when it is already possible to choose between three different emulated network cards, why not also getting the control of their emulated BOOTROM / BOOTROM content? :)

And why not replacing the default (PXE) network boot ROM with EtherBoot? :)

The answer is easy: nobody knew the undocumented network related switches in VMware's configuration file before.

Well, after playing/testing with VMware, I could see that I also figured out sine new undocumented switches. Most of them were sent to Sanbarrow. But I could see that I also figured out some switches which are usefully for Option ROM / Extension ROM testing and usefully for EtherBoot development.

Here are the results:

First, download or compile EtherBoot ROM for one or all of following network cards:

  • a)
    e1000:e1000-82545em-copper -- [0x8086,0x100f]
    ("Intel E1000", Vendor ID: 8086 , Device ID: 100F)
  • b)
    pcnet32:pcnet32 -- [0x1022,0x2000]
    ("AMD Am79C970A - PCnet LANCE PCI Ethernet Controller", Vendor ID:  1022 , Device ID: 2000 )


  • ( Hint: There is currently no: "c)", because EtherBoot sourcecode for the
      VMXNET - VMware PCI Ethernet Adapter [Vendor ID:  15AD , Device ID: 0720] does not exist at the time. )

Second, open your VMware configuration file and add following lines:

ethernet0.present = "TRUE"
ethernet0.virtualDev = "e1000"
e1000bios.filename = "path/etherboot-for-E1000"
ethernet0.opromsize = 70144

ethernet1.present = "TRUE"
ethernet1.virtualDev = "vlance"
nbios.filename = "path/etherboot-for-AMD-lanCE"

I spent nearly two hours to also prepare a decent animation, which shows the described method. :)

PS: VMware is also able to use/load larger Option ROMs (32KB and more) as network BootROM. I could successfully configure and use ” ROMOS ” (64KB) as VMware E1000 network BootROM replacement too.

( e1000bios.filename = "C:\BIOS\romospci.bin" )

3. Putting EtherBoot into Bochs

The PC emulator (x86 emulator): “Bochs” generally emulates a NE2000-compatible network card. Because Bochs is also able to use additional Option ROMs, you can simply use this feature for EtherBoot testing and development.

After compiling or downloading a suitable EtherBoot ROM (for a NE2000-compatible Ethernet adapter), just add following line to a Bochs configuration file:

optromimage1: file=../etherboot.rom, address=0xd0000

Regarding to: “loading Option ROMs”, the current Bochs releases use an emulated BIOS which is not squeamish like general and commercial (Award/AMI/Phoenix) BIOS code. This means that the Option ROM header (correct PCI vendor / Device ID / PCI class ID) will not be checked by Bochs' BIOS.
So, Bochs can load and run any kind of ISA/PCI Option ROMs without changing / modifying the Option ROM header before.


Used links in the article and further interesting links:

  • b)
    • EtherBoot Option ROM in VMware and further Option ROM related screenshots / animations

[No longer available]

This article was created to help users, who want to use EtherBoot in VMware and/or bochs. Furthermore it shows fast methods to test new added EtherBoot features with emulators / virtual machines. I decided to publish this article in the EtherBoot Mailing List, because this is the right place.

The Etherboot Wiki author Anselm (username: “Stockholm”) was allowed to add this article to the the EtherBoot Wiki.

If you want to provide this article on other sites / in computer magazines, then get in contact with me before. Unauthorized publication on other sites, outside the EtherBoot Mailing List and/or in different print media is prohibited.

If you have questions referring to EtherBoot Option ROMs or Option ROMs in general, then do not hesitate to ask your question here in the EtherBoot Mailing List.

Borg Number One

–BIOS Tool Collection–

–BIOS modification and realtime desktop help service–

[No longer available]

–BIOS Logo Gallery–

[No longer available]