Print this page
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
    loader: pxe receive cleanup
    9475 libefi: Do not return only if ReceiveFilter
    installboot: should support efi system partition
    8931 boot1.efi: scan all display modes rather than
    loader: spinconsole updates
    loader: gfx experiment to try GOP Blt() function.
    sha1 build test
    loader: add sha1 hash calculation
    common/sha1: update for loader build
    loader: biosdisk rework
    uts: 32-bit kernel FB needs mapping in low memory
    uts: add diag-device
    uts: boot console mirror with diag-device
    uts: enable very early console on ttya
    kmdb: add diag-device as input/output device
    uts: test VGA memory exclusion from mapping
    uts: clear boot mapping and protect boot pages test
    uts: add dboot map debug printf
    uts: need to release FB pages in release_bootstrap()
    uts: add screenmap ioctl
    uts: update sys/queue.h
    loader: add illumos uts/common to include path
    loader: tem/gfx font cleanup
    loader: vbe checks
    uts: gfx_private set KD_TEXT when KD_RESETTEXT is
    uts: gfx 8-bit update
    loader: gfx 8-bit fix
    loader: always set media size from partition.
    uts: MB2 support for 32-bit kernel
    loader: x86 should have tem 80x25
    uts: x86 should have tem 80x25
    uts: font update
    loader: font update
    uts: tem attributes
    loader: tem.c comment added
    uts: use font module
    loader: add font module
    loader: build rules for new font setup
    uts: gfx_private update for new font structure
    uts: early boot update for new font structure
    uts: font update
    uts: font build rules update for new fonts
    uts: tem update to new font structure
    loader: module.c needs to include tem_impl.h
    uts: gfx_private 8x16 font rework
    uts: make font_lookup public
    loader: font rework
    uts: font rework
    9259 libefi: efi_alloc_and_read should check for PMBR
    uts: tem utf-8 support
    loader: implement tem utf-8 support
    loader: tem should be able to display UTF-8
    7784 uts: console input should support utf-8
    7796 uts: ldterm default to utf-8
    uts: do not reset serial console
    uts: set up colors even if tem is not console
    uts: add type for early boot properties
    uts: gfx_private experiment with drm and vga
    uts: gfx_private should use setmode drm callback.
    uts: identify FB types and set up gfx_private based
    loader: replace gop and vesa with framebuffer
    uts: boot needs simple tem to support mdb
    uts: boot_keyboard should emit esc sequences for
    uts: gfx_private FB showuld be written by line
    kmdb: set terminal window size
    uts: gfx_private needs to keep track of early boot FB
    pnglite: move pnglite to usr/src/common
    loader: gfx_fb
    ficl-sys: add gfx primitives
    loader: add illumos.png logo
    ficl: add fb-putimage
    loader: add png support
    loader: add alpha blending for gfx_fb
    loader: use term-drawrect for menu frame
    ficl: add simple gfx words
    uts: provide fb_info via fbgattr dev_specific array.
    uts: gfx_private add alpha blending
    uts: update sys/ascii.h
    uts: tem OSC support (incomplete)
    uts: implement env module support and use data from
    uts: tem get colors from early boot data
    loader: use crc32 from libstand (libz)
    loader: optimize for size
    loader: pass tem info to the environment
    loader: import tem for loader console
    loader: UEFI loader needs to set ISADIR based on
    loader: need UEFI32 support
    8918 loader.efi: add vesa edid support
    uts: tem_safe_pix_clear_prom_output() should only
    uts: tem_safe_pix_clear_entire_screen() should use
    uts: tem_safe_check_first_time() should query cursor
    uts: tem implement cls callback & visual_io v4
    uts: gfx_vgatext use block cursor for vgatext
    uts: gfx_private implement cls callback & visual_io
    uts: gfx_private bitmap framebuffer implementation
    uts: early start frame buffer console support
    uts: font functions should check the input char
    uts: font rendering should support 16/24/32bit depths
    uts: use smallest font as fallback default.
    uts: update terminal dimensions based on selected
    7834 uts: vgatext should use gfx_private
    uts: add spacing property to 8859-1.bdf
    terminfo: add underline for sun-color
    terminfo: sun-color has 16 colors
    uts: add font load callback type
    loader: do not repeat int13 calls with error 0x20 and
    8905 loader: add skein/edonr support
    8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Revert "NEX-16819 loader UEFI support"
