В версии ядра 3.8.x и более поздней версии изменяется определение для run_init_process.
Ниже приведено новое определение для run_init_proces в ядре 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); }
По сравнению с определением в ядре 3.7.x и старой версией.
static int run_init_process(const char *init_filename) {
argv_init[0] = init_filename;
return kernel_execve(init_filename, argv_init, envp_init); }
Самая важная часть в kernel_execve заключается в том, что она вызовет функцию ret_from_kernel_execve, которая затем переключится в пользовательский режим.
В новом определении kernel_execve отсутствует. Мой вопрос в том, как первый пользовательский процесс переключается в пользовательский режим.