カーネル 3.8.x 以降のバージョンでは、run_init_process の定義が変更されています。
以下は、カーネル 3.8 での run_init_proces の新しい定義です。
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がなくなりました。私の質問は、最初のユーザープロセスがユーザーモードにどのように切り替えられるかです。