Source to arch/i386/netboot/readme
Ethernet boot prom code.
This is code that can be burned into an eprom and installed in an
ethernet card. It uses the extension facilities of the bios to to boot
a kernel via the network.
Netboot uses bootp or rarp to determine its ip address and tftps a
designated kernel from a server. You should be running a daemon for
either bootp or rarp to service requests from this client. If you are
using bootp, the boot file name and the gateway (if necessary) will
also be transmitted to the client. If you use rarpd, the boot file
name is synthesized by this boot code from the eight hexadecimal
digits that comprise the IP address of the client and an extension of
"386bsd". If you use rarp, the rarp server must also be the tftp
If you have configured both bootp and rarpd into the boot prom, the
response from the first host to respond via either protocol will be
This code was developed using GNU as 2.1 and GNU cc version 2.3.3,
running under 386bsd. Pre 2.0 versions of GNU as might have trouble
with some syntax. Testing was done with a SMC Elite16 and 16k eproms.
Check the configurable parameters in Makefile.
Check the configurable parameters in the ethernet driver source for
the card you are using:
- in wd80x3.c: WD_BASEREG, WD_BASEMEM (irqs not used)
If you wish, you can test the binary (boot.bin) by copying it to a
floppy with the dosload.exe program and execute the boot code from the
Burn the resultant binary (boot.bin) into an eprom and install it in
the ethernet card.
Decide which protocol (bootp or rarp) to use on a server; set up that
Setting up a bootp server entails creating a bootpd client
configuration file. The format is similar to that of printcap. An
entry looks something like:
Setting up a rarpd server entails creating an ethernet/ip address
resolution file '/etc/ethers' with a line for each netboot client in
If you don't know the ethernet address, boot the client with the eprom
installed; the ethernet address of the card will be displayed.
Set up tftpd on a server. Check '/etc/inetd.conf'; there should be a
line that starts something like:
tftp dgram udp wait root ...
perhaps commented out.
Build a kernel that is capable of operating via NFS. Martin Renters
released some patches and a kernel configuration program that work
nicely (comp.os.386bsd.development around March 22, 1993); they should
be around somewhere. If you can't find them, I can email you a copy.
Make the kernel available via tftp under one of the names which this
code will use to look for the kernel. If you are using bootp, you can
specify the name as a bootp client configuration parameter. If you
don't specify the name, or if you are using rarp the this code will
synthesize the name using its client's IP address. The hexadecimal
version of the client's IP address with the extension '.386bsd' is the
Create the exportable nfs mount points for which this kernel will use
and load them with necessary files (the base distribution, ...).
Export them so they can be mounted by this kernel when it boots from
the client IP address.
At any time the escape key can be struck to gain entrance to the
interactive monitor. There is a menu of monitor commands that can be
invoked to customize a boot operation.
When Martin Renter's patches are applied to netbsd 0.8, there will be
one failure (pmap.c). Ignore it, the relevant code has already been
I had some small problems with getfh(2) as used in the nfs configuring
program - I suspect the problem is a bug in SunOS 4.1.1 - if you have
similar problems, I can email you my gross hack workaround.
As noted by Mr. Renters, advisory flock()ing is not supported - this
breaks some programs. The first broken utility you will likely
encounter is vipw(1). The others: passwd, dump, ar, mail, tip, lpr,
You should examine your rc script and make appropriate changes to the
boot up sequence.
Here are the steps I took to bring netbsd 0.8 up for the client sams-1
using the host dinah in the domain lerc.nasa.gov.
- Create the /dev/vga device.
- Create some ptys.
- Create /etc/fstab to contain:
dinah:/home/386bsd-root / nfs rw
dinah:/home/386bsd-swap none swap rw
in it for the root and swap.
- Edit /etc/rc; the line 'mount -a -t nonfs' is changed to:
mount -a -t nonfs,swap
- Edit /etc/myname to contain
- Edit /etc/hosts to contain:
127.0.0.1 localhost loghost
and delete the other stuff in it.
- Create /etc/resolv.conf to contain:
where the two addresses are those of some name servers in my domain.
There are, of course, the two alternatives of using just the /etc/hosts
file, or using named.
- Create /etc/mygate to contain:
which is the IP address of my gateway.
- Re-symlink /etc/localtime to the correct zone.
-handle small memory configuration
-return to bios correctly
-remove old Phys... stuff; relics of real mode prom version
-accept bootd extension items & pass as args, modify kernel to
init nfs_diskless from args. Need:
myif [local] [bootp]
swap_saddr [local] [bootp]
root_saddr [local] [bootp]
A tight squeeze, passing all necessary info in one bootp packet.
Please send me any improvements you make to this code. It will be
Jim McKim ([email protected])