Example /etc/userconf file:
disable usb

Example boot.cfg entry:
menu=Disable usb and boot:userconf /etc/userconf;boot

Index: sys/kern/subr_userconf.c
===================================================================
RCS file: /cvsroot/src/sys/kern/subr_userconf.c,v
retrieving revision 1.18
diff -u -r1.18 subr_userconf.c
--- sys/kern/subr_userconf.c    11 Dec 2005 12:24:30 -0000      1.18
+++ sys/kern/subr_userconf.c    23 Oct 2008 20:15:49 -0000
@@ -45,6 +45,8 @@
#include <sys/malloc.h>
#include <sys/time.h>

+#include <machine/bootinfo.h>
+
#include <dev/cons.h>

extern struct cfdata cfdata[];
@@ -810,16 +812,47 @@
user_config(void)
{
       char prompt[] = "uc> ";
-
+#ifdef BI_MODULE_USERCONF
+       int num;
+       struct btinfo_modulelist *bim;
+       struct bi_modulelist_entry *bme;
+       char *com, *buf, *end;
+#endif
+
       userconf_init();
       printf("userconf: configure system autoconfiguration:\n");
-
-       while (1) {
-               printf(prompt);
-               if (getsn(userconf_cmdbuf, sizeof(userconf_cmdbuf)) > 0 &&
-                   userconf_parse(userconf_cmdbuf))
-                       break;
+#ifdef BI_MODULE_USERCONF
+       if ((bim = lookup_bootinfo(BTINFO_MODULELIST)) != NULL) {
+               num = 0;
+               bme = (struct bi_modulelist_entry *)((uint8_t *)bim +
+                   sizeof(struct btinfo_modulelist));
+               for (; num < bim->num; num++, bme++) {
+                       if (bme->type != BI_MODULE_USERCONF)
+                           continue;
+                       buf = (char *)(bme->base + KERNBASE);
+                       end = buf + bme->len;
+                       for (; buf < end; ) {
+                               com = buf;
+                               for (; buf < end && *buf != '\n'; buf++)
+                                   ;
+                               if (*buf == '\n') {
+                                       *buf++ = '\0';
+                                       printf("%s%s\n", prompt, com);
+                                       userconf_parse(com);
+                               }
+                       }
+               }
+       } else {
+#endif /* BI_MODULE_USERCONF */
+               while (1) {
+                       printf(prompt);
+                       if (getsn(userconf_cmdbuf, sizeof(userconf_cmdbuf)) > 0 &&
+                           userconf_parse(userconf_cmdbuf))
+                               break;
+               }
+#ifdef BI_MODULE_USERCONF
       }
+#endif /* BI_MODULE_USERCONF */
       printf("Continuing...\n");
}

Index: sys/arch/x86/include/bootinfo.h
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/include/bootinfo.h,v
retrieving revision 1.14
diff -u -r1.14 bootinfo.h
--- sys/arch/x86/include/bootinfo.h     9 Sep 2008 12:09:31 -0000       1.14
+++ sys/arch/x86/include/bootinfo.h     23 Oct 2008 20:15:49 -0000
@@ -172,6 +172,7 @@
};
#define        BI_MODULE_NONE          0x00
#define        BI_MODULE_ELF           0x01
+#define        BI_MODULE_USERCONF      0x02

