preinit: pause before exiting
as explained in the comment, this is to give us a chance to see error messages before the kernel panics
This commit is contained in:
parent
86a5224f3c
commit
6db982f25f
1 changed files with 16 additions and 0 deletions
|
@ -15,6 +15,21 @@ void parseopts(char * cmdline, char **root, char **rootfstype);
|
||||||
#define ERR(x) write(2, x, strlen(x))
|
#define ERR(x) write(2, x, strlen(x))
|
||||||
#define AVER(c) do { if(c < 0) ERR("failed: " #c); } while(0)
|
#define AVER(c) do { if(c < 0) ERR("failed: " #c); } while(0)
|
||||||
|
|
||||||
|
static void die() {
|
||||||
|
/* if init exits, it causes a kernel panic. On the Turris
|
||||||
|
* Omnia (and maybe other hardware, I don't know), the kernel
|
||||||
|
* panics _before_ any of the messages from AVER are printed,
|
||||||
|
* which makes it really hard to tell what went wrong. So
|
||||||
|
* let's wait a little here to give the console a chance to
|
||||||
|
* catch up.
|
||||||
|
*
|
||||||
|
* Yes, I know that file descriptor IO is supposedly
|
||||||
|
* non-buffered. Empirical observation suggests that there
|
||||||
|
* must be a buffer of some kind somewhere though.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sleep(10);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fork_exec(char * command, char *args[])
|
static int fork_exec(char * command, char *args[])
|
||||||
|
@ -78,4 +93,5 @@ int main(int argc, char *argv[], char *envp[])
|
||||||
argv[1] = NULL;
|
argv[1] = NULL;
|
||||||
AVER(execve("/persist/init", argv, envp));
|
AVER(execve("/persist/init", argv, envp));
|
||||||
}
|
}
|
||||||
|
die();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue