Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
LOADER(8)		    System Manager's Manual		     LOADER(8)

NAME
       loader -- kernel	bootstrapping final stage

DESCRIPTION
       The  program called loader is the final stage of	FreeBSD's kernel boot-
       strapping process.  On IA32 (i386) architectures, it is a  BTX  client.
       It  is  linked statically to libstand(3)	and usually located in the di-
       rectory /boot.

       It provides a scripting language	that can be used to automate tasks, do
       pre-configuration or assist in  recovery	 procedures.   This  scripting
       language	is roughly divided in two main components.  The	smaller	one is
       a  set  of  commands designed for direct	use by the casual user,	called
       "builtin	commands" for historical reasons.  The main drive behind these
       commands	is user-friendliness.  The bigger component is	an  ANS	 Forth
       compatible Forth	interpreter based on FICL, by John Sadler.

       During  initialization,	loader	will  probe  for a console and set the
       console variable, or set	it to serial  console  ("comconsole")  if  the
       previous	boot stage used	that.  If multiple consoles are	selected, they
       will  be	listed separated by spaces.  Then, devices are probed, currdev
       and loaddev are set, and	LINES is set to	24.  Next,  FICL  is  initial-
       ized, the builtin words are added to its	vocabulary, and	/boot/boot.4th
       is  processed  if  it exists.  No disk switching	is possible while that
       file is being read.  The	inner interpreter loader will use with FICL is
       then  set  to  interpret,  which	 is  FICL's  default.	 After	 that,
       /boot/loader.rc	 is   processed	  if  available,  and,	failing	 that,
       /boot/boot.conf is  read	 for  historical  reasons.   These  files  are
       processed  through  the	include	 command, which	reads all of them into
       memory before processing	them, making disk changes possible.

       At this point, if an autoboot has not been tried, and if	autoboot_delay
       is not set to "NO" (not case  sensitive),  then	an  autoboot  will  be
       tried.	If  the	 system	 gets  past this point,	prompt will be set and
       loader will engage interactive mode.   Please  note  that  historically
       even  when  autoboot_delay is set to "0"	user will be able to interrupt
       autoboot	process	by pressing some key on	the console while  kernel  and
       modules are being loaded.  In some cases	such behaviour may be undesir-
       able,  to  prevent  it  set autoboot_delay to "-1", in this case	loader
       will engage interactive mode only if autoboot has failed.

