gpt4 book ai didi

linux-kernel - 在内核 3.8 中,如何在删除 kernel_execve 时将第一个用户进程切换到用户模式

转载 作者:行者123 更新时间:2023-12-04 02:29:46 25 4
gpt4 key购买 nike

在内核 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 离开了。我的问题是如何将第一个用户进程切换到用户模式。

最佳答案

成功do_execv()设置 current运行新程序的过程(例如通过 load_elf_binary() ),然后返回 0 到 run_init_process() ,返回 0 到 kernel_init() ,它也返回 0,并被称为:

    kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);

这是来自 https://lwn.net/Articles/520227/ 的规则进来:我们的 fn()execve 之后返回 0 ,所以“线程将进入由该 execve 创建的用户空间上下文”。

关于linux-kernel - 在内核 3.8 中,如何在删除 kernel_execve 时将第一个用户进程切换到用户模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16027267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com