11
在內核3.8.x及更高版本中,run_init_process的定義已更改。在內核3.8中,當kernel_execve被刪除時,第一個用戶進程如何切換到用戶模式
以下是kernel 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不見了。我的問題是,第一個用戶進程如何切換到用戶模式。
文章[https://lwn.net/Articles/520227/](Al Viro的新execve/kernel_thread設計)非常有用。主要更改位於* copy_thread * – hseagle
更多[當前URL](https://lwn.net/Articles/520227/)。 –
@artlessnoise:實際上,他只需要學習在他的URL周圍使用'<>'而不是'[]'... – SamB