BUILTIN	COMMANDS
       In loader, builtin commands take	 parameters  from  the	command	 line.
       Presently, the only way to call them from a script is by	using evaluate
       on a string.  If	an error condition occurs, an exception	will be	gener-
       ated,  which  can  be  intercepted  using  ANS Forth exception handling
       words.  If not intercepted, an error message will be displayed and  the
       interpreter's state will	be reset, emptying the stack and restoring in-
       terpreting mode.

       The builtin commands available are:

       autoboot	[seconds [prompt]]
	       Proceeds	 to bootstrap the system after a number	of seconds, if
	       not interrupted by the user.  Displays a	countdown prompt warn-
	       ing the user the	system is about	to be  booted,	unless	inter-
	       rupted by a key press.  The kernel will be loaded first if nec-
	       essary.	Defaults to 10 seconds.

       bcachestat
	       Displays	 statistics  about  disk  cache	usage.	For depuration
	       only.

       boot
       boot kernelname [...]
       boot -flag ...
	       Immediately proceeds to bootstrap the system, loading the  ker-
	       nel  if	necessary.   Any  flags	or arguments are passed	to the
	       kernel, but they	must precede the kernel	name, if a kernel name
	       is provided.

	       WARNING:	 The  behavior	of  this   builtin   is	  changed   if
	       loader.4th(8) is	loaded.

       echo [-n] [<message>]
	       Displays	text on	the screen.  A new line	will be	printed	unless
	       -n is specified.

       heap    Displays	memory usage statistics.  For debugging	purposes only.

       help [topic [subtopic]]
	       Shows  help  messages read from /boot/loader.help.  The special
	       topic index will	list the topics	available.

       include file [file ...]
	       Process script files.  Each file, in turn, is  completely  read
	       into  memory,  and then each of its lines is passed to the com-
	       mand line interpreter.  If any error is returned	by the	inter-
	       preter, the include command aborts immediately, without reading
	       any other files,	and returns an error itself (see "ERRORS").

       load [-t	type] file ...
	       Loads a kernel, kernel loadable module (kld), or	file of	opaque
	       contents	 tagged	as being of the	type type.  Kernel and modules
	       can be either in	a.out or ELF format.  Any arguments passed af-
	       ter the name of the file	to be loaded will be passed  as	 argu-
	       ments  to that file.  Currently,	argument passing does not work
	       for the kernel.

       ls [-l] [path]
	       Displays	a listing of files in the directory path, or the  root
	       directory  if  path is not specified.  If -l is specified, file
	       sizes will be shown too.

       lsdev [-v]
	       Lists all of the	devices	from which it may be possible to  load
	       modules.	 If -v is specified, more details are printed.

       lsmod [-v]
	       Displays	 loaded	modules.  If -v	is specified, more details are
	       shown.

       more file [file ...]
	       Display the files specified, with a pause at  each  LINES  dis-
	       played.

       pnpscan [-v]
	       Scans  for  Plug-and-Play  devices.   This is not functional at
	       present.

       read [-t	seconds] [-p prompt] [variable]
	       Reads a line of input from the terminal,	storing	it in variable
	       if specified.  A	timeout	can be specified with  -t,  though  it
	       will  be	 canceled at the first key pressed.  A prompt may also
	       be displayed through the	-p flag.

       reboot  Immediately reboots the system.

       set variable
       set variable=value
	       Set loader's environment	variables.

       show [variable]
	       Displays	the specified variable's value,	or all	variables  and
	       their values if variable	is not specified.

       unload  Remove all modules from memory.

       unset variable
	       Removes variable	from the environment.

       ?       Lists available commands.

   BUILTIN ENVIRONMENT VARIABLES
       The loader has actually two different kinds of `environment' variables.
       There  are  ANS	Forth's	environmental queries, and a separate space of
       environment variables used by builtins, which are not  directly	avail-
       able to Forth words.  It	is the latter type that	this section covers.

       Environment  variables  can  be set and unset through the set and unset
       builtins, and can have their values interactively examined through  the
       use  of	the  show  builtin.   Their values can also be accessed	as de-
       scribed in "BUILTIN PARSER".

       Notice that these environment variables are not inherited by any	 shell
       after the system	has been booted.

       A few variables are set automatically by	loader.	 Others	can affect the
       behavior	 of either loader or the kernel	at boot.  Some options may re-
       quire a value, while others define behavior just	by  being  set.	  Both
       types of	builtin	variables are described	below.

       acpi_load
		 Unset	this  to disable automatic loading of the ACPI module.
		 See also hint.acpi.0.disabled in device.hints(5).

       autoboot_delay
		 Number	of seconds autoboot will wait before booting.  If this
		 variable is not defined, autoboot will	default	to 10 seconds.

		 If set	to "NO", no autoboot will be  automatically  attempted
		 after	processing /boot/loader.rc, though explicit autoboot's
		 will be processed normally, defaulting	to 10 seconds delay.

		 If set	to "0",	no delay will be inserted, but user still will
		 be able to interrupt autoboot process and escape into the in-
		 teractive mode	by pressing some key on	the console while ker-
		 nel and modules are being loaded.

		 If set	to "-1", no delay will be inserted and loader will en-
		 gage interactive mode only if autoboot	has  failed  for  some
		 reason.

       boot_askname
		 Instructs  the	 kernel	to prompt the user for the name	of the
		 root device when the kernel is	booted.

       boot_cdrom
		 Instructs the kernel to try to	mount  the  root  file	system
		 from CD-ROM.

       boot_ddb	 Instructs  the	 kernel	 to  start in the DDB debugger,	rather
		 than proceeding to initialize when booted.

       boot_dfltroot
		 Instructs the kernel to mount the statically compiled-in root
		 file system.

       boot_gdb	 Selects gdb-remote mode for the kernel	debugger by default.

       boot_multicons
		 Enables multiple console support in the kernel	early on boot.
		 In a running system, console configuration can	be manipulated
		 by the	conscontrol(8) utility.

       boot_mute
		 All console output is suppressed when console is muted.  In a
		 running system, the state of console muting  can  be  manipu-
		 lated by the conscontrol(8) utility.

       boot_pause
		 During	the device probe, pause	after each line	is printed.

       boot_serial
		 Force	the use	of a serial console even when an internal con-
		 sole is present.

       boot_single
		 Prevents the kernel from initiating a multi-user startup; in-
		 stead,	a single-user mode will	be entered when	the kernel has
		 finished device probing.

       boot_verbose
		 Setting this variable causes extra debugging  information  to
		 be printed by the kernel during the boot phase.

       bootfile	 List of semicolon-separated search path for bootable kernels.
		 The default is	"kernel".

       comconsole_speed
		 Defines  the  speed  of  the  serial  console (i386 and amd64
		 only).	 If the	previous boot stage indicated  that  a	serial
		 console  is  in  use then this	variable is initialized	to the
		 current speed of the console serial port.   Otherwise	it  is
		 set   to   9600   unless   this   was	overridden  using  the
		 BOOT_COMCONSOLE_SPEED	variable  when	loader	was  compiled.
		 Changes  to the comconsole_speed variable take	effect immedi-
		 ately.

       console	 Defines the current console or	consoles.   Multiple  consoles
		 may  be  specified.   In  that	case, the first	listed console
		 will become the default console  for  userland	 output	 (e.g.
		 from init(8)).

       currdev	 Selects the default device.  Syntax for devices is odd.

       init_path
		 Sets the list of binaries which the kernel will try to	run as
		 the initial process.  The first matching binary is used.  The
		 default			list			    is
		 "/sbin/init:/sbin/oinit:/sbin/init.bak:/rescue/init:/stand/sysinstall".

       interpret
		 Has the value "OK" if the Forth's current state is interpret-
		 ing.

       LINES	 Define	the number of lines on the screen, to be used  by  the
		 pager.

       module_path
		 Sets  the list	of directories which will be searched for mod-
		 ules named in a load command or implicitly required by	a  de-
		 pendency.    The   default   value   for   this  variable  is
		 "/boot/kernel;/boot/modules".

       num_ide_disks
		 Sets the number of IDE	disks as a workaround for  some	 prob-
		 lems  in finding the root disk	at boot.  This has been	depre-
		 cated in favor	of root_disk_unit.

       prompt	 Value of loader's prompt.  Defaults  to  "${interpret}".   If
		 variable prompt is unset, the default prompt is `>'.

       root_disk_unit
		 If  the  code which detects the disk unit number for the root
		 disk is confused, e.g.	by a mix of SCSI and IDE disks,	or IDE
		 disks with gaps in the	sequence (e.g. no primary slave),  the
		 unit number can be forced by setting this variable.

       rootdev	 By  default the value of currdev is used to set the root file
		 system	when the kernel	is booted.  This can be	overridden  by
		 setting rootdev explicitly.

       Other  variables	 are  used to override kernel tunable parameters.  The
       following tunables are available:

       hw.physmem    Limit the amount of physical memory the system will  use.
		     By	 default  the  size is in bytes, but the k, K, m, M, g
		     and G suffixes are	also accepted and indicate  kilobytes,
		     megabytes	and gigabytes respectively.  An	invalid	suffix
		     will result in the	variable being ignored by the kernel.

       hw.pci.host_start_mem, hw.acpi.host_start_mem
		     When not otherwise	constrained, this  limits  the	memory
		     start  address.   The default is 0x80000000 and should be
		     set to at least size of the memory	and not	conflict  with
		     other  resources.	 Typically,  only  systems without PCI
		     bridges need to set this variable since PCI bridges typi-
		     cally constrain the  memory  starting  address  (and  the
		     variable  is only used when bridges do not	constrain this
		     address).

       hw.pci.enable_io_modes
		     Enable PCI	resources which	are left off by	some BIOSes or
		     are not enabled correctly by the device driver.   Tunable
		     value  set	to ON (1) by default, but this may cause prob-
		     lems with some peripherals.

       kern.maxusers
		     Set the size of a number of statically  allocated	system
		     tables;  see tuning(7) for	a description of how to	select
		     an	appropriate value for this tunable.   When  set,  this
		     tunable  replaces	the  value declared in the kernel com-
		     pile-time configuration file.

       kern.ipc.nmbclusters
		     Set the number of mbuf clusters  to  be  allocated.   The
		     value cannot be set below the default determined when the
		     kernel was	compiled.  Modifies NMBCLUSTERS.

       kern.ipc.nsfbufs
		     Set  the  number  of sendfile(2) buffers to be allocated.
		     Overrides NSFBUFS.

       kern.maxswzone
		     Limits the	amount of KVM to be used to hold swap meta in-
		     formation,	which directly governs the maximum  amount  of
		     swap  the system can support.  This value is specified in
		     bytes of KVA space	and defaults to	around 70MBytes.  Care
		     should be taken to	not reduce this	value  such  that  the
		     actual  amount of configured swap exceeds 1/2 the kernel-
		     supported swap.  The default 70MB allows  the  kernel  to
		     support  a	 maximum of (approximately) 14GB of configured
		     swap.  Only mess around with this parameter if  you  need
		     to	greatly	extend the KVM reservation for other resources
		     such  as  the  buffer  cache  or  NMBCLUSTERS.   Modifies
		     VM_SWZONE_SIZE_MAX.

       kern.maxbcache
		     Limits the	amount of KVM reserved for use by  the	buffer
		     cache, specified in bytes.	 The default maximum is	200MB.
		     This  parameter  is used to prevent the buffer cache from
		     eating too	much KVM in  large-memory  machine  configura-
		     tions.   Only mess	around with this parameter if you need
		     to	greatly	extend the KVM reservation for other resources
		     such as the swap zone or NMBCLUSTERS.  Note that the NBUF
		     parameter	 will	override   this	   limit.     Modifies
		     VM_BCACHE_SIZE_MAX.

       machdep.disable_mtrrs
		     Disable the use of	i686 MTRRs (x86	only).

       net.inet.tcp.tcbhashsize
		     Overrides	the  compile-time  set value of	TCBHASHSIZE or
		     the preset	default	of 512.	 Must be a power of 2.

       vm.kmem_size  Sets the size of kernel memory (bytes).   This  overrides
		     the value determined when the kernel was compiled.	 Modi-
		     fies VM_KMEM_SIZE.

   BUILTIN PARSER
       When a builtin command is executed, the rest of the line	is taken by it
       as arguments, and it is processed by a special parser which is not used
       for regular Forth commands.

       This special parser applies the following rules to the parsed text:

       1.   All	backslash characters are preprocessed.

	    	\b , \f	, \r , \n and \t are processed as in C.

	    	\s is converted	to a space.

	    	\v is converted	to ASCII 11.

	    	\z is just skipped.  Useful for	things like "\0xf\z\0xf".

	    	\0xN and \0xNN are replaced by the hex N or NN.

	    	\NNN is	replaced by the	octal NNN ASCII	character.

	    	\"  ,  \' and \$ will escape these characters, preventing them
		from receiving special treatment in Step 2, described below.

	    	\\ will	be replaced with a single \ .

	    	In any other occurrence, backslash will	just be	removed.

       2.   Every string between non-escaped quotes or double-quotes  will  be
	    treated as a single	word for the purposes of the remaining steps.

       3.   Replace  any  $VARIABLE or ${VARIABLE} with	the value of the envi-
	    ronment variable VARIABLE.

       4.   Space-delimited arguments are passed to the	 called	 builtin  com-
	    mand.  Spaces can also be escaped through the use of \\ .

       An exception to this parsing rule exists, and is	described in "BUILTINS
       AND FORTH".

   BUILTINS AND	FORTH
       All  builtin  words  are	state-smart, immediate words.  If interpreted,
       they behave exactly as described	previously.   If  they	are  compiled,
       though, they extract their arguments from the stack instead of the com-
       mand line.

       If  compiled,  the builtin words	expect to find,	at execution time, the
       following parameters on the stack:
	     addrN lenN	... addr2 len2 addr1 len1 N
       where addrX lenX	are strings which will compose the command  line  that
       will be parsed into the builtin's arguments.  Internally, these strings
       are concatenated	in from	1 to N,	with a space put between each one.

       If no arguments are passed, a 0 must be passed, even if the builtin ac-
       cepts no	arguments.

       While this behavior has benefits, it has	its trade-offs.	 If the	execu-
       tion token of a builtin is acquired (through ' or [']), and then	passed
       to  catch  or  execute,	the builtin behavior will depend on the	system
       state at	the time catch or execute is processed!	 This is  particularly
       annoying	 for programs that want	or need	to handle exceptions.  In this
       case, the use of	a proxy	is recommended.	 For example:
	     : (boot) boot;

