Changeset 371bd7d in mainline for uspace/app/init/init.c


Ignore:
Timestamp:
2010-03-27T09:22:17Z (15 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
36a75a2
Parents:
cd82bb1 (diff), eaf22d4 (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

    rcd82bb1 r371bd7d  
    4646#include <malloc.h>
    4747#include <macros.h>
    48 #include <string.h>
     48#include <str.h>
    4949#include <devmap.h>
    5050#include "init.h"
    5151
     52#define DEVFS_MOUNT_POINT  "/dev"
     53
     54#define SRV_CONSOLE  "/srv/console"
     55#define APP_GETTERM  "/app/getterm"
     56
    5257static void info_print(void)
    5358{
     
    5762static bool mount_root(const char *fstype)
    5863{
    59         char *opts = "";
    60         const char *root_dev = "initrd";
     64        const char *opts = "";
     65        const char *root_dev = "bd/initrd";
    6166       
    6267        if (str_cmp(fstype, "tmpfs") == 0)
     
    8994static bool mount_devfs(void)
    9095{
    91         char null[MAX_DEVICE_NAME];
    92         int null_id = devmap_null_create();
    93        
    94         if (null_id == -1) {
    95                 printf(NAME ": Unable to create null device\n");
    96                 return false;
    97         }
    98        
    99         snprintf(null, MAX_DEVICE_NAME, "null%d", null_id);
    100         int rc = mount("devfs", "/dev", null, "", IPC_FLAG_BLOCKING);
     96        int rc = mount("devfs", DEVFS_MOUNT_POINT, "", "", IPC_FLAG_BLOCKING);
    10197       
    10298        switch (rc) {
     
    106102        case EBUSY:
    107103                printf(NAME ": Device filesystem already mounted\n");
    108                 devmap_null_destroy(null_id);
    109104                return false;
    110105        case ELIMIT:
    111106                printf(NAME ": Unable to mount device filesystem\n");
    112                 devmap_null_destroy(null_id);
    113107                return false;
    114108        case ENOENT:
    115109                printf(NAME ": Unknown filesystem type (devfs)\n");
    116                 devmap_null_destroy(null_id);
    117110                return false;
    118111        default:
    119112                printf(NAME ": Error mounting device filesystem (%d)\n", rc);
    120                 devmap_null_destroy(null_id);
    121113                return false;
    122114        }
     
    125117}
    126118
    127 static void spawn(char *fname)
    128 {
    129         char *argv[2];
     119static void spawn(const char *fname)
     120{
     121        const char *argv[2];
    130122        struct stat s;
    131123       
     
    142134}
    143135
    144 static void srv_start(char *fname)
    145 {
    146         char *argv[2];
     136static void srv_start(const char *fname)
     137{
     138        const char *argv[2];
    147139        task_id_t id;
    148140        task_exit_t texit;
     
    170162        }
    171163
    172         if (texit != TASK_EXIT_NORMAL || retval != 0) {
     164        if ((texit != TASK_EXIT_NORMAL) || (retval != 0)) {
    173165                printf(NAME ": Server %s failed to start (returned %d)\n",
    174166                        fname, retval);
     
    176168}
    177169
    178 static void getvc(char *dev, char *app)
    179 {
    180         char *argv[4];
    181         char vc[MAX_DEVICE_NAME];
     170static void console(const char *dev)
     171{
     172        const char *argv[3];
     173        char hid_in[DEVMAP_NAME_MAXLEN];
    182174        int rc;
    183175       
    184         snprintf(vc, MAX_DEVICE_NAME, "/dev/%s", dev);
    185        
    186         printf(NAME ": Spawning getvc on %s\n", vc);
    187        
     176        snprintf(hid_in, DEVMAP_NAME_MAXLEN, "%s/%s", DEVFS_MOUNT_POINT, dev);
     177       
     178        printf(NAME ": Spawning %s with %s\n", SRV_CONSOLE, hid_in);
     179       
     180        /* Wait for the input device to be ready */
    188181        dev_handle_t handle;
    189182        rc = devmap_device_get_handle(dev, &handle, IPC_FLAG_BLOCKING);
    190183       
    191184        if (rc == EOK) {
    192                 argv[0] = "/app/getvc";
    193                 argv[1] = vc;
     185                argv[0] = SRV_CONSOLE;
     186                argv[1] = hid_in;
     187                argv[2] = NULL;
     188               
     189                if (!task_spawn(SRV_CONSOLE, argv))
     190                        printf(NAME ": Error spawning %s with %s\n", SRV_CONSOLE, hid_in);
     191        } else
     192                printf(NAME ": Error waiting on %s\n", hid_in);
     193}
     194
     195static void getterm(const char *dev, const char *app)
     196{
     197        const char *argv[4];
     198        char term[DEVMAP_NAME_MAXLEN];
     199        int rc;
     200       
     201        snprintf(term, DEVMAP_NAME_MAXLEN, "%s/%s", DEVFS_MOUNT_POINT, dev);
     202       
     203        printf(NAME ": Spawning %s with %s %s\n", APP_GETTERM, term, app);
     204       
     205        /* Wait for the terminal device to be ready */
     206        dev_handle_t handle;
     207        rc = devmap_device_get_handle(dev, &handle, IPC_FLAG_BLOCKING);
     208       
     209        if (rc == EOK) {
     210                argv[0] = APP_GETTERM;
     211                argv[1] = term;
    194212                argv[2] = app;
    195213                argv[3] = NULL;
    196214               
    197                 if (!task_spawn("/app/getvc", argv))
    198                         printf(NAME ": Error spawning getvc on %s\n", vc);
    199         } else {
    200                 printf(NAME ": Error waiting on %s\n", vc);
    201         }
    202 }
    203 
    204 static void mount_data(void)
     215                if (!task_spawn(APP_GETTERM, argv))
     216                        printf(NAME ": Error spawning %s with %s %s\n", APP_GETTERM,
     217                            term, app);
     218        } else
     219                printf(NAME ": Error waiting on %s\n", term);
     220}
     221
     222static void mount_scratch(void)
    205223{
    206224        int rc;
    207225
    208         printf("Trying to mount disk0 on /data... ");
     226        printf("Trying to mount null/0 on /scratch... ");
    209227        fflush(stdout);
    210228
    211         rc = mount("fat", "/data", "disk0", "wtcache", 0);
     229        rc = mount("tmpfs", "/scratch", "null/0", "", 0);
    212230        if (rc == EOK)
    213231                printf("OK\n");
     
    216234}
    217235
     236static void mount_data(void)
     237{
     238        int rc;
     239
     240        printf("Trying to mount bd/disk0 on /data... ");
     241        fflush(stdout);
     242
     243        rc = mount("fat", "/data", "bd/disk0", "wtcache", 0);
     244        if (rc == EOK)
     245                printf("OK\n");
     246        else
     247                printf("Failed\n");
     248}
     249
    218250int main(int argc, char *argv[])
    219251{
     
    224256                return -1;
    225257        }
     258
     259        /* Make sure tmpfs is running. */
     260        if (str_cmp(STRING(RDFMT), "tmpfs") != 0) {
     261                spawn("/srv/tmpfs");
     262        }
    226263       
    227264        spawn("/srv/devfs");
     265        spawn("/srv/taskmon");
    228266       
    229267        if (!mount_devfs()) {
     
    231269                return -2;
    232270        }
    233        
     271
     272        mount_scratch();
     273       
     274        spawn("/srv/fhc");
     275        spawn("/srv/obio");
     276        srv_start("/srv/cuda_adb");
     277        srv_start("/srv/i8042");
     278        srv_start("/srv/adb_ms");
     279        srv_start("/srv/char_ms");
     280
    234281        spawn("/srv/fb");
    235282        spawn("/srv/kbd");
    236         spawn("/srv/console");
    237         spawn("/srv/fhc");
    238         spawn("/srv/obio");
     283        console("hid_in/kbd");
     284       
     285        spawn("/srv/clip");
    239286
    240287        /*
     
    255302#endif
    256303
    257         getvc("vc0", "/app/bdsh");
    258         getvc("vc1", "/app/bdsh");
    259         getvc("vc2", "/app/bdsh");
    260         getvc("vc3", "/app/bdsh");
    261         getvc("vc4", "/app/bdsh");
    262         getvc("vc5", "/app/bdsh");
    263         getvc("vc6", "/app/klog");
    264        
     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
    265312        return 0;
    266313}
Note: See TracChangeset for help on using the changeset viewer.