Table of Contents

Etherboot image types

Using rom-o-matic, or compiling Etherboot yourself, you will be able to generate different file types, depending on your needs.

Those file types shall be explained here:

Floppy bootable ROM image (.zdsk)

These files are meant to be used on floppy disks. If you obtained such a file, copy it to a floppy: Under Linux,

cat etherboot.zdsk > /dev/fd0

will mostly do the trick. Programs for windows are also available; raw disk access is an add-on-feature on windows, which rawrite can be used for. RedHat has an explanation of rawrite usage.

Those files can also be used to run Etherboot inside VMware. Bochs and qemu might also work.

Binary ROM image (.zrom)

Binary ROM images are meant to be burned into a ROM chip, which then is set into the ROM socket on a network card.

Those files can also be patched into a Mainboard BIOS, at least for Modular Award and AMI BIOSes this has been done successfully.

The advantages of adding EtherBoot into a mainboard BIOS:

Read this article to find out how to patch Etherboot into a Mainboard BIOS.

Information about using .zrom files in VMware and bochs is also available.

A Codebreakers-Journal article describes the whereabouts of Option ROMs in the PC boot process.

ISO bootable images (.iso, .liso)

Those files are meant to be burnt onto a CD-ROM. Although very small (what a waste of disk space), there might be situations where PCs can reasonably be booted from CD-ROM instead of floppy disk, to run Etherboot later.

The difference between those two lies in the mechanism of disk access (and details are to be found in the source, if you really need to know). Try one, if it does not work with your BIOS, try the others. *FIXME* A recommendation of the method rather expected to work would be nice.

LILO/GRUB/SysLinux files (.zlilo)

Those files are meant to be loaded by any of those bootloaders. To the bootloader, it will look like a Linux kernel, so just go ahead as you would with inserting another kernel file into your bootmanager configuration.

Using lilo on a floppy

Marty Connor wrote an explanation on how to use .zlilo files on a floppy:

First, you need a formatted floppy.  I would recommend doing:

     fdformat /dev/fd0H1440

Which will low-level format a standard double-sided 1.44M floppy disk.
If your floppy is already DOS formatted, you can probably skip this  

Next, you can do:

     mformat -f 1440 a:

Which puts a DOS filesystem on the floppy ( and makes sure the floppy  
geometry is known :) ).

Next, let's use SYSLINUX to make the floppy bootable:

     syslinux /dev/fd0

After this step, you have a bootable floppy, but nothing to boot.   
Let's fix that.

First we'll need something to boot.  Make a .zlilo file using rom-o- or, since you're writing a driver, something like:

     make bin/mynic.zlilo

Let's put it on the DOS floppy, using an 8.3 format name:

     mcopy bin/mynic.zlilo a:mynic.zli

Now, we just need to tell SYSLINUX to boot our image.  For that, you  
need a file called "syslinux.cfg" on the floppy.

So first, create a text file in emacs, vi, or whatever your favorite  
text editor is, and put the following three lines in it:

     DEFAULT mynic.zli
     LABEL mynic.zli
     KERNEL mynic.zli

Save the file as syslinux.cfg.

Now, copy the file to the floppy with:

     mcopy syslinux.cfg a:

You can do:

     mdir a:

to see the contents of your floppy:

     Volume in drive A has no label
     Volume Serial Number is 063C-F9DA
     Directory for A:/

     ldlinux  sys      8236 2006-06-21  10:43
     mynic    zli     25162 2006-06-21  10:50  mynic.zli
     SYSLINUX CFG        57 2006-06-21  10:58  syslinux.cfg
             4 files              33 512 bytes
                               1 422 336 bytes free

You now have a bootable DOS formatted floppy that you can put into  
your test machine, and it should load and run your .zlilo formatted  
Etherboot image.

One of the nice things about this is that when you want to update  
your floppy, you can just do:

     mcopy mynic.zlilo a:mynic.zli

and the floppy is ready to go.  It makes for easy testing.

Of course, if your testing machine has a hard drive, you can use GRUB  
or LILO to load an Etherboot .zlilo (or .lilo) image.  LILO needs to  
be run again if you copy a new image onto the media, because it  
stores the disk location of the file.  GRUB and SYSLINUX find it by  
name, so just putting it in the right place with the right name is  

I hope this message is helpful.  It probably should be on the  
Etherboot wiki or in an FAQ. (anybody want to do that? :)

Corrections and suggestions to this recipe are welcome.  I am sure  
there are other ways to achieve the same effect.

In particular, if the syslinux.cfg file contained:

     PROMPT 1
     TIMEOUT 30
     DEFAULT mynic.zli
     LABEL mynic.zli
     KERNEL mynic.zli

SYSLINUX would display a "boot: " prompt for 3 seconds before  
booting, and allow you to type in a filename instead of "mynic.zli".   
This might be useful for testing alternative images without deleting  
the original one.

Please let us know how things go, or if we can offer other  
suggestions to make your development task easier.


/ Marty /

EtherBoot from USB flash

An EtherBoot initial load from USB flash media is quite staightforward provided of course that your BIOS can boot from USB in the first place. A modern machine will probably be able to do this.

  1. BIOS
  2. USB master boot record
  3. USB partition boot record
  5. EtherBoot
  6. Linux kernel

Your BIOS should really be able to boot from any sensible arrangement of partitions and boot sectors, but it might insist that a ZIP DRIVE geometry be used.




Once Linux is running with USB storage support, an inserted USB key will appear as a SCSI drive and be called something like /dev/sda, /dev/sdb, /dev/sdc,… in the following guide, the key is referred to as /dev/sda.

Be certain which device name refers to your flash key as this device is about to be irrevocably erased

USB Flash EtherBoot - General hard disk boot geometry

Module                  Size  Used by
sd_mod                 19472  0 
usb_storage            35588  0 
libusual               14864  1 usb_storage
uhci_hcd               25100  0 
usbcore               141956  4 usb_storage,libusual,uhci_hcd
sda: sda1
sd 2:0:0:0: Attached scsi removable disk sda
dd if=/dev/zero of=/dev/sda bs=1k count=128
sfdisk /dev/sda [ENTER for defaults then (w)rite partition table]
Device Boot    Start     End   #cyls    #blocks   Id  System
/dev/sda1          0+   1021    1022-    124683+  83  Linux
/dev/sda2          0       -       0          0    0  Empty
/dev/sda3          0       -       0          0    0  Empty
/dev/sda4          0       -       0          0    0  Empty
sfdisk /dev/sda -A1
 mkdosfs /dev/sda1
 syslinux /dev/sda1
root@shark(/flash)# ls
ldlinux.sys  r8169.zli  syslinux.cfg
root@shark(/flash)# cat syslinux.cfg
default r8169.zli

USB Flash EtherBoot - ZIP drive geometry

An older machine may insist on a geometry which appears to your BIOS as a standard ZIP drive having 64 heads and 32 sectors per track. The number of cylinders depends on the capacity of the drive. A ZIP drive boots from partition 4.

mkdiskimage -4 /dev/sda 0 64 32
syslinux /dev/sda4

More recipies can be found here, with another source of information here.

PXE bootstrap loader (.zpxe)

.zpxe files are meant to be loaded BY a PXE ROM, so that Etherboot can replace the PXE functionality. Please read also A method to work more than one stage of PXE with stupid DHCP servers.

DOS executable (.com)

.com files are straightforward: Boot DOS, execute (except that DOS only has 8.3 filenames…). You will have to find out though wether etherboot works with EMM386 loaded, for example.

Hard disk partition image (.zhd)


ELF Rom images (.elf) - generic / LinuxBIOS