【Linux内核解析-linux-5.14.10-内核源码注释】内核启动kernel_init解释

news2024/9/21 21:52:26

源码

内核源码

解释1

  1. static int __ref kernel_init(void *unused): 声明一个静态整型函数kernel_init(),该函数不会被其他文件访问,使用__ref标记表示该函数是可重定位的,并且该函数不需要任何参数。

  2. wait_for_completion(&kthreadd_done);: 等待kthreadd线程完成初始化,wait_for_completion()函数会阻塞当前进程,直到指定的完成对象完成。

  3. kernel_init_freeable();: 调用kernel_init_freeable()函数进行内核初始化,该函数包括了内核的大部分初始化工作。

  4. async_synchronize_full();: 在进行异步初始化代码之前,需要进行同步操作,以确保所有异步初始化代码都已经完成。

  5. kprobe_free_init_mem();: 释放kprobe初始化时申请的内存空间。
    kprobe是一种用于动态跟踪内核函数调用的机制,在初始化阶段需要申请一些内存空间来存储相关的数据结构,该函数用于在初始化完成后释放这些内存空间。

  6. ftrace_free_init_mem();: 释放ftrace初始化时申请的内存空间。

  7. kgdb_free_init_mem();: 释放kgdb初始化时申请的内存空间。

  8. free_initmem();: 释放内核初始化时申请的内存空间。

  9. mark_readonly();: 将内核只读化,以提高系统的安全性和稳定性。
    这段代码是Linux内核启动过程中的一个重要函数rest_init()。该函数在内核初始化完成后,用于启动用户空间的第一个进程,即init进程。该函数会依次尝试多种方式来启动init进程,直到找到一个可行的方式。具体解释如下:

解释2

  1. pti_finalize();: 更新用户空间的页表,以完成PTI。
    PTI(Page Table Isolation)是一种安全机制,用于防止针对Meltdown漏洞的攻击。Meltdown漏洞是一种硬件漏洞,可以允许攻击者在不受限制的情况下读取内核内存中的敏感信息。为了解决这个问题,Linux内核引入了PTI机制,该机制将内核和用户空间的页表分离,以防止攻击者利用Meltdown漏洞来访问内核内存。

在Linux内核中,pti_finalize()函数用于更新用户空间的页表,以完成PTI机制。具体而言,该函数会将内核和用户空间的页表分离,并将用户空间的页表设置为只读状态,以防止恶意程序修改页表,从而绕过PTI机制。此外,pti_finalize()函数还会执行一些其他的安全检查和操作,以确保PTI机制能够正常工作。

pti_finalize()函数是Linux内核中用于完成PTI机制的重要函数,它通过更新用户空间的页表来分离内核和用户空间的页表,并确保PTI机制能够正常工作,从而提高系统的安全性和稳定性。
2. system_state = SYSTEM_RUNNING;: 将系统状态设置为SYSTEM_RUNNING,表示内核已经完成初始化,可以开始运行用户空间的进程。

  1. numa_default_policy();: 设置NUMA内存分配策略为默认值。
    NUMA(Non-Uniform Memory Access)是一种计算机内存架构,它允许多个处理器访问共享内存,以提高系统的性能和可扩展性。在NUMA系统中,每个处理器都有自己的本地内存,同时也可以访问其他处理器的远程内存。为了更好地管理内存,Linux内核提供了NUMA内存分配策略,用于确定在NUMA系统中如何分配内存。

在Linux内核中,numa_default_policy()函数用于设置NUMA内存分配策略为默认值。具体而言,该函数会根据系统的硬件配置和内核参数来确定NUMA内存分配策略,并将其设置为默认值。在设置NUMA内存分配策略之前,该函数还会执行一些其他的操作,如检查NUMA节点的状态、初始化NUMA节点的内存管理器等。