This reverts commit ec06b9fc617b99234e538bf2e7e4d02a24993e0c.
Reverting due to failures in the zfs-tests and the sharefs-tests
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
    loader: pxe receive cleanup
    9475 libefi: Do not return only if ReceiveFilter
    installboot: should support efi system partition
    8931 boot1.efi: scan all display modes rather than
    loader: spinconsole updates
    loader: gfx experiment to try GOP Blt() function.
    sha1 build test
    loader: add sha1 hash calculation
    common/sha1: update for loader build
    loader: biosdisk rework
    uts: 32-bit kernel FB needs mapping in low memory
    uts: add diag-device
    uts: boot console mirror with diag-device
    uts: enable very early console on ttya
    kmdb: add diag-device as input/output device
    uts: test VGA memory exclusion from mapping
    uts: clear boot mapping and protect boot pages test
    uts: add dboot map debug printf
    uts: need to release FB pages in release_bootstrap()
    uts: add screenmap ioctl
    uts: update sys/queue.h
    loader: add illumos uts/common to include path
    loader: tem/gfx font cleanup
    loader: vbe checks
    uts: gfx_private set KD_TEXT when KD_RESETTEXT is
    uts: gfx 8-bit update
    loader: gfx 8-bit fix
    loader: always set media size from partition.
    uts: MB2 support for 32-bit kernel
    loader: x86 should have tem 80x25
    uts: x86 should have tem 80x25
    uts: font update
    loader: font update
    uts: tem attributes
    loader: tem.c comment added
    uts: use font module
    loader: add font module
    loader: build rules for new font setup
    uts: gfx_private update for new font structure
    uts: early boot update for new font structure
    uts: font update
    uts: font build rules update for new fonts
    uts: tem update to new font structure
    loader: module.c needs to include tem_impl.h
    uts: gfx_private 8x16 font rework
    uts: make font_lookup public
    loader: font rework
    uts: font rework
    libefi: efi_alloc_and_read should check for PMBR
    uts: tem utf-8 support
    loader: implement tem utf-8 support
    loader: tem should be able to display UTF-8
    7784 uts: console input should support utf-8
    7796 uts: ldterm default to utf-8
    uts: do not reset serial console
    uts: set up colors even if tem is not console
    uts: add type for early boot properties
    uts: gfx_private experiment with drm and vga
    uts: gfx_private should use setmode drm callback.
    uts: identify FB types and set up gfx_private based
    loader: replace gop and vesa with framebuffer
    uts: boot needs simple tem to support mdb
    uts: boot_keyboard should emit esc sequences for
    uts: gfx_private FB showuld be written by line
    kmdb: set terminal window size
    uts: gfx_private needs to keep track of early boot FB
    pnglite: move pnglite to usr/src/common
    loader: gfx_fb
    ficl-sys: add gfx primitives
    loader: add illumos.png logo
    ficl: add fb-putimage
    loader: add png support
    loader: add alpha blending for gfx_fb
    loader: use term-drawrect for menu frame
    ficl: add simple gfx words
    uts: provide fb_info via fbgattr dev_specific array.
    uts: gfx_private add alpha blending
    uts: update sys/ascii.h
    uts: tem OSC support (incomplete)
    uts: implement env module support and use data from
    uts: tem get colors from early boot data
    loader: use crc32 from libstand (libz)
    loader: optimize for size
    loader: pass tem info to the environment
    loader: import tem for loader console
    loader: UEFI loader needs to set ISADIR based on
    loader: need UEFI32 support
    8918 loader.efi: add vesa edid support
    uts: tem_safe_pix_clear_prom_output() should only
    uts: tem_safe_pix_clear_entire_screen() should use
    uts: tem_safe_check_first_time() should query cursor
    uts: tem implement cls callback & visual_io v4
    uts: gfx_vgatext use block cursor for vgatext
    uts: gfx_private implement cls callback & visual_io
    uts: gfx_private bitmap framebuffer implementation
    uts: early start frame buffer console support
    uts: font functions should check the input char
    uts: font rendering should support 16/24/32bit depths
    uts: use smallest font as fallback default.
    uts: update terminal dimensions based on selected
    7834 uts: vgatext should use gfx_private
    uts: add spacing property to 8859-1.bdf
    terminfo: add underline for sun-color
    terminfo: sun-color has 16 colors
    uts: add font load callback type
    loader: do not repeat int13 calls with error 0x20 and
    8905 loader: add skein/edonr support
    8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>


  14      Additionally, loader can load files from the TFTP file service.  The NFS
  15      and TFTP based boot is enabled via pxeboot(5).  The loader also does
  16      support uncompressing gzip files while reading.  The uncompression will
  17      happen automatically if the compressed file is stored without .gz suffix
  18      or if the file is accessed by leaving out the .gz suffix from the name.
  19      If the file is referred by full name, including .gz suffix, then the file
  20      content is read as is and the uncompression is not performed.
  21 
  22      loader provides a scripting language that can be used to automate tasks,
  23      do pre-configuration or assist in recovery procedures.  This scripting
  24      language is roughly divided in two main components.  The smaller one is a
  25      set of commands designed for direct use by the casual user, called
  26      "builtin commands" for historical reasons.  The main drive behind these
  27      commands is user-friendliness.  The bigger component is an ANS Forth
  28      compatible Forth interpreter based on FICL, by John Sadler.
  29 
  30      During initialization, loader will probe for a console and set the
  31      console variable, or set it to serial console ("ttya" - "ttyd") if the
  32      previous boot stage used that.  If multiple consoles are selected, they
  33      will be listed separated by commas.  Then, devices are probed, currdev
  34      and loaddev are set, and COLUMNS, LINES, and ISADIR are set.  Next, FICL
  35      is initialized, the builtin words are added to its vocabulary.  The inner
  36      interpreter loader will use with FICL is then set to interpret, which is
  37      FICL's default.  After that, /boot/loader.rc is processed if available.
  38      These files are processed through the include command, which reads all of
  39      them into memory before processing them, making disk changes possible.

  40 
  41      At this point, if an autoboot has not been tried, and if autoboot_delay
  42      is not set to "NO" (not case sensitive), then an autoboot will be tried.
  43      If the system gets past this point, prompt will be set and loader will
  44      engage interactive mode.  Please note that historically even when
  45      autoboot_delay is set to "0" user will be able to interrupt autoboot
  46      process by pressing some key on the console while kernel and modules are
  47      being loaded.  In some cases such behaviour may be undesirable, to
  48      prevent it set autoboot_delay to "-1", in this case loader will engage
  49      interactive mode only if autoboot has failed.
  50 
  51    Builtin Commands
  52      In loader, builtin commands take parameters from the command line.  If an
  53      error condition occurs, an exception will be generated, which can be
  54      intercepted using ANS Forth exception handling words.  If not
  55      intercepted, an error message will be displayed and the interpreter's
  56      state will be reset, emptying the stack and restoring interpreting mode.
  57 
  58      The builtin commands available are:
  59 


 102      load [-t type] file ...
 103              Loads a kernel or file of opaque contents tagged as being of the
 104              type type.  Kernel and modules can be either in a.out or ELF
 105              format.  Any arguments passed after the name of the file to be
 106              loaded will be passed as arguments to that file.
 107 
 108      ls [-l] [path]
 109              Displays a listing of files in the directory path, or the root
 110              directory if path is not specified.  If -l is specified, file
 111              sizes will be shown too.
 112 
 113      lsdev [-v]
 114              Lists all of the devices from which it may be possible to load
 115              modules.  If -v is specified, more details are printed.
 116 
 117      lsmod [-v]
 118              Displays loaded modules.  If -v is specified, more details are
 119              shown.
 120 
 121      more file [file ...]
 122              Display the files specified, with a pause at each LINES
 123              displayed.
 124 
 125      read [-t seconds] [-p prompt] [variable]
 126              Reads a line of input from the terminal, storing it in variable
 127              if specified.  A timeout can be specified with -t, though it will
 128              be canceled at the first key pressed.  A prompt may also be
 129              displayed through the -p flag.
 130 
 131      reboot  Immediately reboots the system.
 132 
 133      set variable
 134      set variable=value
 135              Set loader's environment variables.
 136 
 137      show [variable]
 138              Displays the specified variable's value, or all variables and
 139              their values if variable is not specified.
 140 
 141      unload  Remove all modules from memory.
 142 


 199                Will set kernel(1M) -v option.
 200 
 201      boot-args
 202                Will set custom arguments for the kernel.  If set in loader
 203                configuration, the loader startup will parse the boot-args
 204                value to set boot prefixed variables listed above, any
 205                unrecognized options are added to kernel command line verbatim.
 206 
 207      bootfile  The name of the kernel.
 208 
 209      console   Defines the current console or consoles.  Multiple consoles may
 210                be specified.  In that case, the first listed console will
 211                become the default console for the kernel(1M).
 212 
 213      currdev   Selects the default device.  Syntax for devices is odd.
 214 
 215      interpret
 216                Has the value "ok" if the Forth's current state is
 217                interpreting.
 218 
 219      LINES     Define the number of lines on the screen, to be used by the

 220                pager.
 221 
 222      module_path
 223                Sets the list of directories which will be searched for modules
 224                named in a load command or implicitly required by a dependency.
 225                The default value for this variable is
 226                "/platform/i86pc/${ISADIR}"
 227 
 228      prompt    Value of loader's prompt.  Defaults to "${interpret}".  If
 229                variable prompt is unset, the default prompt is `>'.
 230 
 231      os_console
 232                If set, the value is used to set kernel(1M) console property.
 233 
 234      Other variables are used for loader or to set kernel properties or for
 235      informational purposes.
 236 
 237    Builtin Parser
 238      When a builtin command is executed, the rest of the line is taken by it
 239      as arguments, and it is processed by a special parser which is not used




  14      Additionally, loader can load files from the TFTP file service.  The NFS
  15      and TFTP based boot is enabled via pxeboot(5).  The loader also does
  16      support uncompressing gzip files while reading.  The uncompression will
  17      happen automatically if the compressed file is stored without .gz suffix
  18      or if the file is accessed by leaving out the .gz suffix from the name.
  19      If the file is referred by full name, including .gz suffix, then the file
  20      content is read as is and the uncompression is not performed.
  21 
  22      loader provides a scripting language that can be used to automate tasks,
  23      do pre-configuration or assist in recovery procedures.  This scripting
  24      language is roughly divided in two main components.  The smaller one is a
  25      set of commands designed for direct use by the casual user, called
  26      "builtin commands" for historical reasons.  The main drive behind these
  27      commands is user-friendliness.  The bigger component is an ANS Forth
  28      compatible Forth interpreter based on FICL, by John Sadler.
  29 
  30      During initialization, loader will probe for a console and set the
  31      console variable, or set it to serial console ("ttya" - "ttyd") if the
  32      previous boot stage used that.  If multiple consoles are selected, they
  33      will be listed separated by commas.  Then, devices are probed, currdev
  34      and loaddev are set, and screen-#cols, screen-#rows, and ISADIR are set.
  35      Next, FICL is initialized, the builtin words are added to its vocabulary.
  36      The inner interpreter loader will use with FICL is then set to interpret,
  37      which is FICL's default.  After that, /boot/loader.rc is processed if
  38      available.  These files are processed through the include command, which
  39      reads all of them into memory before processing them, making disk changes
  40      possible.
  41 
  42      At this point, if an autoboot has not been tried, and if autoboot_delay
  43      is not set to "NO" (not case sensitive), then an autoboot will be tried.
  44      If the system gets past this point, prompt will be set and loader will
  45      engage interactive mode.  Please note that historically even when
  46      autoboot_delay is set to "0" user will be able to interrupt autoboot
  47      process by pressing some key on the console while kernel and modules are
  48      being loaded.  In some cases such behaviour may be undesirable, to
  49      prevent it set autoboot_delay to "-1", in this case loader will engage
  50      interactive mode only if autoboot has failed.
  51 
  52    Builtin Commands
  53      In loader, builtin commands take parameters from the command line.  If an
  54      error condition occurs, an exception will be generated, which can be
  55      intercepted using ANS Forth exception handling words.  If not
  56      intercepted, an error message will be displayed and the interpreter's
  57      state will be reset, emptying the stack and restoring interpreting mode.
  58 
  59      The builtin commands available are:
  60 


 103      load [-t type] file ...
 104              Loads a kernel or file of opaque contents tagged as being of the
 105              type type.  Kernel and modules can be either in a.out or ELF
 106              format.  Any arguments passed after the name of the file to be
 107              loaded will be passed as arguments to that file.
 108 
 109      ls [-l] [path]
 110              Displays a listing of files in the directory path, or the root
 111              directory if path is not specified.  If -l is specified, file
 112              sizes will be shown too.
 113 
 114      lsdev [-v]
 115              Lists all of the devices from which it may be possible to load
 116              modules.  If -v is specified, more details are printed.
 117 
 118      lsmod [-v]
 119              Displays loaded modules.  If -v is specified, more details are
 120              shown.
 121 
 122      more file [file ...]
 123              Display the files specified, with a pause at each screen-#rows
 124              displayed.
 125 
 126      read [-t seconds] [-p prompt] [variable]
 127              Reads a line of input from the terminal, storing it in variable
 128              if specified.  A timeout can be specified with -t, though it will
 129              be canceled at the first key pressed.  A prompt may also be
 130              displayed through the -p flag.
 131 
 132      reboot  Immediately reboots the system.
 133 
 134      set variable
 135      set variable=value
 136              Set loader's environment variables.
 137 
 138      show [variable]
 139              Displays the specified variable's value, or all variables and
 140              their values if variable is not specified.
 141 
 142      unload  Remove all modules from memory.
 143 


 200                Will set kernel(1M) -v option.
 201 
 202      boot-args
 203                Will set custom arguments for the kernel.  If set in loader
 204                configuration, the loader startup will parse the boot-args
 205                value to set boot prefixed variables listed above, any
 206                unrecognized options are added to kernel command line verbatim.
 207 
 208      bootfile  The name of the kernel.
 209 
 210      console   Defines the current console or consoles.  Multiple consoles may
 211                be specified.  In that case, the first listed console will
 212                become the default console for the kernel(1M).
 213 
 214      currdev   Selects the default device.  Syntax for devices is odd.
 215 
 216      interpret
 217                Has the value "ok" if the Forth's current state is
 218                interpreting.
 219 
 220      screen-#rows
 221                Define the number of lines on the screen, to be used by the
 222                pager.
 223 
 224      module_path
 225                Sets the list of directories which will be searched for modules
 226                named in a load command or implicitly required by a dependency.
 227                The default value for this variable is
 228                "/platform/i86pc/${ISADIR}"
 229 
 230      prompt    Value of loader's prompt.  Defaults to "${interpret}".  If
 231                variable prompt is unset, the default prompt is `>'.
 232 
 233      os_console
 234                If set, the value is used to set kernel(1M) console property.
 235 
 236      Other variables are used for loader or to set kernel properties or for
 237      informational purposes.
 238 
 239    Builtin Parser
 240      When a builtin command is executed, the rest of the line is taken by it
 241      as arguments, and it is processed by a special parser which is not used