在3.8.x及之后的内核版本中,run_init_process的定义发生了变化。
以下是3.8内核中run_init_process的新定义。
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 已经不存在了。我的问题是第一个用户进程如何切换到用户模式。
<>
而不是[]
即可... - SamB