openwt启动流程学习

 

  • init进程是所有系统进程的父进程,它被内核调用起来并负责调用所有其他的进程。 如果任何进程的父进程退出,init进程将成为它的父进程。

内核启动完成后读取/etc/inittab文件,然后执行inittab中的sysinit所指的脚本。

openwrt的initab文件如下

root@AOTUO:/etc# cat inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
::askconsole:/usr/libexec/login.sh

 

内核启动完成后首先调用"/etc/init.d/rcS",然后再由rcS逐个启动各个软件进程。

如果按照通常的简单做法,我们会将每个待启动的程序启动命令按行放入rcS文件中,顺序执行。这种实现方法在软件启动进程列表不变的时候工作非常好,如果需要动态修改,则不容易。

 

在/etc/rc.d目录下创建每个软件软连接方式,由rcS脚本在该目录读取启动命令的软链接,然后启动软链接所指向的程序,由于每一个软链接均包含一个数字,就可以按照数字顺序读取并进行启动了

所有软件的启动脚本都放在/etc/init.d目录下,如果需要随系统启动,将启动脚本链接到/etc/rc.d/S*下即可

 

系统启动时将执行/etc/init.d/rcS脚本,并传递两个参数S和boot。  S表示软件启动模块,是和K(软件关闭)相对应的;boot则表示首次启动。rcS脚本通过run_scripts函数来启动软件,将每一个以/etc/rc.d/S开头的脚本按照数字顺序传递boot参数并调用。这些启动脚本通常包含start、stop和restart这3个函数。

 以/etc/init.d 下的user_init文件为例(用户自己创建的脚本文件)

 

这个初始化脚本是一个shell脚本,包含变量定义和函数的定义,通过"/etc/rc.common"脚本回调来完成的。第一行是注释行,表示使用"/etc/rc.common"来提供一些基本函数,包含主函数的默认功能以及检查脚本等。

脚本的执行顺序通过START和STOP变量定义。改变之后再次运行/etc/init.d/user_init enable才会再次生效。这将删除以前创建的启动链接,然后再根据新的变量定义创建链接。创建的启动链接保存在"/etc/rc.d"目录下。脚本中最重要的的函数是start和stop,这两个决定如何启动和停止服务。

程序中的执行流程由rc.common来控制,其中包含了以下命令

函 数    含 义
start 启动服务。相当于 C++语言中的虚函数,通常情况下每一个服务均需重写该函数
stop关闭服务。相当于 C++语言中的虚函数,通常情况下每一个服务均需重写该函数
restart重启服务。调用 stop 函数退出进程,然后再调用 start 函数启动进程
reload重新读取配置,如果读取配置失败则调用 restart 函数重启进程
enable打开服务自启动,即将启动脚本软链接文件放在/etc/rc.d 目录下
disable   关闭服务自启动,删除在/etc/rc.d 的软链接文件
enabled  提供服务自启动的状态查询
boot  调用 start 函数
shutdown调用 stop 函数
help  输出帮助信息
boot函数与start函数的关系:命令在启动时取代 start 函数而执行 boot 函数,如果 boot 函数没 有被重新定义,将执行 rc.common 中预定义的 boot 函数,boot 函数再次调用 start 函数


   启动和停止命令通常在init序列中执行,在系统启动时rcS仅仅执行在/etc/rc.d目录下的脚本,我们的启动脚本作为软链接放在这里。使用enable或disable命令可以自动完成这些任务。

通过调用"enable"命令可安装成功。START = 98意味着启动文件将创建软链接"/etc/rc.d/S98user_init"   来指向''/etc/init.d/user_init",在START = 97之后启动,在START = 99之前启动

如果多个初始化脚本有相同的启动优先值,则调用顺序取决于启动脚本名称的字母顺序 
  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值