Openwrt linux 启动流程

OpenWRT 启动流程

内核启动过程:【/init/mian.c】

Uboot --> start_kernel() --> rest_init() --> kernel_thread(kernel_init) --> kernel_init_freeable()

初始化过程:

Linux Kernel(kernel_init) --> /etc/preinit  --> /sbin/init --> /etc/preinit, /sbin/procd --> /sbin/procd。

/etc/preinit脚本是系统其它脚本的入口,在/etc/preinit脚本中,第一条命令为:

[ -z “$PREINIT” ] && exec /sbin/init

由于一开始PREINIT没有被设置,所以为空,执行/sbin/init

其中/sbin/init 由procd/init.c编译产生的(它先执行一些ulog_open、early、cmdline等函数。最后执行preinit()函数。)

init.c部分代码如下:

当procd退出后会调用execvp函数执行/sbin/procd,替换当前的init进程,这就是系统启动完成后,进程号为1最终为/sbin/procd的由来,中间改变了几次。

preinit函数配置了环境变量PREINIT,然后再去fork进程来执行/etc/preinit,执行完毕后,再调用回调函数spawn_procd,在回调函数spawn_procd中调用了execvp函数来启动/sbin/procd,/procd最后执行/etc/init.d/目录下的文件,从而启动系统各个服务。

第二次开始执行 /etc/preinit的过程

当PREINIT被设置好了,preinit就会执行上面的代码。

可以看到三个脚本被启动:

. /lib/functions.sh

. /lib/functions/preinit.sh

. /lib/functions/system.sh

这几个脚本主要定义了shell函数,在preinit.sh中,定义了一些函数挂到hook上,当运行时,这些hook会按函数加入的顺序来启动函数。如boot_hook_init()等函数,之后使用boot_hook_init定义了五个hook节点:

boot_hook_init preinit_essential

boot_hook_init preinit_main

boot_hook_init failsafe

boot_hook_init initramfs

boot_hook_init preinit_mount_root

后面就是当前shell下依次在执行/lib/preinit/目录下的脚本:

定义那些要添加到hook结点的函数,然后通过boot_hook_add将该函数添加到对应的hook结点。

最后,/etc/preinit就会执行boot_run_hook函数执行对应hook结点上的函数。在当前环境下只执行了preinit_essential和preinit_main结点上的函数,如下:

boot_run_hook preinit_essential

boot_run_hook preinit_main

到此,/etc/preinit执行完毕并退出。

当/etc/preinit执行完毕并退出,进程消失了,但此时已经调用了回调函数spawn_procd(),而回调函数spawn_procd()里面execvp(“procd”),所以最终procd会重新被执行,从而启动系统其它各个配置!

lib/preinit/

在/etc/preinit脚本中有如下代码:
. /lib/functions.sh
. /lib/functions/preinit.sh
. /lib/functions/system.sh
查看. /lib/functions/preinit.sh脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频号小店入驻需要多少资金?入驻费用详解!

我是电商珠珠 视频号团队在22年7月的时候,开始发展自己的电商平台-视频号小店。 这一消息在电商圈不胫而走,我也是从10月开始转向视频号小店,目前已经拥有了属于自己的视频号小店运营团队。 很多想要做视频号小店的新手,都会跑…

2023 年最新百度智能云千帆大模型 Node.Js 本地测试 / 微信机器人详细教程

千帆大模型概述 一站式企业级大模型平台,提供先进的生成式AI生产及应用全流程开发工具链。直接调用ERNIE-Bot 4.0及其他主流大模型,并提供可视化开发工具链,支持数据闭环管理、专属大模型定制、大模型训练调优、插件编排等功能。 千帆大模型…

Python基础:字符串详解(需补充完善)