struct btinfo_modulelist {
       struct btinfo_common common;
Index: sys/arch/i386/stand/boot/boot2.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/boot/boot2.c,v
retrieving revision 1.38
diff -u -r1.38 boot2.c
--- sys/arch/i386/stand/boot/boot2.c    11 Oct 2008 11:06:19 -0000      1.38
+++ sys/arch/i386/stand/boot/boot2.c    23 Oct 2008 20:15:50 -0000
@@ -78,6 +78,7 @@
#include <libi386.h>
#include "devopen.h"
#include "bootmod.h"
+#include "bootinfo.h"

#ifdef SUPPORT_PS2
#include <biosmca.h>
@@ -118,7 +119,7 @@
void bootit(const char *, int, int);
void print_banner(void);
void boot2(int, u_int);
-
+void blob_load(char *, int);
#ifndef SMALL
void parsebootconf(const char *);
void doboottypemenu(void);
@@ -134,6 +135,7 @@
void   command_modules(char *);
void   command_load(char *);
void   command_multiboot(char *);
+void   command_userconf(char *);

const struct bootblk_command commands[] = {
       { "help",       command_help },
@@ -146,6 +148,7 @@
       { "modules",    command_modules },
       { "load",       command_load },
       { "multiboot",  command_multiboot },
+       { "userconf",   command_userconf },
       { NULL,         NULL },
};

@@ -688,6 +691,7 @@
              "modules {enabled|disabled}\n"
              "load {path_to_module}\n"
              "multiboot [xdNx:][filename] [<args>]\n"
+              "userconf {path_to_script}\n"
              "help|?\n"
              "quit\n");
}
@@ -799,6 +803,18 @@
void
command_load(char *arg)
{
+       blob_load(arg, BI_MODULE_ELF);
+}
+
+void
+command_userconf(char *arg)
+{
+       blob_load(arg, BI_MODULE_USERCONF);
+}
+
+void
+blob_load(char *arg, int type)
+{
       boot_module_t *bm, *bmp;
       size_t len;
       char *str;
@@ -816,6 +832,7 @@
       memcpy(str, arg, len);
       bm->bm_path = str;
       bm->bm_next = NULL;
+       bm->bm_type = type;
       if (boot_modules == NULL)
               boot_modules = bm;
       else {
Index: sys/arch/i386/stand/lib/bootmod.h
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/lib/bootmod.h,v
retrieving revision 1.3
diff -u -r1.3 bootmod.h
--- sys/arch/i386/stand/lib/bootmod.h   5 May 2008 00:12:49 -0000       1.3
+++ sys/arch/i386/stand/lib/bootmod.h   23 Oct 2008 20:15:50 -0000
@@ -32,6 +32,7 @@
typedef struct boot_module {
       char                    *bm_path;
       ssize_t                 bm_len;
+       int                     bm_type;
       struct boot_module      *bm_next;
} boot_module_t;

Index: sys/arch/i386/stand/lib/exec.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/lib/exec.c,v
retrieving revision 1.33
diff -u -r1.33 exec.c
--- sys/arch/i386/stand/lib/exec.c      11 Oct 2008 11:06:20 -0000      1.33
+++ sys/arch/i386/stand/lib/exec.c      23 Oct 2008 20:15:51 -0000
@@ -133,7 +133,7 @@
static uint32_t image_end;
static char module_base[64] = "/";

-static void    module_init(void);
+static void    module_init(int *);

static int
common_load_kernel(const char *file, u_long *basemem, u_long *extmem,
@@ -239,7 +239,6 @@
       if (common_load_kernel(file, &basemem, &extmem, loadaddr, floppy, marks))
               goto out;

-       boot_argv[0] = boothowto;
       boot_argv[1] = 0;
       boot_argv[2] = vtophys(bootinfo);       /* old cyl offset */
       boot_argv[3] = marks[MARK_END];
@@ -248,12 +247,13 @@

       /* pull in any modules if necessary */
       if (boot_modules_enabled) {
-               module_init();
+               module_init(&boothowto);
               if (btinfo_modulelist) {
                       BI_ADD(btinfo_modulelist, BTINFO_MODULELIST,
                           btinfo_modulelist_size);
               }
       }
+       boot_argv[0] = boothowto;

#ifdef DEBUG
       printf("Start @ 0x%lx [%ld=0x%lx-0x%lx]...\n", marks[MARK_ENTRY],
@@ -321,7 +321,7 @@
}

static void
-module_init(void)
+module_init(int *boothowto)
{
       struct bi_modulelist_entry *bi;
       struct stat st;
@@ -412,7 +412,20 @@
                       strncpy(bi->path, bm->bm_path, sizeof(bi->path) - 1);
                       bi->base = image_end;
                       bi->len = len;
-                       bi->type = BI_MODULE_ELF;
+                       bi->type = bm->bm_type;
+                       switch(bi->type) {
+                       case BI_MODULE_ELF:
+                               printf(" (ELF module)");
+                               break;
+                       case BI_MODULE_USERCONF:
+                               if (boothowto != NULL)
+                                       *boothowto |= RB_USERCONF;
+                               printf(" (userconf script)");
+                               break;
+                       default:
+                               printf(" (unknown type)");
+                               break;
+                       }
                       printf(" \n");
               }
               if (len > 0)
@@ -453,7 +466,7 @@

       /* pull in any modules if necessary */
       if (boot_modules_enabled) {
-               module_init();
+               module_init(NULL);
               if (btinfo_modulelist) {
                       mbm = alloc(sizeof(struct multiboot_module) *
                                          btinfo_modulelist->num);