loader(8): Update: add more text on kenv vs local variables etc.
authorThomas Nikolajsen <thomas@dragonflybsd.org>
Sun, 16 Oct 2011 21:03:40 +0000 (23:03 +0200)
committerThomas Nikolajsen <thomas@dragonflybsd.org>
Sun, 16 Oct 2011 21:38:00 +0000 (23:38 +0200)
 - Add missing kenv variables to assignment white list;
all kenv variables which are used in loader(8) source are added.
 - Inhibiting loading of acpi(4) needs to use `lunset acpi_load',
not `unset', as `loadall' uses local variables; ditto for ehci.
 - Add info to loader.8 & help files on variables ($VAR / ${VAR}) in
command arguments and assignment; these are kenv variables.
 - Add description of vfs.root.realroot
 - Fix some whitespace style(7).
DragonFly-bug: <http://bugs.dragonflybsd.org/issue2141>

sys/boot/common/commands.c
sys/boot/common/help.common
sys/boot/common/loader.8
sys/boot/dloader/cmds.c
sys/boot/pc32/loader/help.i386

index 48a88ba..697b334 100644 (file)
@@ -73,7 +73,7 @@ help_getnext(int fd, char **topic, char **subtopic, char **desc)
 
        *topic = *subtopic = *desc = NULL;
        cp = line + 2;
