]> Zhao Yanbai Git Server - minix.git/commitdiff
Adjust boot from NetBSD.
authorEvgeniy Ivanov <lolkaantimat@gmail.com>
Sat, 4 Feb 2012 10:21:30 +0000 (14:21 +0400)
committerBen Gras <ben@minix3.org>
Thu, 9 Feb 2012 17:48:13 +0000 (18:48 +0100)
- Add load_mods command to boot2 (load_mods /dir/mod*).
- Rename resulting binary to boot_monitor.
- Change default banner when used in MINIX.

14 files changed:
man/man8/boot.8
sys/arch/i386/stand/boot/biosboot/Makefile
sys/arch/i386/stand/boot/boot2.c
sys/lib/libsa/cd9660.c
sys/lib/libsa/dosfs.c
sys/lib/libsa/ext2fs.c
sys/lib/libsa/ls.c
sys/lib/libsa/minixfs3.c
sys/lib/libsa/nfs.c
sys/lib/libsa/nullfs.c
sys/lib/libsa/stand.h
sys/lib/libsa/tftp.c
sys/lib/libsa/ufs.c
sys/lib/libsa/ustarfs.c

index e61c32469a82bf643c9dd007018859867b798559..1da348daa731f061a57ede0a780e25033e0f6973 100644 (file)
@@ -458,6 +458,8 @@ PCI domain IDs are currently ignored.
 See
 .Xr pciback 4 .
 .El
+.It Ic load_mods Va mods_path_pattern
+Load modules specified by pattern like /some_path/mod*.
 .It Ic ls Op Pa path
 Print a directory listing of
 .Pa path ,
index 96780c17b9068fd24e4ec20a55474994b4e2c8c1..843d4b9f0d84858c430d78532600e8c26c0953da 100644 (file)
@@ -1,5 +1,5 @@
 # $NetBSD: Makefile,v 1.3 2005/12/11 12:17:48 christos Exp $
 
-PROG=  boot
+PROG=  boot_monitor
 
 .include <../Makefile.boot>
index 6356bcba48ac1c75132ba3a84d2bc702ed8dc350..695f6215cdd402c892e8b9cd3e6d8b952ae03ce2 100644 (file)
@@ -122,6 +122,7 @@ void        command_dev(char *);
 void   command_consdev(char *);
 void   command_modules(char *);
 void   command_multiboot(char *);
+void   command_load_mods(char *);
 
 const struct bootblk_command commands[] = {
        { "help",       command_help },
@@ -133,6 +134,7 @@ const struct bootblk_command commands[] = {
        { "consdev",    command_consdev },
        { "modules",    command_modules },
        { "load",       module_add },
+       { "load_mods",  command_load_mods },
        { "multiboot",  command_multiboot },
        { "vesa",       command_vesa },
        { "splash",     splash_add },
@@ -261,11 +263,18 @@ print_banner(void)
                        printf("%s\n", bootconf.banner[n]);
        } else {
 #endif /* !SMALL */
+#ifndef __minix
                printf("\n"
                       ">> %s, Revision %s (from NetBSD %s)\n"
                       ">> Memory: %d/%d k\n",
                       bootprog_name, bootprog_rev, bootprog_kernrev,
                       getbasemem(), getextmem());
+#else
+               printf("\n"
+                       "--- Welcome to MINIX 3. This is the boot monitor. ---\n"
+                       "Memory: %d/%d k\n",
+                       getbasemem(), getextmem());
+#endif
 
 #ifndef SMALL
        }
@@ -396,6 +405,7 @@ command_help(char *arg)
               "vesa {modenum|on|off|enabled|disabled|list}\n"
               "modules {on|off|enabled|disabled}\n"
               "load {path_to_module}\n"
+              "load_mods {path_to_modules}, pattern might be used\n"
               "multiboot [xdNx:][filename] [<args>]\n"
               "userconf {command}\n"
               "rndseed {path_to_rndseed_file}\n"
@@ -409,7 +419,17 @@ command_ls(char *arg)
        const char *save = default_filename;
 
        default_filename = "/";
-       ls(arg);
+       ls(arg, NULL);
+       default_filename = save;
+}
+
+void
+command_load_mods(char *arg)
+{
+       const char *save = default_filename;
+
+       default_filename = "/";
+       ls(arg, module_add);
        default_filename = save;
 }
 
