- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
=5内核启动流程之(init_post)[在rest_init中被调用]
韦东山342页
init进程是由内核启动的第一个(也是唯一一个)用户进程(进程号ID=1),它根据配置文件决定启动哪些程序,比如执行某些脚本、启动shell、运行用户指定的程序等。Init进程是后续所有进程的发起者,也是后续进程的父进程。比如在init进程启动/bin/sh程序后,才能够在控制台上输入各种命令。
init进程的执行程序通常是/sbin/init程序,上面讲述的init进程的作用只不过是/sbin/init这个程序的功能。我们完全可以编写自己的/sbin/init,或者传入命令行参数“init=xxxxx”指定某个程序作为init进程运行。
一般而言,在Linux系统有两种init程序:BSD init和System V init。BSD和System V是两种版本的UNIX系统。这两种init程序各有优缺点,现在大多Linux的发行版本使用System V init。但是在嵌入式领域,通常使用BusyBox集成的init程序,下面基于它进行讲解。【busybox-1.7.0也是一套源码树,进入后可以执行make menuconfig调用Config.in文件进行配置,然后便已安装到指定的目录下[你做的根文件系统目录]。】
1?内核如何启动init进程[第771行---第774行 来个四选一]
内核启动的最后一步就是启动init进程,代码在[busybox-1.7.0/init/main.c]文件中,如下所示:
顺便罗列一下内核启动流程:
/arch/arm/boot/compressed/head.S:
Start:
Decompressed_kernel()//位于/arch/arm/boot/compressed/misc.c[解压缩内核]
Call_kernel()
Stext:
/init/main.c
Start_kernel()
Setup_arch()
…
Rest_init()
Init()
Do_basic_setup()
Prepare_namespace()
看到了这里,我已激动得说不出话了,因为来到我与挂载根文件系统最重要的接口函数。
static int noinline init_post(void)
{
free_initmem();
unlock_kernel();
mark_rodata_ro();
system_state = SYSTEM_RUNNING;
numa_default_policy();
if (sys_open((const char __user *) /dev/console, O_RDWR, 0) 0)【第756行】
printk(KERN_WARNING Warning: unable to open an initial console.\n);
(void) sys_dup(0);【第759行】
(void) sys_dup(0);【第760行】
current-signal-flags |= SIGNAL_UNKILLABLE;
if (ramdisk_execute_command) {
run_init_process(ramdisk_execute_command); 【第763行】
printk(KERN_WARNING Failed to execute %s\n,ramdisk_execute_command);
}
if (execute_command) {【重要的知识点,请看文章最后紫色部分。】
run_init_process(execute_command);
printk(KERN_WARNING Failed to execute %s. Attempting defaults...\n,
execute_command);
}
run_init_process(/sbin/init);
【run_init_process()实现代码在/init/main.c中 韦东山344也】
【执行/sbin/init时,它的环境参数为”HOME=/”、”TERM=linux”】
run_init_process(/etc/init);
run_init_process(/bin/init);
run_init_process(/bin/sh);
panic(No init found. Try passing init= option to kernel.);【没有发现初始化命令,你可以通过控制台传入“init=XXX”命令。这不是内核启动终点,init_post()函数是被rest_init()函数调用的。】
}
上面代码并不复杂,其中的run_init_process函数使用它的参数所指定的程序来创建一个用户进程。
您可能关注的文档
- 09山东申论真题解析.doc
- 2013年电子商务行业参考报告(15页).doc
- 09届高二语文暑假复习金钥匙5病句辨析和修改.doc
- 2013版八上英语unit1Wheredidyougoonvacation教材电子版.doc
- 2015中文版3dsMax2012完全自学手册(附DVD-ROM光盘1张).pdf
- 2013电教工作年终统计表.doc
- 09初中复赛试题.doc
- 09年中考数学模拟试卷17.doc
- 1.-----PSIM仿真(一)01.doc
- 2013高考电极反应式的书写技巧.doc
- 绿电2022年系列报告之一:业绩利空释放,改革推动业绩反转和确定成长.docx
- 化学化工行业数字化转型ERP项目企业信息化规划实施方案.pdf
- 【研报】三部门绿电交易政策解读:溢价等额冲抵补贴,绿电交易规模有望提升---国海证券.docx
- 中国债券市场的未来.pdf
- 绿电制绿氢:实现“双碳”目标的有力武器-华创证券.docx
- 【深度分析】浅析绿证、配额制和碳交易市场对电力行业影响-长城证券.docx
- 绿电:景气度+集中度+盈利性均提升,资源获取和运营管理是核心壁垒.docx
- 节电产业与绿电应用年度报告(2022年版)摘要版--节能协会.docx
- 2024年中国人工智能系列白皮书-智能系统工程.pdf
- 如何进行行业研究 ——以幼教产业为例.pdf
最近下载
- 大楼维修改造工程投标方案(技术标367页).docx
- 高频电刀的使用(参考).ppt
- AQT3034—2022化工过程安全管理导则.pdf VIP
- 省考公务员-黑龙江-行政职业能力测验-第一章数量关系-第四节行程问题-.docx VIP
- DB23_T(1621.10-1621.14)-2015:黑龙江省建设工程施工操作技术规程(三).pdf VIP
- 整体法-隔离法-动态平衡题型练.doc VIP
- 2021年全国乙卷(生物)高考真题.pdf VIP
- 论中小企业会计核算重要性-来源:财会学习(第2020027期)-《中国建材报》社、中国会计学会建材分会.pdf VIP
- 2022年高考真题全国乙卷(文综历史)真题(有答案).pdf VIP
- 浅谈机务维修作风建设 蔡恒志.doc VIP
文档评论(0)