linux kernel_init
来源:互联网 发布:看电子书的软件 编辑:程序博客网 时间:2024/06/07 15:41
Kernel:
asmlinkage __visible void __init start_kernel(void){ .... trap_init();sched_init();rest_init();}
static noinline void __init_refok rest_init(void){ kernel_thread(kernel_init, NULL, CLONE_FS); pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);}
static int __ref kernel_init(void *unused){ int ret; kernel_init_freeable(); /* need to finish all async __init code before freeing the memory */ async_synchronize_full(); free_initmem(); mark_rodata_ro(); system_state = SYSTEM_RUNNING; numa_default_policy(); flush_delayed_fput(); if (ramdisk_execute_command) { ret = run_init_process(ramdisk_execute_command); if (!ret) return 0; pr_err("Failed to execute %s (error %d)\n", ramdisk_execute_command, ret); } if (!try_to_run_init_process("/sbin/init") || !try_to_run_init_process("/etc/init") || !try_to_run_init_process("/bin/init") || !try_to_run_init_process("/bin/sh")) return 0; panic("No working init found. Try passing init= option to kernel. " "See Linux Documentation/init.txt for guidance.");}
static noinline void __init kernel_init_freeable(void){ if (!ramdisk_execute_command) ramdisk_execute_command = "/init";}
内核系统调用:
static int run_init_process(const char *init_filename){ argv_init[0] = init_filename; return do_execve(getname_kernel(init_filename), (const char __user *const __user *)argv_init, (const char __user *const __user *)envp_init);}
Userspace:init进程启动
int main(int argc, char** argv) { if (is_first_stage) { if (restorecon("/init") == -1) { ERROR("restorecon failed: %s\n", strerror(errno)); security_failure(); } char* path = argv[0]; char* args[] = { path, const_cast<char*>("--second-stage"), nullptr }; if (execv(path, args) == -1) { ERROR("execv(\"%s\") failed: %s\n", path, strerror(errno)); security_failure(); } } restorecon("/dev/__properties__"); signal_handler_init(); property_load_boot_defaults(); start_property_service(); init_parse_config_file("/init.rc");}
阅读全文
0 0
- linux kernel_init
- linux kernel_init
- kernel_init
- linux 3.6 启动源码分析(五) kernel_init进程
- linux 3.6 启动源码分析(五) kernel_init进程
- Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六)
- Linux进程的管理与调度(六) -- Linux下1号进程的前世(kernel_init)今生(init进程)
- Machine_desc & boot & Kernel_init & initcall & module_init
- Machine_desc & boot & Kernel_init & initcall & module_init
- kernel_init寻找init并执行
- Linux Kernel SMP (Symmetric Multi-Processors) 開機流程解析 Part(3) Linux 多核心啟動流程從rest_init到kernel_init與CPU
- 内核启动kernel_init(init)进程分析
- 内核启动阶段kernel_init(init)进程分析
- 系统初始化时kernel_init在内核态创建和运行应用程序以完成系统初始化
- linux
- linux
- Linux
- Linux
- 合发数
- C#打开文件、文件夹对话框
- 通过PowerShell Server使用ssh连接windows
- 百度Android实习生电面总结
- 第一次FullGC优化实战
- linux kernel_init
- PAT 乙级 1012. 数字分类 (20)
- linux下编译出现的问题汇总
- linux之cut用法
- 1.7Android 学习+进度之七-控制列表及正确显示
- Algorithm 3: Probabilistic Analysis and Randomized Algorithms
- 欢迎使用CSDN-markdown编辑器
- 通过数据自动生成流程图(前端)
- 完整过程解决 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: NO)