hallo glasen
danke für deinen hinweis! das habe ich schon getestet mit einer kernelmeldung! leider kommt es garnicht soweit.
die static void run_init_process(char *init_filename) wird genau einmal aufgerufen.
die ifabfrage if (ramdisk_execute_command) bei zeile 750 ist das letzte, was in dieser funktion gemacht wird.
if (ramdisk_execute_command) {
run_init_process(ramdisk_execute_command);
printk(KERN_WARNING "Failed to execute %s\n", ramdisk_execute_command);
}
(das verstehe ich nicht ganz) ich habe schon ein paar debugausgaben gemacht aber bin leider noch nicht weitergekommen.
anscheinend gehen genau diese befehle da rein: http://lxr.linux.no/linux+v2.6.21.1/arch/i386/kernel/sys_i386.c#L258
int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{
long __res;
asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx"
: "=a" (__res)
: "0" (__NR_execve),"ri" (filename),"c" (argv), "d" (envp) : "memory");
return __res;
}
leider verstehe ich den code nicht (assembler). ich kann mir vorstellen, dass hier der stack durchgegangen wird
und alle init sachen gestartet werden. ich möchte gerne den filename von jeder datei ausgeben (dmesg),
die hier aufgerufen wird.
danke für deine hilfe
schiggy
ps: ich komme auch nicht darauf, was genau dieser code macht
if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
printk(KERN_WARNING "Warning: unable to open an initial console.\n");