index fa14180425e7a8bca71911299ae858812bdacbd9..1333c8c43e5f257bee6abc8853b6d43b8deaf7dd 100644 (file)
@@ -399,7 +399,8 @@ cd9660_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-cd9660_ls(struct open_file *f, const char *pattern)
+cd9660_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        printf("Currently ls command is unsupported by cd9660\n");
        return;
index 82ddfbdf99b2f128a235037246e94f6bc18d0659..383c5a96cd4044157df873df7e3a4c48df62039f 100644 (file)
@@ -407,7 +407,8 @@ dosfs_stat(struct open_file *fd, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-dosfs_ls(struct open_file *f, const char *pattern)
+dosfs_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        printf("Currently ls command is unsupported by dosfs\n");
        return;
index dc3b49f962744ed6f7c7013442d3857642eec731..53f94795d751fba1a711784deeafd92f165f0094 100644 (file)
@@ -858,7 +858,8 @@ ext2fs_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-ext2fs_ls(struct open_file *f, const char *pattern)
+ext2fs_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        struct file *fp = (struct file *)f->f_fsdata;
        size_t block_size = fp->f_fs->e2fs_bsize;
index 0f64a284a7027fe18b3acf6c35dabf9fffa5dbb0..b2169d15a5e413a9feaf25849ddbb98c695dc8aa 100644 (file)
 #include <lib/libkern/libkern.h>
 
 void
-ls(const char *path)
+ls(const char *path, void (*funcp)(char* arg))
 {
        int             fd;
        struct stat     sb;
        size_t          size;
        const char      *fname = 0;
-       char            *p;
+       char            *p = NULL;
        struct open_file *f;
 
        if ((fd = open(path, 0)) < 0
@@ -115,7 +115,6 @@ ls(const char *path)
                        memcpy(p, path, size);
                        p[size] = 0;
                        fd = open(p, 0);
-                       dealloc(p, size + 1);
                } else {
                        fd = open("", 0);
                        fname = path;
@@ -153,10 +152,12 @@ ls(const char *path)
 #endif
 
        if (FS_LS(f->f_ops) != NULL)
-               FS_LS(f->f_ops)(f, fname);
+               FS_LS(f->f_ops)(f, fname, funcp, p);
        else
                printf("no ls support for this file system\n");
 
 out:
+       if (p != NULL)
+               dealloc(p, size + 1);
        close(fd);
 }
index a72217302aa52299c244b93a50cc948c275ff316..15396df814054b682c23c3c459ebe46dd3d23861 100644 (file)
@@ -861,7 +861,8 @@ minixfs3_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-minixfs3_ls(struct open_file *f, const char *pattern)
+minixfs3_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        struct file *fp = (struct file *)f->f_fsdata;
        struct mfs_sblock *fs = fp->f_fs;
@@ -927,8 +928,24 @@ minixfs3_ls(struct open_file *f, const char *pattern)
                entry_t *p_names = names;
                do {
                        n = p_names;
-                       printf("%d: %s\n",
-                               n->e_ino, n->e_name);
+                       if (funcp) {
+                               /* Call handler for each file instead of
+                                * printing. Used by load_mods command.
+                                */
+                               char namebuf[MAXPATHLEN+1];
+                               namebuf[0] = '\0';
+                               if (path != pattern) {
+                                       strcpy(namebuf, path);
+                                       namebuf[strlen(path)] = '/';
+                                       namebuf[strlen(path) + 1] = '\0';
+                               }
+                               strcat(namebuf, n->e_name);
+
+                               funcp(namebuf);
+                       } else {
+                               printf("%d: %s\n",
+                                       n->e_ino, n->e_name);
+                       }
                        p_names = n->e_next;
                } while (p_names);
        } else {
index 6fadec026092a44226ee51545da72e33be940c8d..9f2b5d7f61d38c48353e0201203e37ee4510c759 100644 (file)
@@ -658,7 +658,8 @@ nfs_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-nfs_ls(struct open_file *f, const char *pattern)
+nfs_ls(struct open_file *f, const char *pattern,
+       void (*funcp)(char* arg), char* path)
 {
        printf("Currently ls command is unsupported by nfs\n");
        return;
index 558de60118ded0440615dbbe2dc3513a770031c5..10c6673d44e2c5ec25320a8a0aaa7504dd201b8f 100644 (file)
@@ -116,7 +116,8 @@ null_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-null_ls(struct open_file *f, const char *pattern)
+null_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        printf("Currently ls command is unsupported by nullfs\n");
        return;
index a9d57200bc19a57daa19902dc13d16edeab18819..0e1ae7379bcce567b749974526176c178b6401fb 100644 (file)
@@ -100,7 +100,8 @@ struct open_file;
 #if defined(LIBSA_ENABLE_LS_OP)
 #define FS_DEF(fs) \
        FS_DEF_BASE(fs);\
-       extern __compactcall void       __CONCAT(fs,_ls)(struct open_file *, const char *)
+       extern __compactcall void       __CONCAT(fs,_ls)(struct open_file *, const char *,\
+                                                       void (*)(char* arg), char*)
 #else
 #define FS_DEF(fs) FS_DEF_BASE(fs)
 #endif
@@ -122,7 +123,8 @@ struct fs_ops {
        __compactcall off_t     (*seek)(struct open_file *, off_t, int);
        __compactcall int       (*stat)(struct open_file *, struct stat *);
 #if defined(LIBSA_ENABLE_LS_OP)
-       __compactcall void      (*ls)(struct open_file *, const char *);
+       __compactcall void      (*ls)(struct open_file *, const char *,
+                                       void (*)(char* arg), char*);
 #endif
 };
 
@@ -286,7 +288,7 @@ int ioctl(int, u_long, char *);
 int    stat(const char *, struct stat *);
 int    fstat(int, struct stat *);
 #if defined(LIBSA_ENABLE_LS_OP)
-void   ls(const char *);
+void   ls(const char *, void (*funcp)(char* arg));
 #endif
 
 typedef int cmp_t(const void *, const void *);
index f6a025d4440c08c7af9056ef99fbc1d373e35b8e..8d508cdaa1121f637034c859879fa6ef2f661e8f 100644 (file)
@@ -431,7 +431,8 @@ tftp_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-tftp_ls(struct open_file *f, const char *pattern)
+tftp_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        printf("Currently ls command is unsupported by tftp\n");
        return;
index 63be30be6c3afd24c57f388b6a696ff846e5483d..f491c9821866923b07f676154f803bf9c4fcef45 100644 (file)
@@ -914,7 +914,8 @@ ufs_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-ufs_ls(struct open_file *f, const char *pattern)
+ufs_ls(struct open_file *f, const char *pattern,
+       void (*funcp)(char* arg), char* path)
 {
        struct file *fp = (struct file *)f->f_fsdata;
        char *buf;
index 6dbe842f08fc08351f2541afaaaf851e57db78d7..9349d909e4b38e95b94bcaa4c28f9ab763d3dddf 100644 (file)
@@ -540,7 +540,8 @@ ustarfs_stat(struct open_file *f, struct stat *sb)
 
 #if defined(LIBSA_ENABLE_LS_OP)
 __compactcall void
-ustarfs_ls(struct open_file *f, const char *pattern)
+ustarfs_ls(struct open_file *f, const char *pattern,
+               void (*funcp)(char* arg), char* path)
 {
        printf("Currently ls command is unsupported by ustarfs\n");
        return;