OpenWrt的内核启动分析

news2024/11/25 13:54:56

  u-boot从Flash分区中读取Linux内核到内存,然后跳转到内存(某个地址)执行Linux内核。Linux内核会进行一系列验证,根据设备树文件(见下图openwrt/target/linux/realtek/dts-5.15/XXX.dts,)注册相关驱动,创建分区,然后挂载根文件系统,启动第一个用户空间进程。

在这里插入图片描述

一、启动的第一个进程(/etc/preinit)

  Linux内核(根文件为busybox)默认启动的第一个用户空间进程是/sbin/init。但是openwrt将其修改为默认启动的第一个用户空间进程是/etc/preinit。
  在linux源码文件的/init/main.c文件内,static int __ref kernel_init(void *unused)函数在执行完后会调用/sbin/init
在这里插入图片描述
  而在openwrt源码里面/package/base-files/file/etc/preinit其实是一个shell脚本,内容为:

#!/bin/sh
# Copyright (C) 2006-2016 OpenWrt.org
# Copyright (C) 2010 Vertical Communications

[ -z "$PREINIT" ] && exec /sbin/init

export PATH="%PATH%"

. /lib/functions.sh
. /lib/functions/preinit.sh
. /lib/functions/system.sh

boot_hook_init preinit_essential
boot_hook_init preinit_main
boot_hook_init failsafe
boot_hook_init initramfs
boot_hook_init preinit_mount_root

