diff options
| author | Jason Hobbs <jason.hobbs@calxeda.com> | 2011-08-31 10:37:30 -0500 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2011-10-17 22:25:35 +0200 | 
| commit | 06283a6401f652e709b7b27d02238d0c6f92cb0c (patch) | |
| tree | c3c841d8d464533e85674b41601fcb0a61e5ed47 /doc/README.pxe | |
| parent | e11938eabc17de35822de1a0a1102213c326f788 (diff) | |
| download | olio-uboot-2014.01-06283a6401f652e709b7b27d02238d0c6f92cb0c.tar.xz olio-uboot-2014.01-06283a6401f652e709b7b27d02238d0c6f92cb0c.zip | |
Add pxe command
Add pxe command, which is intended to mimic PXELINUX functionality.
'pxe get' uses tftp to retrieve a file based on UUID, MAC address or IP
address. 'pxe boot' interprets the contents of PXELINUX config like file
to boot using a specific initrd, kernel and kernel command line.
This patch also adds a README.pxe file - see it for more details on the
pxe command.
Signed-off-by: Jason Hobbs <jason.hobbs@calxeda.com>
Diffstat (limited to 'doc/README.pxe')
| -rw-r--r-- | doc/README.pxe | 240 | 
1 files changed, 240 insertions, 0 deletions
| diff --git a/doc/README.pxe b/doc/README.pxe new file mode 100644 index 000000000..9026d9c9d --- /dev/null +++ b/doc/README.pxe @@ -0,0 +1,240 @@ +/* + * Copyright 2010-2011 Calxeda, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program.  If not, see <http://www.gnu.org/licenses/>. + */ + +The 'pxe' commands provide a near subset of the functionality provided by +the PXELINUX boot loader. This allows U-boot based systems to be controlled +remotely using the same PXE based techniques that many non U-boot based servers +use. + +Commands +======== + +pxe get +------- +     syntax: pxe get + +     follows PXELINUX's rules for retrieving configuration files from a tftp +     server, and supports a subset of PXELINUX's config file syntax. + +     Environment +     ----------- +     'pxe get' requires two environment variables to be set: + +     pxefile_addr_r - should be set to a location in RAM large enough to hold +     pxe files while they're being processed. Up to 16 config files may be +     held in memory at once. The exact number and size of the files varies with +     how the system is being used. A typical config file is a few hundred bytes +     long. + +     bootfile,serverip - these two are typically set in the DHCP response +     handler, and correspond to fields in the DHCP response. + +     'pxe get' optionally supports these two environment variables being set: + +     ethaddr - this is the standard MAC address for the ethernet adapter in use. +     'pxe get' uses it to look for a configuration file specific to a system's +     MAC address. + +     pxeuuid - this is a UUID in standard form using lower case hexadecimal +     digits, for example, 550e8400-e29b-41d4-a716-446655440000. 'pxe get' uses +     it to look for a configuration file based on the system's UUID. + +     File Paths +     ---------- +     'pxe get' repeatedly tries to download config files until it either +     successfully downloads one or runs out of paths to try. The order and +     contents of paths it tries mirrors exactly that of PXELINUX - you can +     read in more detail about it at: + +     http://syslinux.zytor.com/wiki/index.php/Doc/pxelinux + +pxe boot +-------- +     syntax: pxe boot [pxefile_addr_r] + +     Interprets a pxe file stored in memory. + +     pxefile_addr_r is an optional argument giving the location of the pxe file. +     The file must be terminated with a NUL byte. + +     Environment +     ----------- +     There are some environment variables that may need to be set, depending +     on conditions. + +     pxefile_addr_r - if the optional argument pxefile_addr_r is not supplied, +     an environment variable named pxefile_addr_r must be supplied. This is +     typically the same value as is used for the 'pxe get' command. + +     bootfile - typically set in the DHCP response handler based on the +     same field in the DHCP respone, this path is used to generate the base +     directory that all other paths to files retrieved by 'pxe boot' will use. +     If no bootfile is specified, paths used in pxe files will be used as is. + +     serverip - typically set in the DHCP response handler, this is the IP +     address of the tftp server from which other files will be retrieved. + +     kernel_addr_r, initrd_addr_r - locations in RAM at which 'pxe boot' will +     store the kernel and initrd it retrieves from tftp. These locations will +     be passed to the bootm command to boot the kernel. These environment +     variables are required to be set. + +     fdt_addr - the location of a fdt blob. If this is set, it will be passed +     to bootm when booting a kernel. + +pxe file format +=============== +The pxe file format is nearly a subset of the PXELINUX file format; see +http://syslinux.zytor.com/wiki/index.php/PXELINUX. It's composed of one line +commands - global commands, and commands specific to labels. Lines begining +with # are treated as comments. White space between and at the beginning of +lines is ignored. + +The size of pxe files and the number of labels is only limited by the amount +of RAM available to U-boot. Memory for labels is dynamically allocated as +they're parsed, and memory for pxe files is statically allocated, and its +location is given by the pxefile_addr_r environment variable. The pxe code is +not aware of the size of the pxefile memory and will outgrow it if pxe files +are too large. + +Supported global commands +------------------------- +Unrecognized commands are ignored. + +default <label>     - the label named here is treated as the default and is +                      the first label 'pxe boot' attempts to boot. + +menu title <string> - sets a title for the menu of labels being displayed. + +menu include <path> - use tftp to retrieve the pxe file at <path>, which +                      is then immediately parsed as if the start of its +                      contents were the next line in the current file. nesting +                      of include up to 16 files deep is supported. + +prompt <flag>       - if 1, always prompt the user to enter a label to boot +                      from. if 0, only prompt the user if timeout expires. + +timeout <num>	    - wait for user input for <num>/10 seconds before +                      auto-booting a node. + +label <name>        - begin a label definition. labels continue until +                      a command not recognized as a label command is seen, +                      or EOF is reached. + +Supported label commands +------------------------ +labels end when a command not recognized as a label command is reached, or EOF. + +menu default        - set this label as the default label to boot; this is +                      the same behavior as the global default command but +                      specified in a different way + +kernel <path>       - if this label is chosen, use tftp to retrieve the kernel +                      at <path>. it will be stored at the address indicated in +                      the kernel_addr_r environment variable, and that address +                      will be passed to bootm to boot this kernel. + +append <string>     - use <string> as the kernel command line when booting this +                      label. + +initrd <path>       - if this label is chosen, use tftp to retrieve the initrd +                      at <path>. it will be stored at the address indicated in +                      the initrd_addr_r environment variable, and that address +                      will be passed to bootm. + +localboot <flag>    - Run the command defined by "localcmd" in the environment. +                      <flag> is ignored and is only here to match the syntax of +                      PXELINUX config files. + +Example +------- +Here's a couple of example files to show how this works. + +------------/tftpboot/pxelinux.cfg/menus/linux.list---------- +menu title Linux selections + +# This is the default label +label install +	menu label Default Install Image +	kernel kernels/install.bin +	append console=ttyAMA0,38400 debug earlyprintk +	initrd initrds/uzInitrdDebInstall + +# Just another label +label linux-2.6.38 +	kernel kernels/linux-2.6.38.bin +	append root=/dev/sdb1 + +# The locally installed kernel +label local +	menu label Locally installed kernel +	append root=/dev/sdb1 +	localboot 1 +------------------------------------------------------------- + +------------/tftpboot/pxelinux.cfg/default------------------- +menu include pxelinux.cfg/menus/base.menu +timeout 500 + +default linux-2.6.38 +------------------------------------------------------------- + +When a pxe client retrieves and boots the default pxe file, +'pxe boot' will wait for user input for 5 seconds before booting +the linux-2.6.38 label, which will cause /tftpboot/kernels/linux-2.6.38.bin +to be downloaded, and boot with the command line "root=/dev/sdb1" + +Differences with PXELINUX +========================= +The biggest difference between U-boot's pxe and PXELINUX is that since +U-boot's pxe support is written entirely in C, it can run on any platform +with network support in U-boot. Here are some other differences between +PXELINUX and U-boot's pxe support. + +- U-boot's pxe does not support the PXELINUX DHCP option codes specified +  in RFC 5071, but could be extended to do so. + +- when U-boot's pxe fails to boot, it will return control to U-boot, +  allowing another command to run, other U-boot command, instead of resetting +  the machine like PXELINUX. + +- U-boot's pxe doesn't rely on or provide an UNDI/PXE stack in memory, it +  only uses U-boot. + +- U-boot's pxe doesn't provide the full menu implementation that PXELINUX +  does, only a simple text based menu using the commands described in +  this README.  With PXELINUX, it's possible to have a graphical boot +  menu, submenus, passwords, etc. U-boot's pxe could be extended to support +  a more robust menuing system like that of PXELINUX's. + +- U-boot's pxe expects U-boot uimg's as kernels.  Anything that would work +  with the 'bootm' command in U-boot could work with the 'pxe boot' command. + +- U-boot's pxe doesn't recognize initrd options in the append command - you +  must specify initrd files using the initrd command. + +- U-boot's pxe only recognizes a single file on the initrd command line.  It +  could be extended to support multiple. + +- in U-boot's pxe, the localboot command doesn't necessarily cause a local +  disk boot - it will do whatever is defined in the 'localcmd' env +  variable. And since it doesn't support a full UNDI/PXE stack, the +  type field is ignored. + +- the interactive prompt in U-boot's pxe only allows you to choose a label +  from the menu.  If you want to boot something not listed, you can ctrl+c +  out of 'pxe boot' and use existing U-boot commands to accomplish it. |