Changes in uspace/app/init/init.c [d9fae235:19f857a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/init/init.c
rd9fae235 r19f857a 48 48 #include <str.h> 49 49 #include <devmap.h> 50 #include <str_error.h>51 50 #include "init.h" 52 51 53 #define ROOT_DEVICE "bd/initrd"54 #define ROOT_MOUNT_POINT "/"55 56 #define DEVFS_FS_TYPE "devfs"57 52 #define DEVFS_MOUNT_POINT "/dev" 58 59 #define SCRATCH_FS_TYPE "tmpfs"60 #define SCRATCH_MOUNT_POINT "/scratch"61 62 #define DATA_FS_TYPE "fat"63 #define DATA_DEVICE "bd/disk0"64 #define DATA_MOUNT_POINT "/data"65 53 66 54 #define SRV_CONSOLE "/srv/console" … … 69 57 static void info_print(void) 70 58 { 71 printf("%s: HelenOS init\n", NAME); 72 } 73 74 static bool mount_report(const char *desc, const char *mntpt, 75 const char *fstype, const char *dev, int rc) 76 { 59 printf(NAME ": HelenOS init\n"); 60 } 61 62 static bool mount_root(const char *fstype) 63 { 64 const char *opts = ""; 65 const char *root_dev = "bd/initrd"; 66 67 if (str_cmp(fstype, "tmpfs") == 0) 68 opts = "restore"; 69 70 int rc = mount(fstype, "/", root_dev, opts, IPC_FLAG_BLOCKING); 71 77 72 switch (rc) { 78 73 case EOK: 79 if (dev != NULL) 80 printf("%s: %s mounted on %s (%s at %s)\n", NAME, desc, mntpt, 81 fstype, dev); 82 else 83 printf("%s: %s mounted on %s (%s)\n", NAME, desc, mntpt, fstype); 74 printf(NAME ": Root filesystem mounted, %s at %s\n", 75 fstype, root_dev); 84 76 break; 85 77 case EBUSY: 86 printf( "%s: %s already mounted on %s\n", NAME, desc, mntpt);78 printf(NAME ": Root filesystem already mounted\n"); 87 79 return false; 88 80 case ELIMIT: 89 printf( "%s: %s limit exceeded\n", NAME, desc);81 printf(NAME ": Unable to mount root filesystem\n"); 90 82 return false; 91 83 case ENOENT: 92 printf( "%s: %s unknown type (%s)\n", NAME, desc, fstype);84 printf(NAME ": Unknown filesystem type (%s)\n", fstype); 93 85 return false; 94 86 default: 95 printf("%s: %s not mounted on %s (%s)\n", NAME, desc, mntpt, 96 str_error(rc)); 87 printf(NAME ": Error mounting root filesystem (%d)\n", rc); 97 88 return false; 98 89 } … … 101 92 } 102 93 103 static bool mount_root(const char *fstype)104 {105 const char *opts = "";106 107 if (str_cmp(fstype, "tmpfs") == 0)108 opts = "restore";109 110 int rc = mount(fstype, ROOT_MOUNT_POINT, ROOT_DEVICE, opts,111 IPC_FLAG_BLOCKING);112 return mount_report("Root filesystem", ROOT_MOUNT_POINT, fstype,113 ROOT_DEVICE, rc);114 }115 116 94 static bool mount_devfs(void) 117 95 { 118 int rc = mount(DEVFS_FS_TYPE, DEVFS_MOUNT_POINT, "", "", 119 IPC_FLAG_BLOCKING); 120 return mount_report("Device filesystem", DEVFS_MOUNT_POINT, DEVFS_FS_TYPE, 121 NULL, rc); 96 int rc = mount("devfs", DEVFS_MOUNT_POINT, "", "", IPC_FLAG_BLOCKING); 97 98 switch (rc) { 99 case EOK: 100 printf(NAME ": Device filesystem mounted\n"); 101 break; 102 case EBUSY: 103 printf(NAME ": Device filesystem already mounted\n"); 104 return false; 105 case ELIMIT: 106 printf(NAME ": Unable to mount device filesystem\n"); 107 return false; 108 case ENOENT: 109 printf(NAME ": Unknown filesystem type (devfs)\n"); 110 return false; 111 default: 112 printf(NAME ": Error mounting device filesystem (%d)\n", rc); 113 return false; 114 } 115 116 return true; 122 117 } 123 118 … … 130 125 return; 131 126 132 printf( "%s: Spawning %s\n", NAME, fname);127 printf(NAME ": Spawning %s\n", fname); 133 128 134 129 argv[0] = fname; 135 130 argv[1] = NULL; 136 131 137 int err; 138 if (!task_spawn(fname, argv, &err)) 139 printf("%s: Error spawning %s (%s)\n", NAME, fname, 140 str_error(err)); 132 if (!task_spawn(fname, argv)) 133 printf(NAME ": Error spawning %s\n", fname); 141 134 } 142 135 … … 152 145 return; 153 146 154 printf( "%s: Starting %s\n", NAME, fname);147 printf(NAME ": Starting %s\n", fname); 155 148 156 149 argv[0] = fname; 157 150 argv[1] = NULL; 158 151 159 id = task_spawn(fname, argv , &retval);152 id = task_spawn(fname, argv); 160 153 if (!id) { 161 printf("%s: Error spawning %s (%s)\n", NAME, fname, 162 str_error(retval)); 154 printf(NAME ": Error spawning %s\n", fname); 163 155 return; 164 156 } 165 157 166 158 rc = task_wait(id, &texit, &retval); 167 159 if (rc != EOK) { 168 printf("%s: Error waiting for %s (%s(\n", NAME, fname, 169 str_error(retval)); 160 printf(NAME ": Error waiting for %s\n", fname); 170 161 return; 171 162 } 172 163 173 164 if ((texit != TASK_EXIT_NORMAL) || (retval != 0)) { 174 printf( "%s: Server %s failed to start (%s)\n", NAME,175 fname, str_error(retval));165 printf(NAME ": Server %s failed to start (returned %d)\n", 166 fname, retval); 176 167 } 177 168 } … … 185 176 snprintf(hid_in, DEVMAP_NAME_MAXLEN, "%s/%s", DEVFS_MOUNT_POINT, dev); 186 177 187 printf( "%s: Spawning %s %s\n", NAME, SRV_CONSOLE, hid_in);178 printf(NAME ": Spawning %s with %s\n", SRV_CONSOLE, hid_in); 188 179 189 180 /* Wait for the input device to be ready */ … … 196 187 argv[2] = NULL; 197 188 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)); 189 if (!task_spawn(SRV_CONSOLE, argv)) 190 printf(NAME ": Error spawning %s with %s\n", SRV_CONSOLE, hid_in); 201 191 } else 202 printf("%s: Error waiting on %s (%s)\n", NAME, hid_in, 203 str_error(rc)); 192 printf(NAME ": Error waiting on %s\n", hid_in); 204 193 } 205 194 … … 212 201 snprintf(term, DEVMAP_NAME_MAXLEN, "%s/%s", DEVFS_MOUNT_POINT, dev); 213 202 214 printf( "%s: Spawning %s %s %s\n", NAME, APP_GETTERM, term, app);203 printf(NAME ": Spawning %s with %s %s\n", APP_GETTERM, term, app); 215 204 216 205 /* Wait for the terminal device to be ready */ … … 224 213 argv[3] = NULL; 225 214 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));215 if (!task_spawn(APP_GETTERM, argv)) 216 printf(NAME ": Error spawning %s with %s %s\n", APP_GETTERM, 217 term, app); 229 218 } else 230 printf("%s: Error waiting on %s (%s)\n", NAME, term, 231 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); 239 } 240 241 static bool mount_data(void) 242 { 243 int rc = mount(DATA_FS_TYPE, DATA_MOUNT_POINT, DATA_DEVICE, "wtcache", 0); 244 return mount_report("Data filesystem", DATA_MOUNT_POINT, DATA_FS_TYPE, 245 DATA_DEVICE, rc); 219 printf(NAME ": Error waiting on %s\n", term); 220 } 221 222 static void mount_scratch(void) 223 { 224 int rc; 225 226 printf("Trying to mount null/0 on /scratch... "); 227 fflush(stdout); 228 229 rc = mount("tmpfs", "/scratch", "null/0", "", 0); 230 if (rc == EOK) 231 printf("OK\n"); 232 else 233 printf("Failed\n"); 234 } 235 236 static 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"); 246 248 } 247 249 … … 251 253 252 254 if (!mount_root(STRING(RDFMT))) { 253 printf( "%s: Exiting\n", NAME);255 printf(NAME ": Exiting\n"); 254 256 return -1; 255 257 } 256 258 257 259 /* Make sure tmpfs is running. */ 258 260 if (str_cmp(STRING(RDFMT), "tmpfs") != 0) { … … 264 266 265 267 if (!mount_devfs()) { 266 printf( "%s: Exiting\n", NAME);268 printf(NAME ": Exiting\n"); 267 269 return -2; 268 270 } 269 271 270 272 mount_scratch(); 271 273 … … 276 278 srv_start("/srv/adb_ms"); 277 279 srv_start("/srv/char_ms"); 278 280 279 281 spawn("/srv/fb"); 280 282 spawn("/srv/kbd"); … … 282 284 283 285 spawn("/srv/clip"); 284 286 285 287 /* 286 288 * Start these synchronously so that mount_data() can be … … 293 295 (void) srv_start; 294 296 #endif 295 297 296 298 #ifdef CONFIG_MOUNT_DATA 297 299 mount_data(); … … 299 301 (void) mount_data; 300 302 #endif 301 303 302 304 getterm("term/vc0", "/app/bdsh"); 303 305 getterm("term/vc1", "/app/bdsh"); … … 307 309 getterm("term/vc5", "/app/bdsh"); 308 310 getterm("term/vc6", "/app/klog"); 309 311 310 312 return 0; 311 313 }
Note:
See TracChangeset
for help on using the changeset viewer.