Subversion Repositories HelenOS

Rev

Rev 2927 | Rev 3152 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2927 Rev 3150
Line 32... Line 32...
32
 */
32
 */
33
/**
33
/**
34
 * @file
34
 * @file
35
 */
35
 */
36
 
36
 
37
#include "version.h"
-
 
38
#include <stdio.h>
37
#include <stdio.h>
-
 
38
#include <unistd.h>
-
 
39
#include <vfs/vfs.h>
-
 
40
#include <bool.h>
-
 
41
#include <errno.h>
-
 
42
#include <fcntl.h>
-
 
43
#include <task.h>
-
 
44
#include <malloc.h>
-
 
45
#include "init.h"
-
 
46
#include "version.h"
-
 
47
 
-
 
48
#define BUF_SIZE 150000
39
 
49
 
-
 
50
static char *buf;
-
 
51
 
40
static void test_console(void)
52
static void console_wait(void)
41
{
53
{
-
 
54
    while (get_cons_phone() < 0)
-
 
55
        usleep(50000);  // FIXME
42
    int c;
56
}
43
 
57
 
-
 
58
static bool mount_tmpfs(void)
-
 
59
{
-
 
60
    int rc = -1;
-
 
61
   
44
    while ((c = getchar()) != EOF)
62
    while (rc < 0) {
-
 
63
        rc = mount("tmpfs", "/", "initrd");
-
 
64
       
45
        putchar(c);
65
        switch (rc) {
-
 
66
        case EOK:
-
 
67
            printf(NAME ": Root filesystem mounted\n");
-
 
68
            break;
-
 
69
        case EBUSY:
-
 
70
            printf(NAME ": Root filesystem already mounted\n");
-
 
71
            break;
-
 
72
        case ELIMIT:
-
 
73
            printf(NAME ": Unable to mount root filesystem\n");
-
 
74
            return false;
-
 
75
        default:
-
 
76
            sleep(5);   // FIXME
-
 
77
        }
-
 
78
    }
-
 
79
   
-
 
80
    return true;
-
 
81
}
-
 
82
 
-
 
83
static void spawn(char *fname)
-
 
84
{
-
 
85
    printf(NAME ": Spawning %s\n", fname);
-
 
86
   
-
 
87
    int fd = open(fname, O_RDONLY);
-
 
88
    if (fd >= 0) {
-
 
89
   
-
 
90
        ssize_t rd;
-
 
91
        size_t len = 0;
-
 
92
       
-
 
93
        // FIXME: cannot do long reads yet
-
 
94
        do {
-
 
95
            rd = read(fd, buf + len, 1024);
-
 
96
            if (rd > 0)
-
 
97
                len += rd;
-
 
98
           
-
 
99
        } while (rd > 0);
-
 
100
       
-
 
101
        if (len > 0) {
-
 
102
            task_spawn(buf, len);
-
 
103
            sleep(1);   // FIXME
-
 
104
        }
-
 
105
       
-
 
106
        close(fd);
-
 
107
    }
46
}
108
}
47
 
109
 
48
int main(int argc, char *argv[])
110
int main(int argc, char *argv[])
49
{
111
{
-
 
112
    info_print();
-
 
113
    sleep(5);   // FIXME
-
 
114
   
-
 
115
    if (!mount_tmpfs()) {
-
 
116
        printf(NAME ": Exiting\n");
-
 
117
        return -1;
-
 
118
    }
-
 
119
   
-
 
120
    buf = malloc(BUF_SIZE);
-
 
121
   
-
 
122
    // FIXME: spawn("/sbin/pci");
-
 
123
    spawn("/sbin/fb");
-
 
124
    spawn("/sbin/kbd");
-
 
125
    spawn("/sbin/console");
-
 
126
   
-
 
127
    console_wait();
50
    version_print();
128
    version_print();
51
 
-
 
52
    printf("This is init\n");
-
 
53
   
129
   
54
    test_console();
130
    spawn("/sbin/fat");
55
 
-
 
56
    printf("\nBye.\n");
131
    spawn("/sbin/tetris");
-
 
132
    // FIXME: spawn("/sbin/tester");
-
 
133
    // FIXME: spawn("/sbin/klog");
57
 
134
   
-
 
135
    free(buf);
58
    return 0;
136
    return 0;
59
}
137
}
60
 
138
 
61
/** @}
139
/** @}
62
 */
140
 */
63
 
-