-       while((cp != NULL) && (*cp != 0)) {
+       while ((cp != NULL) && (*cp != 0)) {
            ep = strchr(cp, ' ');
            if ((*cp == 'T') && (*topic == NULL)) {
                if (ep != NULL)
@@ -163,14 +163,14 @@ command_help(int argc, char *argv[])
     
     /* Scan the helpfile looking for help matching the request */
     pager_open();
-    while(help_getnext(hfd, &t, &s, &d)) {
+    while (help_getnext(hfd, &t, &s, &d)) {
 
        if (doindex) {          /* dink around formatting */
            help_emitsummary(t, s, d);
 
        } else if (strcmp(topic, t)) {
            /* topic mismatch */
-           if(matched)         /* nothing more on this topic, stop scanning */
+           if (matched)        /* nothing more on this topic, stop scanning */
                break;
 
        } else {
@@ -179,7 +179,7 @@ command_help(int argc, char *argv[])
            if (((subtopic == NULL) && (s == NULL)) ||
                ((subtopic != NULL) && (s != NULL) && !strcmp(subtopic, s))) {
                /* exact match, print text */
-               while((fgetstr(buf, 80, hfd) >= 0) && (buf[0] != '#')) {
+               while ((fgetstr(buf, 80, hfd) >= 0) && (buf[0] != '#')) {
                    if (pager_output(buf))
                        break;
                    if (pager_output("\n"))
@@ -236,7 +236,7 @@ command_commandlist(int argc, char *argv[])
  * substitution happening.
  */
 
-COMMAND_SET(show, "show", "show variable(s)", command_show);
+COMMAND_SET(show, "show", "show kenv variable(s)", command_show);
 
 static int
 command_show(int argc, char *argv[])
@@ -271,7 +271,7 @@ command_show(int argc, char *argv[])
     return(CMD_OK);
 }
 
-COMMAND_SET(set, "set", "set a variable", command_set);
+COMMAND_SET(set, "set", "set a kenv variable", command_set);
 
 static int
 command_set(int argc, char *argv[])
@@ -290,7 +290,7 @@ command_set(int argc, char *argv[])
     return(CMD_OK);
 }
 
-COMMAND_SET(unset, "unset", "unset a variable", command_unset);
+COMMAND_SET(unset, "unset", "unset a kenv variable", command_unset);
 
 static int
 command_unset(int argc, char *argv[]) 
@@ -305,7 +305,7 @@ command_unset(int argc, char *argv[])
     return(CMD_OK);
 }
 
-COMMAND_SET(echo, "echo", NULL, command_echo);
+COMMAND_SET(echo, "echo", "print text ($VAR is kenv variable)", command_echo);
 
 static int
 command_echo(int argc, char *argv[])
@@ -344,7 +344,7 @@ command_echo(int argc, char *argv[])
  * A passable emulation of the sh(1) command of the same name.
  */
 
-COMMAND_SET(read, "read", NULL, command_read);
+COMMAND_SET(read, "read", "read to kenv variable", command_read);
 
 static int
 command_read(int argc, char *argv[])
@@ -381,6 +381,10 @@ command_read(int argc, char *argv[])
 
     argv += (optind);
     argc -= (optind);
+    if (argc > 1) {
+       command_errmsg = "wrong number of arguments";
+       return(CMD_ERROR);
+    }
     name = (argc > 0) ? argv[0]: NULL;
        
     if (prompt != NULL)
index 1af3831..c4376dd 100644 (file)
 
        If needed, disable the ACPI driver with:
 
-               unset acpi_load
+               lunset acpi_load
                set hint.acpi.0.disabled=1
 
        If needed, disable the AHCI driver with:
 
-               unset ahci_load
+               lunset ahci_load
                set hint.ahci.0.disabled=1
 
        If needed, disable the EHCI driver with:
 
-               unset ehci_load
+               lunset ehci_load
                set hint.ehci.0.disabled=1
 
        For more information on ACPI, AHCI and EHCI use `help' on these topics.
 
        Assign value to variable.  The value is always assigned to local
        variable <variable>.  If <variable> is in the list of known kernel
-       environment variables or is a kernel tunable, the value is also
+       environment (kenv) variables or is a kernel tunable, the value is also
        assigned to the kernel environment variable of the given name.
+       If the variable name contains a `.' it is considered a kernel tunable.
        Local variables are unset if <value> is empty.  Kernel environment
-       variables may have empty values.
+       variables will have empty value.
 
-       Two kinds of variables are maintained by this program (loader(8)):
+       Two kinds of variables are maintained by loader(8) (this program):
        local variables, that is for loader(8) use only, and kernel
        environment variables, that kernel will have access to when it starts.
-       The assignment described above, will assign to a local variable and, if
-       it is applicable, also snoop assignment to kernel environment variable.
+       The assignment described above, will assign to a local variable and,
+       if applicable, also snoop assignment to kernel environment variable.
+
+       <value> can be a string or a string expressions containing literal
+       text and kernel environment variables, like `$VAR' or `${VAR}'.  E.g.:
+
+               VAR="Current device is $currdev"
+
+       Escape sequences like `\n' (newline) and `\OOO' (character with number
+       given in octal) can also be used.  This is actually a general facility
+       of loader(8) which can be used for arguments of all commands.
 
 ################################################################################
 # TAHCI DControl AHCI module behaviour
@@ -73,7 +83,7 @@
        If the ahci_load variable is set, the AHCI module will be loaded.
        The AHCI driver can be disabled with:
 
-               unset ahci_load
+               lunset ahci_load
                set hint.ahci.0.disabled=1
 
        A link speed of 1.5Gb/s can be enforced with:
        arguments for the kernel.  If <kernelname> is specified, and a kernel
        has not already been loaded, it will be booted instead of the default
        kernel.  <flag> values include:
+
        -a  Same as `set boot_askname'
        -C  Same as `set boot_cdrom'
        -c  Same as `set boot_userconfig'
 
        echo [-n] [<message>]
 
-       Emits <message>, with no trailing newline if -n is specified.  This is
-       most useful in conjunction with scripts and the '@' line prefix.
+       Emits <message>, with no trailing newline if -n is specified.
 
-       Variables are substituted by prefixing them with $, e.g.
+       Kernel environment variables are substituted by prefixing them with
+       `$', like `$VAR'; another variant is `${VAR}'.  E.g.:
 
                echo Current device is $currdev
 
        The EHCI driver provides support for the USB Enhanched Host Controller
        Interface, which is used by USB 2.0 controllers.
 
+       The EHCI kernel module is by default loaded automatically.
+
        If the ehci_load variable is set, the EHCI module will be loaded.
        The EHCI driver can be disabled with:
 
-               unset ehci_load
+               lunset ehci_load
                set hint.ehci.0.disabled=1
 
        See ehci.4 man page (on booted system) for full description.
 ################################################################################
 # Tset DSet a kernel environment variable
 
-       set <env_variable>
-       set <env_variable>=<value>
+       set <kenv_variable>
+       set <kenv_variable>=<value>
 
        The set command is used to set kernel environment variables.
 
        Selects the default device.  See `lsdev' for available devices.
 
 ################################################################################
-# Tset Sinit_path DSet the list of init candidates
+# Tset Sinit_chroot DSet directory that init(8) will chroot() to
+
+       set init_chroot=<path>
+
+       If set, init(8) will chroot() to <path> on startup.  By setting this
+       variable DragonFly can be run from a subdirectory of the root file
+       system.
+
+################################################################################
+# Tset Sinit_path DSet the list of init(8) candidates
 
        set init_path=<path>[:<path>...]
 
        Sets the list of binaries which the kernel will try to run as initial
        process.
 
-
 ################################################################################
 # Tset Smodule_path DSet the module search path
 
        when the kernel is booted.  This can be overridden by setting
        $rootdev explicitly.
 
+       See also vfs.root.mountfrom variable, under `set tunables' help item.
+
 ################################################################################
 # Tset Stunables DSet kernel tunable values
 
        Various kernel tunable parameters can be overridden by specifying new
        values in the environment.
 
+       set hw.ioapic_enable=<value>
+
+               Set to 0 to disable use of I/O APIC.  Default value is 1.
+
+       set hw.irq.X.dest=<value>
+
+               Set irqX's destination to the given CPUID, which starts from 0.
+               This variable should not be used if I/O APIC use is disabled.
+
        set hw.pci.allow_unsupported_io_range=<value>
 
                Allow the PCI Bridge to pass through an unsupported
                memory range assigned by the BIOS.
 
-               value is 0 (default) or non-zero to enable.
+               Value is 0 (default) or non-zero to enable.
 
        set hw.pci.enable_io_modes=<value>
 
                Enable PCI resources which are left off by some BIOSes
                or are not enabled correctly by the device driver.
 
-               value is 1 (default), but this may cause problems with
+               Value is 1 (default), but this may cause problems with
                some peripherals.  Set to 0 to disable.
 
        set hw.physmem=<value>                  MAXMEM
 
                Disable VT switching on suspend.
 
-               value is 0 (default) or non-zero to enable.
+               Value is 0 (default) or non-zero to enable.
+
+       set hw.usb.hack_defer_exploration=<value>
+
+               The USB keyboard will sometimes not attach properly unless
+               you set this variable to 0.
 
-       set kern.emergence_intr_enable=<value>
+       set kern.emergency_intr_enable=<value>
 
                Setting this to 1 enables emergency interrupt polling.  All
                interrupt handlers are executed periodically.  This mode is
                accessible when interrupt routing is otherwise broken.  It
                is primarily used by kernel developers to debug new systems.
 
-       set kern.emergence_intr_freq=<value>
+       set kern.emergency_intr_freq=<value>
 
                Set the polling rate for the emergency interrupt polling
                code.  The default is 10 (hz) to dissuade causual use.  If
 
                Specify root file system.  <value> is a semicolon separated
                list of file systems.  File system format is file system type
-               and disk store, separated by colon.  This variable needs to be
-               set when using boot-only partition, which is typically mounted
-               on root file system as /boot.
+               and disk store, separated by colon.
+
+               This variable needs to be set when using boot-only partition,
+               which is typically mounted on root file system as /boot.
 
                One file system example:
-                       hammer:da8se1a
+
+                       "hammer:da8se1a"
 
                One file system HAMMER multi volume examples:
-                       hammer:da8s1a:da9s1a
+
+                       "hammer:da8s1a:da9s1a"
 
                Several file systems, boot list, example:
-                       ufs:da0s1a;hammer:ad1s1d
+
+                       "ufs:da0s1a;hammer:ad1s1d"
 
                Each file system in the list will be tried in the order
                specified until the mount succeeds.  If all fail, the
 
                You may not specify devtab labels here but you can specify
                paths available to devfs such as:
-                       hammer:serno/L41JYE0G.s1d
+
+                       "hammer:serno/L41JYE0G.s1d"
+
+       set vfs.root.realroot=<value>
+
+               Specify root file system and extra options for initrd.
+
+               Format of <value> is below, TYPE is `local' or `crypt',
+               arg's depend on TYPE:
+
+                       "TYPE:arg1:arg2:...:argN"
+
+               Examples of <value>:
+
+               Use UFS file system on lvm(8) volume group `vg00' logical
+               volume `lv0' as real root:
+
+                       "local:ufs:/dev/vg00/lv0"
+
+               Use UFS file system on encrypted volume `secvolume', managed by
+               cryptsetup(8), on device `/dev/ad0s0a' as real root:
+
+                       "crypt:ufs:/dev/ad0s0a:secvolume"
+
+               See mkinitrd.8 man page (on booted system) for full description.
 
 ################################################################################
 # Tshow DShow values of kernel environment variable
 
-       show [<env_variable>]
+       show [<kenv_variable>]
 
-       Displays the value of <env_variable>, or all kernel environment
+       Displays the value of <kenv_variable>, or all kernel environment
        variables if not specified.
 
        See also `<variable>=<value>' command for distinction on local and
        kernel environment variables.
 
 ################################################################################
-# Tlunsetif DUnset local variables if envvar true
+# Tlunsetif DUnset local variable if kenv variable true
 
-       lunsetif <local_variable> <env_variable>
+       lunsetif <local_variable> <kenv_variable>
 
-       Unset <local_variable> if <env_variable> is true, i.e. set to 1 or YES.
+       Unset local variable <local_variable> if kernel environment variable
+       <kenv_variable> is true, i.e. set to 1 or YES.
 
        See also `<variable>=<value>' command for distinction on local and
        kernel environment variables.
 ################################################################################
 # Tifset DConditional kenv variable present
 
-       ifset <env_variable>
+       ifset <kenv_variable>
 
-       Conditional <env_variable> exists.
+       Conditional kernel environment variable <kenv_variable> exists.
 
 ################################################################################
 # Telseifexists DConditional file/dir present
        Run menu system.
 
 ################################################################################
-# Tread DRead input from the terminal
+# Tread DRead input from terminal to kenv variable
 
-       read [-t <value>] [-p <prompt>] [<env_variable>]
+       read [-p <prompt>] [-t <value>] [<kenv_variable>]
 
-       The read command reads a line of input from the terminal.  If the
-       -t argument is specified, it will return nothing if no input has been
-       received after <value> seconds.  (Any keypress will cancel the
-       timeout).
+       The read command reads a line of input from the terminal.
 
        If -p is specified, <prompt> is printed before reading input.  No
        newline is emitted after the prompt.
 
-       If a variable name is supplied, the variable is set to the value read,
-       less any terminating newline.
+       If -t is specified, it will return nothing if no input has been
+       received after <value> seconds.  Any keypress will cancel the timeout.
+
+       If <kenv_variable> is supplied, the kernel environment variable is set
+       to the value read, less any terminating newline.
 
 ################################################################################
 # Tunload DRemove all modules from memory
 ################################################################################
 # Tunset DUnset a kernel environment variable
 
-       unset <env_variable>
+       unset <kenv_variable>
 
        If allowed, the named kernel environment variable's value is discarded
        and the variable is removed.
index 6e14de2..b859bad 100644 (file)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD: src/sys/boot/common/loader.8,v 1.57 2003/06/29 20:57:55 brueffer Exp $
 .\"
-.Dd October 6, 2010
+.Dd October 16, 2011
 .Dt LOADER 8
 .Os
 .Sh NAME
@@ -130,19 +130,40 @@ If
 is in the list of known kernel environment variables or is a kernel tunable,
 the value is also assigned to the kernel environment variable of the
 given name.
+If the variable name contains a
+.Ql .\&
+it is considered a kernel tunable.
 Local variables are unset if
 .Ar value
 is empty.
-Kernel environment variables may have empty values.
+Kernel environment variable will have empty value.
 .Pp
 In other words, the assignment above will set a local variable and
-if it is applicable, also assign
+if applicable, also assign
 .Ar value
 to the kernel environment variable, even if
 .Ar value
 is empty.
 See also
-.Sx ENVIRONMENT VARIABLES AND LOCAL VARIABLES .
+.Sx KERNEL ENVIRONMENT VARIABLES AND LOCAL VARIABLES .
+.Pp
+.Ar Value
+can be a string or a string expression containing literal text and
+kernel environment variables, like
+.Dq $VAR
+or
+.Dq ${VAR} .
+Escape sequences like
+.Ql \en
+(newline),
+.Ql \et
+(TAB) and
+.Ql \eOOO
+(character with number given in octal)
+can also be used.
+This is actually a general facility of
+.Nm
+which can be used for arguments of all commands.
 .Pp
 .It Ic autoboot Op Ar delay Op Ar prompt
 Proceeds to bootstrap the system after a number of seconds, if not
@@ -180,6 +201,11 @@ Displays text on the screen.
 A new line will be printed unless
 .Fl n
 is specified.
+See description of assignment
+.Pq Ar variable Ns = Ns Ar value
+.Ar value
+for use of kernel environment variables and escape sequences in
+.Ar message .
 .Pp
 .It Ic else
 Conditional if/else/endif.
@@ -206,12 +232,12 @@ will list all topics available.
 .Pp
 .It Ic ifexists Ar path
 Conditional
-Ar path
+.Ar path
 exists, i.e.\& file/dir present.
 .Pp
-.It Ic ifset Ar env_variable
-Conditional
-.Ar env_variable
+.It Ic ifset Ar kenv_variable
+Conditional kernel environment variable
+.Ar kenv_variable
 exists.
 .Pp
 .It Ic include Ar
@@ -231,7 +257,6 @@ Kernel and modules can be either in a.out or
 format.
 Any arguments passed after the name of the file to be loaded
 will be passed as arguments to that file.
-Currently, argument passing does not work for the kernel.
 .Pp
 .It Ic loadall
 Load the kernel and all modules specified by MODULE_load variables.
@@ -245,7 +270,7 @@ is not specified.
 .It Ic ls Oo Fl l Oc Op Ar path
 Displays a listing of files in the directory
 .Ar path ,
-or the root directory if
+or the current directory if
 .Ar path
 is not specified.
 If
@@ -273,11 +298,11 @@ is specified, more details are shown.
 Unset a local variable.
 Discards the value and removes the variable.
 .Pp
-.It Ic lunsetif Ar local_variable env_variable
-Unset
+.It Ic lunsetif Ar local_variable kenv_variable
+Unset local variable
 .Ar local_variable
-if
-.Ar env_variable
+if kernel environment variable
+.Ar kenv_variable
 is true, i.e.\& set to 1 or
 .Ql YES .
 .Pp
@@ -327,66 +352,96 @@ This is not functional at present.
 .It Ic pwd
 Prints the working directory.
 .Pp
-.It Ic read Oo Fl t Ar seconds Oc Oo Fl p Ar prompt Oc Op Ar env_variable
-Reads a line of input from the terminal, storing it in
-.Ar env_variable
+.It Ic read Oo Fl p Ar prompt Oc Oo Fl t Ar seconds Oc Op Ar kenv_variable
+Reads a line of input from the terminal,
+storing it in kernel environment variable
+.Ar kenv_variable
 if specified.
+A prompt may be displayed through the
+.Fl p
+flag.
 A timeout can be specified with
 .Fl t ,
 though it will be canceled at the first key pressed.
-A prompt may also be displayed through the
-.Fl p
-flag.
 .Pp
 .It Ic reboot
 Immediately reboots the system.
 .Pp
-.It Ic set Ar env_variable
-.It Ic set Ar env_variable Ns = Ns Ar value
-Set
-.Nm Ns 's
-environment variables.
+.It Ic set Ar kenv_variable
+.It Ic set Ar kenv_variable Ns = Ns Ar value
+Set kernel environment variable
+.Ar kenv_variable
+to the given value,
+if no
+.Ar value
+is given, the empty string is the value.
 .Pp
-.It Ic show Op Ar env_variable
+.It Ic show Op Ar kenv_variable
 Displays the specified kernel environment variable's value,
 or all variables and their values if
-.Ar env_variable
+.Ar kenv_variable
 is not specified.
 .Pp
 .It Ic unload
 Removes all modules from memory.
 .Pp
-.It Ic unset Ar env_variable
+.It Ic unset Ar kenv_variable
 Removes
-.Ar env_variable
-from the environment.
+.Ar kenv_variable
+from the kernel environment.
 .Pp
 .It Ic \&?
 Lists most available commands with a short help text for each.
 .El
-.Ss ENVIRONMENT VARIABLES AND LOCAL VARIABLES
+.Ss KERNEL ENVIRONMENT VARIABLES AND LOCAL VARIABLES
 The
 .Nm
-has actually two different kinds of variables.
-There are
-kernel environment variables, which are visible to the kernel when it is run,
+actually has two different kinds of variables.
+These are
+kernel environment variables,
+which are visible to the kernel when it is started,
 and a separate space of local variables used by
 .Nm ,
 which are not available to the kernel.
 .Pp
-Environment variables can be set and unset through the
+Both local variable and kernel environment variable
+of the same name are changed by assignment
+.Pq Ar variable Ns = Ns Ar value .
+.Pp
+Kernel environment variables can be set and unset through the
 .Ic set
 and
 .Ic unset
-builtins, and can have their values interactively examined through the
-use of the
+builtins, and can have their values examined through the
 .Ic show
+and
+.Ic ifset
+builtins.
+Variables in command arguments or
+.Ar value
+in assignments
+.Dq ( $VAR
+and
+.Dq ${VAR} )
+refers to kernel environment variables.
+.Pp
+Local variables can be unset with
+.Ic lunset
+and
+.Ic lunsetif
+builtin, and can have their values examined through the
+.Ic local
 builtin.
 .Pp
 Notice that these environment variables are not inherited by any shell
 after the system has been booted, but can be examined by
 .Xr kenv 1 .
 .Pp
+Note that a variable can have two instances with differnet values:
+both a local variable instance and a kernel environment variable instance
+can exist for the same name and with different values.
+This can cause confusion and is seldom done on purpose.
+.Pp
 A few variables are set automatically by
 .Nm .
 Others can affect the behavior of either
@@ -397,7 +452,13 @@ while others define behavior just by being set.
 Both types of variables are described below.
 .Bl -tag -width indent
 .It Va acpi_load
-Unset this to disable automatic loading of the ACPI module.
+Used for handling automatic loading of the
+.Xr acpi 4
+module.
+To disable automatic loading of the ACPI module use:
+.Pp
+.Dl lunset acpi_load
+.Dl set hint.acpi.0.disabled=1
 .It Va autoboot_delay
 Number of seconds
 .Ic autoboot
@@ -445,8 +506,33 @@ Syntax for devices is odd.
 Selects default kernel loaded by
 .Ic menu
 command.
+Defaults to
+.Pa kernel .
+.It Va dumpdev
+The name of a device where the kernel can save a crash dump in case
+of a panic.
+This automatically sets the
+.Va kern.dumpdev
+.Xr sysctl 3
+.Tn MIB
+variable.
 .It Va ehci_load
-Unset this to disable automatic loading of the EHCI module.
+Used for handling automatic loading of the
+.Xr ehci.4
+module.
+To disable automatic loading of the EHCI module use:
+.Pp
+.Dl lunset ehci_load
+.Dl set hint.ehci.0.disabled=1
+.It Va init_chroot
+Directory
+.Xr init 8
+will
+.Fn chroot
+to on startup.
+By setting this variable
+.Dx
+can be run from a subdirectory of the root file system.
 .It Va init_path
 Sets the list of binaries which the kernel will try to run as the initial
 process.
@@ -479,6 +565,18 @@ Value of
 prompt.
 Defaults to
 .Dq Li OK .
+Kernel environment variables can be used in
+.Va prompt
+by including
+.Dq Li ${VAR} .
+E.g. (note that
+.Ql $
+must be escaped with
+.Ql \e
+to be included in
+.Va prompt ) :
+.Pp
+.Dl "set prompt=\*q\e${currdev} OK\*q"
 .It Va root_disk_unit
 If the code which detects the disk unit number for the root disk is
 confused, e.g.\& by a mix of
@@ -490,6 +588,10 @@ disks, or
 disks with
 gaps in the sequence (e.g.\& no primary slave), the unit number can
 be forced by setting this variable.
+.Pp
+See also
+.Va vfs.root.mountfrom
+variable.
 .It Va rootdev
 By default the value of
 .Va currdev
@@ -498,13 +600,9 @@ when the kernel is booted.
 This can be overridden by setting
 .Va rootdev
 explicitly.
-.It Va dumpdev
-The name of a device where the kernel can save a crash dump in case
-of a panic.
-This automatically sets the
-.Va kern.dumpdev
-.Xr sysctl 3
-.Tn MIB
+.Pp
+See also
+.Va vfs.root.mountfrom
 variable.
 .El
 .Pp
@@ -513,6 +611,11 @@ The following
 .Nm
 tunables are available:
 .Bl -tag -width indent
+.It Va hw.ioapic_enable
+Control use of
+.Tn I/O APIC .
+Set to 1 to enable, 0 to disable.
+Default is 1.
 .It Va hw.irq.X.dest
 Set irqX's destination to the given
 .Tn CPUID ,
@@ -523,8 +626,8 @@ then the first
 .Tn CPUID
 will be used.
 This variable should not be used if
-.Tn IO/APIC
-support is not compiled into kernel.
+.Tn I/O APIC
+use is disabled.
 .It Va hw.physmem
 Limit the amount of physical memory the system will use.
 By default the size is in bytes, but the
@@ -651,39 +754,44 @@ You may not specify devtab labels here but you can specify paths available to
 .Xr devfs 5
 such as:
 .Dl hammer:serno/L41JYE0G.s1d
+.It Va vfs.root.realroot
+Root file system and extra options for
+.Nm initrd .
+See
+.Xr mkinitrd 8 .
 .El
 .Sh FILES
 .Bl -tag -width /boot/defaults/dloader.menu -compact
 .It Pa /boot/boot.conf
 .Nm
 bootstrapping script.
-Deprecated.
-.It Pa /boot/loader
-.Nm
-itself.
+Deprecated
 .It Pa /boot/defaults/dloader.menu
 .Nm
-menu setup commands -- do not change this file.
+menu setup commands -- do not change this file
 .It Pa /boot/defaults/loader.conf
 .Nm
 configuration file, see
 .Xr loader.conf 5
--- do not change this file.
+-- do not change this file
 .It Pa /boot/dloader.menu
 .Nm
-menu setup commands.
+menu setup commands
 .It Pa /boot/dloader.rc
 .Nm
-bootstrapping script.
+bootstrapping script
+.It Pa /boot/loader
+.Nm
+itself
 .It Pa /boot/loader.conf
 .It Pa /boot/loader.conf.local
 .Nm
 configuration files, see
-.Xr loader.conf 5 .
+.Xr loader.conf 5
 .It Pa /boot/loader.help
 help messages, used by the
 .Ic help
-command.
+command
 .El
 .Sh EXAMPLES
 Boot in single user mode:
@@ -719,11 +827,16 @@ set root_disk_unit=2
 boot kernel
 .Ed
 .Sh SEE ALSO
+.Xr kenv 1 ,
 .Xr libstand 3 ,
+.Xr acpi 4,
+.Xr ehci 4,
 .Xr loader.conf 5 ,
 .Xr tuning 7 ,
 .Xr boot 8 ,
 .Xr btxld 8 ,
+.Xr cryptsetup 8 ,
+.Xr lvm 8 ,
 .Xr pxeboot 8 ,
 .Xr pxeboot_tftp 8 ,
 .Xr sysctl 8
@@ -747,3 +860,6 @@ was written by
 .Nm dloader
 was written by
 .An Matthew Dillon Aq dillon@backplane.com .
+.Sh BUGS
+A variable can have two instances: local & kernel environment,
+this can cause confusion.
index 3110324..a14defb 100644 (file)
@@ -50,11 +50,11 @@ dloader_init_cmds(void)
 }
 
 /*
- * This intercepts lines of the form 'a=b'
+ * "local" intercepts assignments: lines of the form 'a=b'
  */
 COMMAND_SET(local, "local", "List local variables", command_local);
 COMMAND_SET(lunset, "lunset", "Unset local variable", command_lunset);
-COMMAND_SET(lunsetif, "lunsetif", "Unset local if envvar set to 1 or YES", command_lunsetif);
+COMMAND_SET(lunsetif, "lunsetif", "Unset local variable if kenv variable is true", command_lunsetif);
 COMMAND_SET(loadall, "loadall", "Load kernel + modules", command_loadall);
 COMMAND_SET(menuclear, "menuclear", "Clear all menus", command_menuclear);
 COMMAND_SET(menuitem, "menuitem", "Add menu bullet", command_menuitem);
@@ -66,6 +66,7 @@ static int curadd;
 
 static char *kenv_vars[] = {
        "LINES",
+       "acpi_load",
        "autoboot_delay",
        "boot_askname",
        "boot_cdrom",
@@ -79,13 +80,19 @@ static char *kenv_vars[] = {
        "bootfile",
        "console",
        "currdev",
-       "dumpdev",
        "default_kernel",
+       "dumpdev",
+       "ehci_load",
+       "interpret",
+       "init_chroot",
        "init_path",
        "kernel_options",
        "kernelname",
        "loaddev",
        "module_path",
+       "num_ide_disks",
+       "prompt",
+       "rootdev",
        "root_disk_unit",
        NULL
 };
index 9d0ee64..18736e1 100644 (file)
@@ -6,10 +6,12 @@
        The ACPI driver provides support for the Advanced Configuration and
        Power Management standard.
 
+       The ACPI kernel module is by default loaded automatically.
+
        If the acpi_load variable is set, the ACPI module will be loaded.
        The ACPI driver can be disabled with:
 
-               unset acpi_load
+               lunset acpi_load
                set hint.acpi.0.disabled=1
 
        Note that the ACPI autodetection sets a number of hints to
@@ -70,4 +72,6 @@
        gaps in the sequence (i.e. no primary slave), the unit number can be
        forced by setting this variable.
 
+       See also vfs.root.mountfrom variable, under `set tunables' help item.
+
 ################################################################################