How to net boot from a small/flash disk
Copyright © 2003 Herbert Hanewinkel, Neuried
I had a DIMM PC board from Jumtpec with ethernet, floppy and a 16MB flask disk but without code for net booting in BIOS-ROM. With a .zdsk image from ROM-O-MATIC for the ethernet chip net boot worked fine from a floppy disk, but I wanted to avoid using a floppy for booting.
The .com image available from ROM-O-MATIC seemed to be the solution for my problem.
I had DOS already installed on the flash disk and tried to run the .com image from autostart.bat The system crashed at random soon after starting the .com image. This happened even with an empty config.sys.
Checking the source code of the .com image header I no longer believe that it ever works. At the time the .com image executes DOS has hooked on the timer interrupt and some other BIOS interrupts. But the Etherboot ROM code is not a DOS program, it writes to fixed addresses in RAM overiding/destroying DOS. Restoring the BIOS timer interrupt before executing the ROM code improved the situation. The Etherboot code completed the download of the boot image, but crashed on executing it.
I gave up on it and can only recommend
Don't waste your time with a .com image from ROM-O-MATIC.
The boot code of the .zdsk image doesn't work from a hardisk.
The .com code fails.
How to solve the problem?
Searching for another solution I found the boot1a.S module from Luigi Rizzo in the Etherboot source tree. A boot code that can boot a floppy as well as a hard disk.The solution is to replace the boot code (first 512 bytes) at the beginning of the zdsk image with the boot code from boot1a.
It compiled fine on my FreeBSD system and ... it crashed.
The directive to copy it in front of the .zrom code is wrong!!!
The .zrom images have a header as well and boot1a must be followed by the Etherboot ROM code without any header.
- I created two partitions on the flash disk, a normal DOS partition and a small empty partition. I set the partition type for the second partition to type 0x1f as explained below.
- On the DOS partition I installed a standard DOS system.
- I copied the .zdsk image to the empty partition.
- I replaced the boot block of the partition with the boot1a code.
Luigi Rizzo had choosen 1 for the partition type in his boot1a code. Because this declares the partition as a type "primary FAT12" partition I modified it (symbol BSD_PRT) to 0x1f to avoided conflicts with the primary DOS partition on the flash disk.
- I installed a bootmanager (Booteasy from FreeBSD) in the master boot record and made the second partition the active partition.
- The DIMM PC can boot automatically over the net.
- The floppy drive is no longer required for net booting.
- The flash disk is still available for a local (bootable) DOS system.