FICL
       FICL is a Forth interpreter written in C, in the	form of	a  forth  vir-
       tual machine library that can be	called by C functions and vice versa.

       In  loader, each	line read interactively	is then	fed to FICL, which may
       call loader back	to execute the builtin	words.	 The  builtin  include
       will also feed FICL, one	line at	a time.

       The  words  available  to FICL can be classified	into four groups.  The
       ANS Forth standard words, extra FICL words, extra  FreeBSD  words,  and
       the builtin commands; the latter	were already described.	 The ANS Forth
       standard	 words	are  listed  in	 the  "STANDARDS"  section.  The words
       falling in the two other	groups are described in	the following  subsec-
       tions.

   FICL	EXTRA WORDS
       .env

       .ver

       -roll

       2constant

       >name

       body>

       compare	      This is the STRING word set's compare.

       compile-only

       endif

       forget-wid

       parse-word

       sliteral	      This is the STRING word set's sliteral.

       wid-set-super

       w@

       w!

       x.

       empty

       cell-

       -rot

   FREEBSD EXTRA WORDS
       $ (--)	 Evaluates  the	 remainder  of	the input buffer, after	having
		 printed it first.

       % (--)	 Evaluates the remainder of the	input buffer under a catch ex-
		 ception guard.

       .#	 Works like .  but without outputting a	trailing space.

       fclose (fd --)
		 Closes	a file.

       fkey (fd	-- char)
		 Reads a single	character from a file.

       fload (fd --)
		 Processes a file fd.

       fopen (addr len mode -- fd)
		 Opens a file.	Returns	a file descriptor, or -1  in  case  of
		 failure.   The	 mode parameter	selects	whether	the file is to
		 be opened for read access, write access, or both.   The  con-
		 stants	  O_RDONLY,   O_WRONLY,	 and  O_RDWR  are  defined  in
		 /boot/support.4th, indicating	read  only,  write  only,  and
		 read-write access, respectively.

       fread (fd addr len -- len')
		 Tries	to  read len bytes from	file fd	into buffer addr.  Re-
		 turns the actual number of bytes read,	or -1 in case of error
		 or end	of file.

       heap? (-- cells)
		 Return	the space remaining in the dictionary heap, in	cells.
		 This  is not related to the heap used by dynamic memory allo-
		 cation	words.

       inb (port -- char)
		 Reads a byte from a port.

       key (-- char)
		 Reads a single	character from the console.

       key? (--	flag)
		 Returns true if there is a character  available  to  be  read
		 from the console.

       ms (u --)
		 Waits u microseconds.

       outb (port char --)
		 Writes	a byte to a port.

       seconds (-- u)
		 Returns the number of seconds since midnight.

       tib> (--	addr len)
		 Returns  the remainder	of the input buffer as a string	on the
		 stack.

       trace! (flag --)
		 Activates or deactivates tracing.  Does not work with catch.

   FREEBSD DEFINED ENVIRONMENTAL QUERIES
       arch-i386
	       TRUE if the architecture	is IA32.

       arch-alpha
	       TRUE if the architecture	is AXP.

       FreeBSD_version
	       FreeBSD version at compile time.

       loader_version
	       loader version.

   SYSTEM DOCUMENTATION
FILES
       /boot/loader		   loader itself.
       /boot/boot.4th		   Additional FICL initialization.
       /boot/boot.conf		   loader bootstrapping	script.	 Deprecated.
       /boot/defaults/loader.conf
       /boot/loader.conf
       /boot/loader.conf.local	   loader configuration	files, as described in
				   loader.conf(5).
       /boot/loader.rc		   loader bootstrapping	script.
       /boot/loader.help	   Loaded by help.   Contains  the  help  mes-
				   sages.

EXAMPLES
       Boot in single user mode:

	     boot -s

       Load  the  kernel,  a splash screen, and	then autoboot in five seconds.
       Notice that a kernel must be loaded before any other  load  command  is
       attempted.

	     load kernel
	     load splash_bmp
	     load -t splash_image_data /boot/chuckrulez.bmp
	     autoboot 5

       Set  the	 disk unit of the root device to 2, and	then boot.  This would
       be needed in a system with two IDE disks,  with	the  second  IDE  disk
       hardwired to wd2	instead	of wd1.

	     set root_disk_unit=2
	     boot /kernel

       See also:

       /boot/loader.4th			Extra builtin-like words.

       /boot/support.4th		loader.conf processing words.

       /usr/share/examples/bootforth/	Assorted examples.

ERRORS
       The following values are	thrown by loader:

	     100    Any	type of	error in the processing	of a builtin.

	     -1	    Abort executed.

	     -2	    Abort" executed.

	     -56    Quit executed.

	     -256   Out	of interpreting	text.

	     -257   Need more text to succeed -- will finish on	next run.

	     -258   Bye	executed.

	     -259   Unspecified	error.

SEE ALSO
       libstand(3), loader.conf(5), tuning(7), boot(8),	btxld(8)

STANDARDS
       For the purposes	of ANS Forth compliance, loader	is an ANS Forth	System
       with  Environmental  Restrictions,  Providing  .(, :noname, ?do,	parse,
       pick, roll, refill, to, value, \, false,	 true,	<>,  0<>,  compile,  ,
       erase,  nip, tuck and marker from the Core Extensions word set, Provid-
       ing the Exception Extensions word set, Providing	the Locals  Extensions
       word  set, Providing the	Memory-Allocation Extensions word set, Provid-
       ing .s, bye, forget, see, words,	[if], [else] and [then]	from the  Pro-
       gramming-Tools  extension  word	set, Providing the Search-Order	exten-
       sions word set.

HISTORY
       The loader first	appeared in FreeBSD 3.1.

AUTHORS
       The loader was written by Michael Smith <msmith@FreeBSD.org>.

       FICL was	written	by John	Sadler <john_sadler@alum.mit.edu>.

BUGS
       The expect and accept words will	read from the input buffer instead  of
       the console.  The latter	will be	fixed, but the former will not.

FreeBSD	6.1		      September	22, 2005		     LOADER(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=loader&sektion=8&manpath=FreeBSD+6.1-RELEASE>

home | help