Openwrt开发指南 第13章 OpenWrt启动流程
任何系统的启动都是开发人员首要关注的问题,因为只有了解了系统的启动流程和启动机制,才能真正掌握一个系统,如果对启动的启动不熟悉的话,是不可能真正用好一个系统,openwrt系统也不例外,他的启动和一般的嵌入式系统启动还有所区别,现在咱们就分析一下openwrt的启动流程。
(资料图片)
在Openwrt的官网上面下载的源码,其中包括了一些内核补丁,这里究竟为什么要给内核做补丁呢?因为Openwrt为了支持更多的路由器,更多的操作和Openwrt特有的一些内核功能,linux源码是不具备的,这样Openwrt为了增加这些功能,就需要在linux官网上面下载的源代码中做一些修改,在这里体现为给linux源码打补丁。Openwrt源码中的linux补丁文件放在target/linux/generic文件下面,有对于不同版本的linux内核补丁文件。MT7621采用的是4.14版本的内核,所以他的补丁文件在patches-3.10目录下面。这里是所有的内核补丁文件,在编译Openwrt的时候,会首先把他们拷贝到内核目录下面,然后在内核上面打上这些补丁,然后再编译内核。咱们首先分析他对于linux启动的补丁,它的名字是921-use_preinit_as_init.patch(在Ubuntu源文件中),咱们可以看看他的内容。
可以看到他它修改linux内核中默认的启动项,可以看到它首先启动/etc/preinit(开发板的文件系统中),它是个脚本,咱们就从这个脚本说起。
3 preinitpreinit脚本在etc目录下面,首先先看看他的内容:
这就是个bash脚本,前半部分只是定义了一些变量,先记住他们的内容即可,有两个函数是我们需要了解的,boot_hook_init和boot_run_hook。他们定义在/lib/functions/preinit.sh文件中,boot_hook_init是初始化一个函数队列,boot_run_hook是运行一个函数队列,还有一个这个文件没有体现,后面的文件中会遇到,这里说明一下,boot_book_add这个是在一个函数队列中添加一个函数。然后就是执行:
循环执行/lib/preinit 目录下面的脚本,这里简要分析/lib/preinit目录下的一个文件,循环执行/lib/preinit目录下面的脚本,这里简要分析一个,这里分析02_default_set_state,首先看看他的内容。
可以看到它就是在preinit_main函数队列中增加一个函数,这个函数就是简单的执行一个脚本。当运行preinit_main的时候,队列中的所有函数就会依次执行。其他文件可以自行分析,都比较简单。
最后在preinit脚本中执行preinit_main。执行完这个脚本之后init进程会根据inittab文件执行其他的启动项。
4 inittabinittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令;开机、关机、重启对应的命令;各运行级登陆时所运行的命令。
如果存在/etc/inittab文件,Busyboxinit程序解析它,然后按照它的指示创建各种子进程,否则使用默认的配置创建子进程。
/etc/inittab文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下
:::
1、id:表示这个子进程要使用的控制台,如果省略,则使用与init进程一样的控制台.
2、runlevels:这个字段没有意义,可以省略。在linux有意义.
3、action:表示init进程如何控制这个子进程,具体取值见下表.
4、process:要执行的程序,它可以是可执行程序,也可以是脚本.如果process字段前有“-”字符,这个程序被称为“交互的”.
【attention】action取值
名称 | 执行条件 | 说明 |
---|---|---|
sysinit | 系统启动后最先执行 | 指定初始化脚本路径,只执行一次,init进程等待它结束才继续执行其它动作 |
wait | 系统执行完sysinit进程后 | 只执行一次,init进程等待它结束才继续执行其它动作 |
once | 系统执行完wait进程后 | 只执行一次,init进程不等待它结束 |
respawn | 启动完once进程后 | init进程监测发现子进程退出时,重新启动它,永不结束.如Shell命令解释器 |
askfirst | 启动完respawn进程后 | 与respawn类似,不过init进程先输出“Please pressEntertoactivatethis console”,等用户输入回车后才启动子进程 |
shutdown | 当系统关机时 | 即重启、关闭系统时执行的程序 |
restart | 系统重启时 | init进程重启时执行的程序,通常是init程序本身先重新读取、解析/etc/inittab文件,再执行restart程序 |
ctrl+alt+del | 按下Ctrl+Alt+Del | 键时按Ctrl+Alt+Del组合键时执行的程序 |
先肯看/etc/inittab中的内容:
从上面的分析可以看出它在开机启动的时候执行/etc/init.d/rcS脚本,以前是有/etc/init.d/rcS脚本的,现在的openwrt已经去掉了这个脚本文件,只要有rcSSboot这几个参数就可以,但是功能是有的就是按顺序执行/etc/rc.d下面的各个脚本,以S开头代表启动的时候执行的脚本,与命令行中的S对应,以K开头的代表关机的时候需要执行的脚本,与命令行中的K对应。
5 总结从上面的分析我们来总结一下openwrt的启动流,/etc/preinit->/lib/preinit/->/etc/inittab->/etc/rc.d/S。
关键词:
责任编辑:meirong
-
Openwrt开发指南 第13章 OpenWrt启动流程
-
在软件领域,Arm都做了哪些?|全球快报
-
天天快报!华测导航:融资净买入31.79万元,融资余额7784.31万元(06-28)
-
环球快看点丨车辙子菜_车辙子
-
加拿大森林大火烟霾蔓延 美国超8000万人受影响_焦点讯息
-
美媒:“新超人”定了!将由演员大卫·科伦斯韦饰演-环球快看
-
急板令·道西归迎鸾镇头_环球观速讯
-
科博达: 科博达技术股份有限公司关于2022年限制性股票激励计划第一个解除限售期解除限售条件成就的公告
-
焦点热议:中传学生看《茶啊二中》真香现场 打破动画喜剧偏见
-
光耀门楣的意思是什么_光耀门楣的意思 观点
-
通讯!追击“移动炸弹”!成都交通运输执法人员联动排查 挡获300余个非法运输煤气罐
-
当前资讯!中超积分榜:申花距榜首1分,津门虎13轮不败第4,浙江反超三镇第8
-
三轮车侧翻莲藕散落一地,武汉城管路长援手暖人心
-
世界微头条丨反正同为冷门的东方文化,波斯传统文化和印度传统文化,我是肯定欣赏不来
-
沉浸影音享受,荣耀以千元价位,让影音功能更丰富,确实用心!
-
河北省机器人产业联盟在唐山揭牌|环球热议
-
中国民用航空飞行学院贴吧百度贴吧_中国民用航空飞行学院贴吧_快看
-
星梦缘的演员为什么没火_星梦缘主演近况让人唏嘘 当前独家
-
红尖叶莴笋(红尖山组)-世界关注
-
俄乌冲突大结局预测:瓦格纳集结兵力攻入基辅,占领乌克兰西部
-
第三届“多多农研科技大赛”决赛结果揭晓 上海农科院队夺冠
-
《代号鸢》三千宇宙噩梦女帝阵容推荐 三千宇宙噩梦女帝通关攻略 今日热文
-
煅烧焦商品报价动态(2023-06-28)_世界滚动
-
大乌龙?致多股涨超10%后,350亿招标突然终止!背后公司成立9天就发招标文件,各方回应来了 世界热点
-
每日讯息!向太陈岚祝福萧敬腾求婚成功:我儿是个有情有义的人
-
从议题设置到场外展示 夏季达沃斯论坛科技元素“未来感”十足
-
环球快看:咖啡因有何好处?一天的摄取量是多少?
-
广州:二孩及以上家庭首套房公积金贷款最高限额上浮30%|视点
-
有趣的三维立体拼图:迷你英国大本钟_对于有趣的三维立体拼图:迷你英国大本钟简单介绍
-
当前动态:第七届陕西高校科技成果展暨校企对接洽谈会举办
-
【全球速看料】“暖城杯·2023 中国新能源汽车鄂尔多斯挑战赛”正式开赛
-
库里:普尔离队有些难过 但保罗能帮勇士赢球
-
美国5名警员对2名黑人实施虐待行为,被全数解职
-
今日观点!男性也可能罹患乳腺癌 专家呼吁重视乳头溢液症状
-
宁夏启动“进口食品企业安全责任年”活动