oskit/oskit-20020317/boot/pxe
dzavalishin f85eb2576f import 2016-02-19 15:02:31 +03:00
..
bootinfo import 2016-02-19 15:02:31 +03:00
GNUmakefile.in import 2016-02-19 15:02:31 +03:00
GNUmakerules import 2016-02-19 15:02:31 +03:00
README import 2016-02-19 15:02:31 +03:00
crt0.S import 2016-02-19 15:02:31 +03:00
decls.h import 2016-02-19 15:02:31 +03:00
main.c import 2016-02-19 15:02:31 +03:00
malloc.c import 2016-02-19 15:02:31 +03:00
multiboot.c import 2016-02-19 15:02:31 +03:00
putchar.c import 2016-02-19 15:02:31 +03:00
pxe.h import 2016-02-19 15:02:31 +03:00
udp.c import 2016-02-19 15:02:31 +03:00
udp.h import 2016-02-19 15:02:31 +03:00

README

Directories: oskit/boot/pxe
Target: pxeboot
Documentation: none
Original Code Source:
	Flux Research Group, University of Utah.
	Some code derived from the linux boot adaptor.
Description:

This directory implements a PXE compliant boot loader. It is intended
to be used on machines that speak the PXE boot protocol, in
conjunction a suitable DHCP server, and a suitable DHCP proxy server
that tells the machine in question where to TFTP "pxeboot" from.

***************************************************************************
The PXE specification says that the boot program must be less that 32K
in size. So, you must configure with --disable-asserts and be sure
*not* to use --enable-debug! Otherwise, your boot program will be more
than 35K, and it will not work!
***************************************************************************

Once loaded and running, pxeboot will send out a BOOTWHAT UDP request
packet to a server running on the same machine as the Proxy DHCP
server. The format is defined in oskit/oskit/boot/bootwhat.h, and
defines a very simple protocol for telling the pxeboot kernel what to
do next.  Either boot the default MBR, a specific partition of the
MBR, a specific systemid of the MBR, or a multiboot image whose path
is specified in the packet. All errors in the pxeboot program are
resolved in the same manner; the default MBR is loaded and booted.

A good tutorial on how to set up all this stuff can found at:

	http://www.nilo.org/remoteboot/Remote-Boot.html

In summary though:

* You need a DHCP server that can provide the "dhcp-class-identifier"
  option, as in:

	option dhcp-class-identifier "PXEClient";

  Version 2 of DHCP from the ISC will do nicely (www.isc.org).

* You will need a Proxy DHCP server that can return the rest of the stuff
  the PXE ROM wants. We took the Proxy from www.bpbatch.org and
  modified it a bit for FreeBSD 3.0. Let us know if you need that.
  The Proxy will respond with a DHCP format packet that tells the PXE
  where to TFTP the pxeboot kernel from.

* Once the pxeboot kernel is running, it will query our own little
  bootinfo server to find out what to do next. The protocol is very
  simple, sending a UDP packet to a port defined in bootwhat.h, which
  returns a packet. How you implement that server is up to you, but as
  a trivial example of how to get started, see bootinfo/bootinfo.c.