Changeset b5e68c8 in mainline for uspace/app/init/init.c


Ignore:
Timestamp:
2011-05-12T16:49:44Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f36787d7
Parents:
e80329d6 (diff), 750636a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/init/init.c

    re80329d6 rb5e68c8  
    3737#include <stdio.h>
    3838#include <unistd.h>
    39 #include <ipc/ipc.h>
    4039#include <vfs/vfs.h>
    4140#include <bool.h>
     
    5756#define DEVFS_MOUNT_POINT  "/dev"
    5857
    59 #define SCRATCH_FS_TYPE      "tmpfs"
    60 #define SCRATCH_MOUNT_POINT  "/scratch"
     58#define TMPFS_FS_TYPE      "tmpfs"
     59#define TMPFS_MOUNT_POINT  "/tmp"
    6160
    6261#define DATA_FS_TYPE      "fat"
    63 #define DATA_DEVICE       "bd/disk0"
     62#define DATA_DEVICE       "bd/ata1disk0"
    6463#define DATA_MOUNT_POINT  "/data"
    6564
     
    124123static void spawn(const char *fname)
    125124{
    126         const char *argv[2];
     125        int rc;
    127126        struct stat s;
    128127       
     
    131130       
    132131        printf("%s: Spawning %s\n", NAME, fname);
    133        
    134         argv[0] = fname;
    135         argv[1] = NULL;
    136        
    137         int err;
    138         if (!task_spawn(fname, argv, &err))
     132        rc = task_spawnl(NULL, fname, fname, NULL);
     133        if (rc != EOK) {
    139134                printf("%s: Error spawning %s (%s)\n", NAME, fname,
    140                     str_error(err));
     135                    str_error(rc));
     136        }
    141137}
    142138
    143139static void srv_start(const char *fname)
    144140{
    145         const char *argv[2];
    146141        task_id_t id;
    147142        task_exit_t texit;
     
    153148       
    154149        printf("%s: Starting %s\n", NAME, fname);
    155        
    156         argv[0] = fname;
    157         argv[1] = NULL;
    158        
    159         id = task_spawn(fname, argv, &retval);
     150        rc = task_spawnl(&id, fname, fname, NULL);
    160151        if (!id) {
    161152                printf("%s: Error spawning %s (%s)\n", NAME, fname,
    162                     str_error(retval));
     153                    str_error(rc));
    163154                return;
    164155        }
     
    167158        if (rc != EOK) {
    168159                printf("%s: Error waiting for %s (%s(\n", NAME, fname,
    169                     str_error(retval));
    170                 return;
    171         }
    172        
    173         if ((texit != TASK_EXIT_NORMAL) || (retval != 0)) {
    174                 printf("%s: Server %s failed to start (%s)\n", NAME,
    175                         fname, str_error(retval));
     160                    str_error(rc));
     161                return;
     162        }
     163       
     164        if (texit != TASK_EXIT_NORMAL) {
     165                printf("%s: Server %s failed to start (unexpectedly "
     166                    "terminated)\n", NAME, fname);
     167                return;
     168        }
     169
     170        if (retval != 0) {
     171                printf("%s: Server %s failed to start (exit code %d)\n", NAME,
     172                        fname, retval);
    176173        }
    177174}
     
    179176static void console(const char *dev)
    180177{
    181         const char *argv[3];
    182178        char hid_in[DEVMAP_NAME_MAXLEN];
    183179        int rc;
     
    188184       
    189185        /* Wait for the input device to be ready */
    190         dev_handle_t handle;
     186        devmap_handle_t handle;
    191187        rc = devmap_device_get_handle(dev, &handle, IPC_FLAG_BLOCKING);
    192        
    193         if (rc == EOK) {
    194                 argv[0] = SRV_CONSOLE;
    195                 argv[1] = hid_in;
    196                 argv[2] = NULL;
    197                
    198                 if (!task_spawn(SRV_CONSOLE, argv, &rc))
    199                         printf("%s: Error spawning %s %s (%s)\n", NAME, SRV_CONSOLE,
    200                             hid_in, str_error(rc));
    201         } else
     188        if (rc != EOK) {
    202189                printf("%s: Error waiting on %s (%s)\n", NAME, hid_in,
    203190                    str_error(rc));
    204 }
    205 
    206 static void getterm(const char *dev, const char *app)
    207 {
    208         const char *argv[4];
     191                return;
     192        }
     193       
     194        rc = task_spawnl(NULL, SRV_CONSOLE, SRV_CONSOLE, hid_in, NULL);
     195        if (rc != EOK) {
     196                printf("%s: Error spawning %s %s (%s)\n", NAME, SRV_CONSOLE,
     197                    hid_in, str_error(rc));
     198        }
     199}
     200
     201static void getterm(const char *dev, const char *app, bool wmsg)
     202{
    209203        char term[DEVMAP_NAME_MAXLEN];
    210204        int rc;
     
    215209       
    216210        /* Wait for the terminal device to be ready */
    217         dev_handle_t handle;
     211        devmap_handle_t handle;
    218212        rc = devmap_device_get_handle(dev, &handle, IPC_FLAG_BLOCKING);
    219        
    220         if (rc == EOK) {
    221                 argv[0] = APP_GETTERM;
    222                 argv[1] = term;
    223                 argv[2] = app;
    224                 argv[3] = NULL;
    225                
    226                 if (!task_spawn(APP_GETTERM, argv, &rc))
    227                         printf("%s: Error spawning %s %s %s (%s)\n", NAME, APP_GETTERM,
    228                             term, app, str_error(rc));
    229         } else
     213        if (rc != EOK) {
    230214                printf("%s: Error waiting on %s (%s)\n", NAME, term,
    231215                    str_error(rc));
    232 }
    233 
    234 static bool mount_scratch(void)
    235 {
    236         int rc = mount(SCRATCH_FS_TYPE, SCRATCH_MOUNT_POINT, "", "", 0);
    237         return mount_report("Scratch filesystem", SCRATCH_MOUNT_POINT,
    238             SCRATCH_FS_TYPE, NULL, rc);
     216                return;
     217        }
     218       
     219        if (wmsg) {
     220                rc = task_spawnl(NULL, APP_GETTERM, APP_GETTERM, "-w", term,
     221                    app, NULL);
     222                if (rc != EOK) {
     223                        printf("%s: Error spawning %s -w %s %s (%s)\n", NAME,
     224                            APP_GETTERM, term, app, str_error(rc));
     225                }
     226        } else {
     227                rc = task_spawnl(NULL, APP_GETTERM, APP_GETTERM, term, app,
     228                    NULL);
     229                if (rc != EOK) {
     230                        printf("%s: Error spawning %s %s %s (%s)\n", NAME,
     231                            APP_GETTERM, term, app, str_error(rc));
     232                }
     233        }
     234}
     235
     236static bool mount_tmpfs(void)
     237{
     238        int rc = mount(TMPFS_FS_TYPE, TMPFS_MOUNT_POINT, "", "", 0);
     239        return mount_report("Temporary filesystem", TMPFS_MOUNT_POINT,
     240            TMPFS_FS_TYPE, NULL, rc);
    239241}
    240242
     
    268270        }
    269271       
    270         mount_scratch();
    271        
     272        mount_tmpfs();
     273       
     274#ifdef CONFIG_START_DEVMAN
     275        spawn("/srv/devman");
     276#endif
     277        spawn("/srv/apic");
     278        spawn("/srv/i8259");
    272279        spawn("/srv/fhc");
    273280        spawn("/srv/obio");
     
    302309#endif
    303310       
    304         getterm("term/vc0", "/app/bdsh");
    305         getterm("term/vc1", "/app/bdsh");
    306         getterm("term/vc2", "/app/bdsh");
    307         getterm("term/vc3", "/app/bdsh");
    308         getterm("term/vc4", "/app/bdsh");
    309         getterm("term/vc5", "/app/bdsh");
    310         getterm("term/vc6", "/app/klog");
     311        getterm("term/vc0", "/app/bdsh", true);
     312        getterm("term/vc1", "/app/bdsh", false);
     313        getterm("term/vc2", "/app/bdsh", false);
     314        getterm("term/vc3", "/app/bdsh", false);
     315        getterm("term/vc4", "/app/bdsh", false);
     316        getterm("term/vc5", "/app/bdsh", false);
     317        getterm("term/vc6", "/app/klog", false);
    311318       
    312319        return 0;
Note: See TracChangeset for help on using the changeset viewer.