Home COBRA-Boot COBRA-Boot printf-Innenleben
 

8.1 Widerspruch: init läuft, obwohl execve zurückkehrt

Folgende Boot-Ausgabe sehe ich:

...
Freeing unused kernel memory: 24k freed (0xdc000 - 0xe1000)
/etc/init done
simpleinit.c: main() started
Shell invoked to run file: /etc/rc
Command: hostname cobra1
...

Zeitlich gesehen ist also zuerst der Aufruf:

        run_init_process("/bin/init");

printk("/bin/init done\n");

        run_init_process("/bin/sh");
        printk("/bin/sh done\n");

Mit run_init_process fogendermaßen definiert:

static void run_init_process(char *init_filename)
{
        argv_init[0] = init_filename;
        execve(init_filename, argv_init, envp_init);
}

also "init" wieder zurückgekehrt, bevor der "init" auch wirklich zeitlich losläuft. In "init"(simpleinit.c) habe ich folgendes codiert:

int main(int argc, char *argv[])
{
        int     i;
        struct sigaction sa;

        /*
         * setup all the signal handlers here
         */

printf("simpleinit.c: main() started\n");

        memset(&sa, 0, sizeof(sa));
...

Copyright © Andreas Birkert
Letzte Aktualisierung am 20. Dezember 2013
Home COBRA-Boot COBRA-Boot printf-Innenleben