网页设计素材网站大全展馆设计都是找的什么公司
news/
2025/9/23 23:04:39/
文章来源:
网页设计素材网站大全,展馆设计都是找的什么公司,东阳app开发,官网开发多少钱一个1. 概述Linux系统启动过程中通过init_task创建0号idle进程。然后通过kernel_thread创建1号init进程。创建该进程时通过系统调用#xff0c;在内核空间执行用户空间的/sbin/init程序#xff0c;通过该程序产生出shell#xff0c;并依赖init衍生出其他进程。通过top命令查看当… 1. 概述Linux系统启动过程中通过init_task创建0号idle进程。然后通过kernel_thread创建1号init进程。创建该进程时通过系统调用在内核空间执行用户空间的/sbin/init程序通过该程序产生出shell并依赖init衍生出其他进程。通过top命令查看当前系统环境下的进程列表可以发现1号进程的为{linuxrc} init[rootiTOP-4412]# top
Mem: 26404K used, 948572K free, 0K shrd, 3199543672K buff, 0K cached
CPU: 0.0% usr 6.0% sys 0.0% nic 94.0% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.00 0.00 1/78 162PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND162 132 root R 3264 0.3 0 4.5 top3 2 root IW 0 0.0 0 1.5 [kworker/0:0]132 1 root S 3268 0.3 2 0.0 -/bin/sh1 0 root S 3264 0.3 2 0.0 {linuxrc} init
...我们在kernel代码中会发现创建1号init进程的方式主要包括以下3种如下图所示2. 创建init进程的方式2.1 ramdisk方式在ramdisk环境下创建init进程时需要在kernel CMDLINE中设置init程序的路径位置如下所示CONFIG_CMDLINE...root/dev/ram rdinit/sbin/init...在kernel代码中通过rdinit_setup()解析kernel CMDLINE中rdinit字符串赋值给全局变量ramdisk_execute_command。static int __init rdinit_setup(char *str)
{unsigned int i;ramdisk_execute_command str;/* See auto comment in init_setup */for (i 1; i MAX_INIT_ARGS; i)argv_init[i] NULL;return 1;
}
__setup(rdinit, rdinit_setup);当完成ramdisk_execute_command赋值后在kernel_init_freeable()对ramdisk_execute_command进行检查若未检查到有效的字符串则将ramdisk_execute_command赋值为/init。然后对ramdisk_execute_command进行访问权限检查若失败则进行rootfs挂载。static noinline void __init kernel_init_freeable(void)
{
...if (!ramdisk_execute_command)ramdisk_execute_command /init;if (ksys_access((const char __user *)ramdisk_execute_command, 0) ! 0) {ramdisk_execute_command NULL;prepare_namespace();}
...
}若ramdisk_execute_command检查成功则进入kernel_init()中执行指定的init程序。static int __ref kernel_init(void *unused)
{int ret;kernel_init_freeable();...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);}
...
}2.2 execute_command方式通过kernel CMDLINE可以设定执行的init程序例如CONFIG_CMDLINEroot/dev/mmcblk1p2 rw consolettySAC2,115200 init/linuxrc rootwait在kernel代码中通过init_setup()解析命令行参数init并赋值给execute_command。static int __init init_setup(char *str)
{unsigned int i;execute_command str;...for (i 1; i MAX_INIT_ARGS; i)argv_init[i] NULL;return 1;
}
__setup(init, init_setup);最后在kernel_init()中执行execute_command所指定的init程序。static int __ref kernel_init(void *unused)
{
...if (execute_command) {ret run_init_process(execute_command);if (!ret)return 0;panic(Requested init %s failed (error %d).,execute_command, ret);}
...panic(No working init found. Try passing init option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.);
}2.3 默认方式若以上两种指定init程序的方式均以失败告终那么内核代码kernel_init()会执行如下4个默认的init程序若也失败则内核上报panic。static int __ref kernel_init(void *unused)
{...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/admin-guide/init.rst for guidance.);
}推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914174.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!