Rev 3424 | Rev 3675 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3424 | Rev 3425 | ||
|---|---|---|---|
| Line 43... | Line 43... | ||
| 43 | #include <task.h> |
43 | #include <task.h> |
| 44 | #include <malloc.h> |
44 | #include <malloc.h> |
| 45 | #include "init.h" |
45 | #include "init.h" |
| 46 | #include "version.h" |
46 | #include "version.h" |
| 47 | 47 | ||
| 48 | #define BUF_SIZE 150000 |
- | |
| 49 | - | ||
| 50 | static char *buf; |
- | |
| 51 | - | ||
| 52 | static void console_wait(void) |
48 | static void console_wait(void) |
| 53 | { |
49 | { |
| 54 | while (get_cons_phone() < 0) |
50 | while (get_cons_phone() < 0) |
| 55 | usleep(50000); // FIXME |
51 | usleep(50000); // FIXME |
| 56 | } |
52 | } |
| 57 | 53 | ||
| 58 | static bool mount_tmpfs(void) |
54 | static bool mount_fs(const char *fstype) |
| 59 | { |
55 | { |
| 60 | int rc = -1; |
56 | int rc = -1; |
| 61 | 57 | ||
| 62 | while (rc < 0) { |
58 | while (rc < 0) { |
| 63 | rc = mount("tmpfs", "/", "initrd"); |
59 | rc = mount(fstype, "/", "initrd"); |
| 64 | 60 | ||
| 65 | switch (rc) { |
61 | switch (rc) { |
| 66 | case EOK: |
62 | case EOK: |
| 67 | printf(NAME ": Root filesystem mounted\n"); |
63 | printf(NAME ": Root filesystem mounted\n"); |
| 68 | break; |
64 | break; |
| 69 | case EBUSY: |
65 | case EBUSY: |
| 70 | printf(NAME ": Root filesystem already mounted\n"); |
66 | printf(NAME ": Root filesystem already mounted\n"); |
| 71 | break; |
67 | break; |
| 72 | case ELIMIT: |
68 | case ELIMIT: |
| 73 | printf(NAME ": Unable to mount root filesystem\n"); |
69 | printf(NAME ": Unable to mount root filesystem\n"); |
| 74 | return false; |
70 | return false; |
| - | 71 | case ENOENT: |
|
| - | 72 | printf(NAME ": Unknown filesystem type (%s)\n", fstype); |
|
| - | 73 | return false; |
|
| 75 | default: |
74 | default: |
| 76 | sleep(5); // FIXME |
75 | sleep(5); // FIXME |
| 77 | } |
76 | } |
| 78 | } |
77 | } |
| 79 | 78 | ||
| 80 | return true; |
79 | return true; |
| 81 | } |
80 | } |
| 82 | 81 | ||
| 83 | static void spawn(char *fname) |
82 | static void spawn(char *fname) |
| 84 | { |
83 | { |
| - | 84 | char *argv[2]; |
|
| - | 85 | ||
| 85 | printf(NAME ": Spawning %s\n", fname); |
86 | printf(NAME ": Spawning %s\n", fname); |
| 86 | 87 | ||
| 87 | int fd = open(fname, O_RDONLY); |
88 | argv[0] = fname; |
| 88 | if (fd >= 0) { |
89 | argv[1] = NULL; |
| 89 | 90 | ||
| 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); |
91 | if (task_spawn(fname, argv) != 0) { |
| 103 | sleep(1); // FIXME |
92 | /* Success */ |
| 104 | } |
- | |
| 105 | - | ||
| 106 | close(fd); |
93 | sleep(1); |
| 107 | } |
94 | } |
| 108 | } |
95 | } |
| 109 | 96 | ||
| 110 | int main(int argc, char *argv[]) |
97 | int main(int argc, char *argv[]) |
| 111 | { |
98 | { |
| 112 | info_print(); |
99 | info_print(); |
| 113 | sleep(5); // FIXME |
100 | sleep(5); // FIXME |
| 114 | 101 | ||
| 115 | if (!mount_tmpfs()) { |
102 | if (!mount_fs("tmpfs") && !mount_fs("fat")) { |
| 116 | printf(NAME ": Exiting\n"); |
103 | printf(NAME ": Exiting\n"); |
| 117 | return -1; |
104 | return -1; |
| 118 | } |
105 | } |
| 119 | 106 | ||
| 120 | buf = malloc(BUF_SIZE); |
- | |
| 121 | - | ||
| 122 | // FIXME: spawn("/sbin/pci"); |
107 | // FIXME: spawn("/srv/pci"); |
| 123 | spawn("/sbin/fb"); |
108 | spawn("/srv/fb"); |
| 124 | spawn("/sbin/kbd"); |
109 | spawn("/srv/kbd"); |
| 125 | spawn("/sbin/console"); |
110 | spawn("/srv/console"); |
| 126 | 111 | ||
| 127 | console_wait(); |
112 | console_wait(); |
| 128 | version_print(); |
113 | version_print(); |
| 129 | 114 | ||
| 130 | spawn("/sbin/fat"); |
- | |
| 131 | spawn("/sbin/tetris"); |
- | |
| 132 | // FIXME: spawn("/sbin/tester"); |
- | |
| 133 | spawn("/sbin/klog"); |
115 | spawn("/app/bdsh"); |
| 134 | 116 | ||
| 135 | free(buf); |
- | |
| 136 | return 0; |
117 | return 0; |
| 137 | } |
118 | } |
| 138 | 119 | ||
| 139 | /** @} |
120 | /** @} |
| 140 | */ |
121 | */ |