1. 字符串定义 在Python中,字符串是一种数据类型,用于表示文本数据。字符串是由字符组成的序列,可以包含字母、数字、符号和空格等字符。在Python中,你可以使用单引号()或双引号("&#x…

阅读笔记——《Removing RLHF Protections in GPT-4 via Fine-Tuning》

【参考文献】Zhan Q, Fang R, Bindu R, et al. Removing RLHF Protections in GPT-4 via Fine-Tuning[J]. arXiv preprint arXiv:2311.05553, 2023.【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。 目录 摘要 一、介绍 二、背景 三、方法…

C语言 - 语句

C语言-语句 1. 随机数 作用:随机获取一个数字 对应的头文件 stilib.h time.h相关函数 srand() rand()使用: 1、设置随机数种子,一个程序只需设置一次 srand(time(NULL));2、获取随机数 int 变量名 rand();获取指定范围的随机数 获取0~1…

输出后,我悟了!

大家好,我是木川 今天和前同事吃饭聊天,谈到了输出,今天简单谈下关于输出的重要性 一、为什么要输出 1、不输出容易忘,如果不输出很容易就忘记了,如果再遇见一次,还是需要重新学习,实际上是浪费…

有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

【Linux学习笔记】protobuf 基本数据编码

https://zhuanlan.zhihu.com/p/557457644https://zhuanlan.zhihu.com/p/557457644 [新文导读] 从Base64到Protobuf,详解Protobuf的数据编码原理本篇将从Base64再到Base128编码,带你一起从底层来理解Protobuf的数据编码原理。本文结构总体与 Protobuf 官…

命令行与环境变量【03】

文章目录 1. 为什么要学命令行?2. 命令行的打开方式3. 常用命令3.1 切换磁盘命令3.2 改变目标目录 -- cd4. 在命令行任意启动一个文件5. 小练习:cmd-原神启动6.环境变量本节学习目标: ①理解什么是命令行,为什么要学命令行?   ②掌握如何进行切换磁盘操作(d: e: f:) …

关于SSD的FTL

FTL Flash Translation Layer 闪存转换层 作用:完成主机逻辑地址空间到闪存物理空间的映射 简言之,使用者在C盘下写入一个文件,对应这个文件资料写进SSD,SSD会记录这份资料存储的位置,在HOST再次读取时,从SSD闪存对应位…

【随笔记录】VMware搭建python开发环境

Vmware虚拟机总是连接不到网络。 环境为:笔记本WLAN 解决方法。 1.直接使用VMware 编辑->虚拟网络编辑器->恢复默认设置。 2.取消网卡的IP的dhcp获取,改为static。网关为提供IP的主机的网络IP(NAT模式) 3.windows打开共享网…

kotlin 防范竞态

当你调用成员,这个成员可能为null,可能为空值,就必须采用防范竞态条件,这个是 KT 编程的规范化 下面举例: 防范竞态条件【尽量使用 ? 内置函数 空合并操作符】 fun test(){val info: String ? "&q…

软件学院PTA天梯赛初赛选拔赛题解

目录 7-2 生肖确定(模拟) AC代码: 7-3 韩信点兵(模拟) AC代码: 7-4 程序员买包子(模拟) AC代码: 7-5 h0078. 蛇形矩阵变形 AC代码: 7-6 军事体能成绩…

23.11.26日总结

图片与文字顶部对齐&#xff1a; <div class"addDishImgBox"><span class"addDishImgZi">商品图片&#xff1a;</span><img :src"myStorePhoto" class"addDishImg"> </div> .addDishImgBox{display: f…

8.前端--CSS-文本属性【2023.11.26】

CSS Text&#xff08;文本&#xff09;属性可定义文本的外观&#xff0c;比如文本的颜色、对齐文本、修饰文本、文本缩进、行间距等 1.文本颜色 color 属性用于定义文本的颜色。 语法&#xff1a; div { color: red; }属性&#xff1a; 2.文本对齐 text-align 属性用于设置元…

学生党福音!一个能自定义词库的单词软件--单词魔方

大家好 我是Yhen 这一期给大家介绍一款自制的单词软件–单词魔方 文章目录 一.创作缘由二.功能介绍&升级内容三.使用方法四.程序获取 一.创作缘由 为什么会有想法开发这个单词软件呢&#xff1f; 因为平时自己在做阅读&#xff0c;看电影时积累下来了一些单词 当我想要系…

【Linux】Linux项目自动化构建工具 --- make / makefile

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和Linux还有算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 …

uniapp使用Vue3挂载函数到全局

在uni-app中&#xff0c;我们可以使用Vue3的全局API来挂载函数到全局。以下是一个简单的示例&#xff1a; 首先&#xff0c;我们需要在main.js文件中引入Vue3和我们的全局函数&#xff1a; import { createApp } from vue import App from ./App.vue import globalFunction f…

零基础学python第二天||除法

除法啰嗦&#xff0c;不仅是python。 整数除以整数 进入python交互模式之后&#xff08;以后在本教程中&#xff0c;可能不再重复这类的叙述&#xff0c;只要看到>>>&#xff0c;就说明是在交互模式下&#xff09;&#xff0c;练习下面的运算&#xff1a; >>…

Vue3 实现 PDF 文件在线预览功能

我们可以使用 pdf.js 这个库。首先需要安装 pdf.js&#xff1a; npm install pdfjs-dist接下来&#xff0c;我们在 Vue3 项目中创建一个名为 PdfViewer.vue 的组件&#xff1a; <template><div class"pdf-viewer"><canvas ref"pdfCanvas"…