总之,numa_default_policy()函数是Linux内核中用于设置NUMA内存分配策略的重要函数,它根据系统的硬件配置和内核参数来确定NUMA内存分配策略,并将其设置为默认值,以提高系统的性能和可扩展性。
4. rcu_end_inkernel_boot();: 结束内核启动期间的RCU初始化。

  1. do_sysctl_args();: 处理内核启动参数中的sysctl参数。

  2. if (ramdisk_execute_command) {...}: 如果内核启动参数中指定了initrd命令,则执行该命令。

  3. if (execute_command) {...}: 如果内核启动参数中指定了init命令,则执行该命令。

  4. if (CONFIG_DEFAULT_INIT[0] != '\0') {...}: 如果内核配置文件中指定了默认的init命令,则执行该命令。

  5. if (!try_to_run_init_process("/sbin/init") || ...: 依次尝试尝试多种方式来启动init进程,包括/sbin/init/etc/init/bin/init/bin/sh等。如果所有方式都失败,则触发内核恐慌,提示用户使用init=选项来指定init进程。

rest_init()函数是Linux内核启动过程中的一个重要函数,用于启动用户空间的第一个进程,即init进程。在启动init进程之前,该函数会完成一系列必要的初始化工作,以确保内核能够正常运行。

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

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

相关文章

FL Studio 2023中文高级版水果编曲软件下载

FL Studio 2023中文版是一款非常经典的音乐制作软件,这款软件除了可以为用户提供全面的音乐制作功能之外,还有丰富的主题和皮肤供用户选择,让用户不但做出的音乐具有自己的风格,连制作的音乐的过程也个性十足,非常适合…

荔枝派Zero(全志V3S)驱动开发之串口

系列文章目录 文章目录 系列文章目录前言一、修改及编译设备树1、修改设备树文件2、编译 kernel 二、移植 minicom1、配置buildroot2、编译 buildroot 三、拷贝到 SD 卡四、测试验证1、确认 minicom 是否正常2、确认串口3、发送测试4、接收测试 前言 修改设备树打开 uart1 和 …

14-4-进程间通信-共享内存

之前学习了无名管道,命名管道,消息队列。 还剩下:共享内存,信号,信号量。 本章讨论的是共享内存。 一、共享内存的应用场景 A进程有自己的存储空间; B进程也有自己的存储空间; A进程和B进…

使用物联网技术进行肥胖管理是可行的吗?

在物联网和可穿戴设备的帮助下,个人现在可以监测自己的健康指标,如心率、血糖水平和身体活动。这些个性化的见解帮助人们对自己的生活方式做出明智的决定,从而带来更好的体重管理结果。 利用物联网技术成功管理肥胖症 肥胖是一个全球性的健…

还在挣扎文件

由于在老式打印机里面每打下一行都要进行回车和换行,在windows系统里面也延续了这个惯例,但是c语言是只有换行,但是为了兼容,会自动进行转换;比如,它在写入文件的时候换行会自动转换为回车加换行&#xff0…

加强网络风险生命周期

当今业务环境中云原生应用程序的激增帮助组织简化了运营。 企业现在可以近乎实时地监控数据、与客户互动并分享见解,帮助他们克服曾经阻碍生产力的低效率问题。 然而,使用云也极大地扩展了企业可利用的攻击面。 CSPM、CWPP、CNAPP、SAST、SCA、IaC、D…

网络基础3【网络层、数据链路层】

目录 一.网络层 1.IP协议 (1)基本概念 (2)协议头格式 2.网段划分 3.特殊的IP地址 4.IP地址的数量限制 5.私有IP地址和公网IP地址 6.路由 二.数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比MAC地址和IP地址 …

【图】邻接矩阵

图的存储结构分为邻接矩阵和邻接表两种,带权的图叫做网。 邻接矩阵 邻接矩阵适合边多的图 无向图 两个顶点之间的连线是双向的,一个一维数组存顶点,一个二维数组存边 若有边则值为1,反之为0 邻接矩阵需要知道点数、边数、一个二维…

ARM微处理器的指令集概述

ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM微处理器的指令集是加载(Load)/存储(Store)型的,也即指令集仅能处理寄存器中的数据&#xff0…

【论文笔记】Attention和Visual Transformer

Attention和Visual Transformer Attention和Transformer为什么需要AttentionAttention机制Multi-head AttentionSelf Multi-head Attention,SMA TransformerVisual Transformer,ViT Attention和Transformer Attention机制在相当早的时间就已经被提出了&…

Word2vec原理+实战学习笔记(二)

来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理实战学习笔记(一) 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022ee_zFpnlHXA/6 5 对比模型(论文Model Architectur…

锐捷(十七)锐捷单臂路由的配置

一 实验拓扑 二 实验需求 用单臂路由实现不同vlan间的通信,即要求vlan10的主机和vlan20的主机之间通过三层实现互访 三 实验分析 路由器的物理接口可以被划分成多个逻辑接口,这些被划分后的逻辑接口被形象的称为子接口。值得注意的是这些逻辑子接口不能…

Redis高级——键值对设计

1、Redis键值设计 1.1、优雅的key结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如:我们的登录业务,保存用户信息&a…

AIGC迈向通用人工智能时代

一、AIGC“起飞”的背后 2023年1月30日,AIGC概念股突飞猛涨。一时间,AIGC再次站上风口浪尖。 AIGC(AI Generated Content)是指利用人工智能技术来生成内容,被认为是继UGC、PGC之后的新型内容生产方式,常见…

哈希的应用 -- 布隆过滤器与海量数据处理

文章目录 布隆过滤器概念布隆过滤器设计思路布隆过滤器的应用布隆过滤器模拟实现布隆过滤器的基本框架布隆过滤器的插入布隆过滤器的探测布隆过滤器的删除 布隆过滤器优点布隆过滤器缺陷布隆过滤器模拟实现代码及测试代码海量数据处理哈希切割哈希切分 布隆过滤器概念 布隆过滤…

【机器学习】HOG+SVM实现行人检测

文章目录 一、准备工作1. 下载数据集2. 解压数据集 二、HOG特征简介1. 梯度(Gradient)2. 格子(Cell)3. 块归一化(Block Normalization)4. HOG特征(HOG Feature)5. 使用skimage.featu…

“五一”假期消防安全知识要牢记之消防安全知识答题活动

“五一”期间,容易出现哪些安全隐患,生产生活中要注意哪些安全事项,一起来看! 森林防火: 1.禁止将火柴、汽油等易燃物带入山林,禁止乱扔火种。 2.景区管理单位要加强防火巡逻,禁止野外火源&am…

smbms项目搭建

目录 1.搭建一个maven web项目 2.配置Tomcat 3.测试项目是否能够跑起来 4.导入项目中会遇到的Jar包 5.项目结构搭建 6.项目实体类搭建 7.编写基础公共类 1.数据库配置文件 2.编写数据库的公共类 3.编写字符编码过滤器 3.1web配置注册 4.导入静态资源 1.搭建一个maven web项目 …

C++前置声明的理解

知识补充 在C/C中引入一个头文件时,在编译器预处理的时候会将引入头文件的地方简单替换成头文件的内容。这样做的后果是很容易引起头文件的重复引用。所以我们在编写头文件是一般有以下规定来防止头文件被重复包含。 MyWidget.h #ifndef MyWidget_H_ #define MyWi…