for pi_source_file in /lib/preinit/*; do
	. $pi_source_file
done

boot_run_hook preinit_essential

pi_mount_skip_next=false
pi_jffs2_mount_success=false
pi_failsafe_net_message=false

boot_run_hook preinit_main

  编译后在openwrt系统内部内容如下图所示:
在这里插入图片描述
  其执行的第一条语句如下所示:[ -z “PREINIT”]意思为“PREINIT”为空时,即PREINIT为NULL时为真。由于执行这个preinit脚本的时候,“PREINIT”变量没有定义,所以其条件为真,于是执行后面的语句(exec /sbin/init)。
  /etc/preinit执行完之后会执行/etc/inittab文件。

二、/etc/inittab文件

  Linux操作系统/etc/inittab文件一般是被busybox下的/sbin/init解释;而openwrt系统/etc/inittab文件(位于openwrt源码的/target/linux/ramips/base-files/etc/inittab处)是由/sbin/procd来解释。
在这里插入图片描述

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

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

相关文章

gma 2 教程(二)数据操作:7.矢量数据操作简介

功能逻辑架构 gma矢量数据操作类主要包括数据资源(DataSource)、矢量图层(Layer)、矢量要素(Feature)(与ogr一致,内部与ogr差异巨大),三者的示意图如下&#…

ctfshow-web-红包一

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 题目 0x02 Write Up 上来就丢了一个站,还有一个不怎么有用的图片。 按照常规流程,先扫目录,但是无果(工具…

Java # Java基础八股

1、JVM、JRE、JDK之间的关系 个人理解:JVM可以帮助屏蔽底层的操作系统,使程序一次编译到处都可以运行,JVM可以运行class文件。JRE是java文件运行的环境,但不能新建程序,JRE包含JVM。JDK功能最齐全,包含了编…

基于TSINGSEE青犀视频AI智能技术的自然生态水源保护管理解决方案

一、方案背景 水是生命之源,日常生产生活离不开水。围绕全面深入打好打赢碧水保卫战,针对集中式饮用水源地等野外场景碎片化的特点,迫切需要建设数字智治、闭环管理、规范高效的水质监测体系,进一步加强水源地保护工作的开展落地…

腾讯云服务器优惠价格表(2023年最新版)

腾讯云作为国内领先的云服务提供商,提供了多种规格的云服务器,满足不同用户的需求,本文将详细介绍腾讯云服务器的优惠价格,并给出相应的购买建议。 腾讯云服务器提供了多种配置和多种购买时长选择,用户可以根据实际需求…

超震撼!全网疯传的第七届世界渲染大赛创意大盘点

第七届CG挑战赛TOP100新鲜出炉!这是一场被圈内誉为“地表最强”、“全球最火”的世界渲染大赛,由拥有百万订阅的油管博主 pwnisher 发起。这次比赛的创作主题是《Boss Fight—终极决斗》,吸引了2880名创意大师和视觉艺术爱好者的参与。他们的…

【操作系统】聊聊页面置换算法

操作系统的缓存淘汰 操作系统一是提供的基础编程接口,二是实现软件治理的功能。但是因为内存是有限的,想要在有限的内存多存储数据,就利用段、页、段页方式进行数据的映射。但是内存存储有限,所以如何将内存中不用的数据进行及时…

【数据分享】2012-2022年1km分辨率全球夜间灯光时序数据(无需转发\免费获取)

夜间灯光数据是我们在各项研究中经常使用的数据!在之前的文章中我们分享了来自NCEI国家环境信息中心的2012-2022年全球范围的逐年的NPP/VIIRS夜间灯光数据(可查看之前推送的文章获悉详情)! 我们本次为大家分享的是来自中国农业大…

shell脚本学习积累

文章目录 创建shell脚本并运行条件测试基础shell脚本打包过去24小时内修改过的文件自动解压 bzip2, gzip 和 zip不同类型的压缩包打印一个rpm包的统计信息【含有输入参数】 创建shell脚本并运行 方式1: vim myshell.sh #文件开头是#!/bin/bash 或 #!/bin/sh sh mys…

小黑完成广播操比赛,荣获三等奖,回来晕车晚上弹琴的leetcode之旅:121. 买卖股票的最佳时机

小黑代码 class Solution:def maxProfit(self, prices: List[int]) -> int:# 数组长度n len(prices)# 最大利润profit 0# 中间变量min_ prices[0]# 遍历每一个数据作为买点for i in range(1, n):# 滚动获取最小值if prices[i] - min_ > profit:profit prices[i] - m…

无涯教程-JavaScript - BIN2HEX函数

描述 BIN2HEX函数将二进制数转换为十六进制。 语法 BIN2HEX (number, [places])争论 Argument描述Required/Optionalnumber 您要转换的二进制数。 数字不能超过10个字符(10位)。数字的最高有效位是符号位。其余的9位是幅度位。 负数使用二进制补码表示。 Requiredplaces 要…

Scrum敏捷模式的优势点、实践经验及适用企业

Scrum敏捷模式是一种灵活、适应性强的开发方法,其核心理念是以短周期、高频率的方式进行项目开发,确保团队能够快速响应变化。 Scrum包含三个角色:产品负责人(Product Owner)、Scrum Master和开发团队(Tea…

IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南

引言 在开发分布式系统时,调试是一个重要但复杂的环节。开发者通常需要跨越多个服务、模块和线程来追踪和解决问题。在没有远程调试的情况下,许多开发者会在代码中添加各种日志语句,然后重新部署和上线来调试。这种方法不仅费时,…

Unity 编辑器资源导入处理函数 OnPostprocessTexture :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPostprocessTexture 用法 点击封面跳转下载页面 简介 在Unity中,我们可以使用编辑器资源导入处理函数(OnPostprocessTexture)来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的&…

Seal梁胜:近水楼台先得月,IT人员应充分利用AI解决问题

2023年9月2日,由平台工程技术社区与数澈软件Seal联合举办的⌈AIGC时代下的平台工程⌋——2023平台工程技术大会在北京圆满收官。吸引了近300名平台工程爱好者现场参会,超过3000名观众在线上直播平台观看了本届大会。 数澈软件 Seal 联合创始人梁胜博士和…

mysql文档--默认存储引擎--innodb存储引擎--innodb引擎全解

阿丹: 在mysql中innodb是默认的存储引擎。研究一下为什么它会被独宠。 官方解释: InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发&#xf…

活动报名场地预约自定义表单小程序开发

活动报名场地预约自定义表单小程序开发 专门为活动报名开发的一款小程序,可以自定义各种活动报名、活动预约,支持付费预约报名。 功能: 自定义字段:字符串、单选、复选、日期、列表、图片、城市、关联字段等自定义字段类型配置…

浅谈 Node.js 与快速入门使用——前端开发工程师必须要知道的技术(文末送书福利6.0)

文章目录 📋前言🎯什么是 Node.js🎯安装与使用 Node.js🧩直接安装 Node.js🧩使用 Node Version Manager(NVM)🧩使用 Node.js 🎯Node.js 基础知识🧩模块系统&a…

matplotlib 使用

import matplotlib.pyplot as plt %matplotlib inlineplt.figure()#创建一个画布 plt.plot([1, 0, 9], [4, 5, 6])#点数据,横坐标,纵坐标,相当于(1,4)(0,5)(9…

蒙特卡洛仿真

首先打开ADE,设置好要仿真的analysis以及output,工艺角选择mc 在ADE里面选择Launch-ADE XL,勾选想要仿真的输出(我这里要仿真的是DC电压)。 下图的输出结果要起好名字、type里面signal出来的结果是曲线图柱状图。expr(表达式&…