In 3.8.x kernel e versione successiva, la definizione per run_init_process è cambiato.Nel kernel 3.8, come il primo processo utente viene commutato in modalità utente mentre kernel_execve viene rimosso
Quello che segue è la nuova definizione per run_init_proces nel kernel 3.8.
static int run_init_process(const char *init_filename) {
argv_init[0] = init_filename;
return do_execve(init_filename,
(const char __user *const __user *)argv_init,
(const char __user *const __user *)envp_init); }
Rispetto alla definizione nel kernel 3.7.x e versione precedente.
static int run_init_process(const char *init_filename) {
argv_init[0] = init_filename;
return kernel_execve(init_filename, argv_init, envp_init); }
La parte più critica in kernel_execve è che chiamerà la ret_from_kernel_execve, che passa nella modalità utente poi.
Nella nuova definizione, kernel_execve non c'è più. La mia domanda è come il primo processo utente passa alla modalità utente, allora.
L'articolo [https://lwn.net/Articles/520227/] (nuovo/disegno kernel_thread execve di Al Viro) è molto utile. Il cambiamento principale si trova al * * copy_thread – hseagle
A [URL corrente] di più (https://lwn.net/Articles/520227/). –
@artlessnoise: in realtà, ha solo bisogno di imparare ad usare '<>' intorno ai suoi URL invece di '[]' ... – SamB