Linux源码——启动流程1

news2024/11/27 14:50:00

主要

大概流程就是:

  • 通电自检-----》bios----》bootloader —》内核。
  • 其中内核这部分是这篇主要的,通过bootloader初始化好一些条件,然后调用kernel_entry()开始正式进入内核之中,后面就是内核操作了,启动进程什么的。

宏观启动流程

参考这个大佬写的
https://blog.csdn.net/ligare/article/details/124613619
https://blog.csdn.net/sinat_27298703/article/details/46470823

通电、BIOS、主引导记录、操作系统
在这里插入图片描述

bootloader

https://blog.csdn.net/m0_56145255/article/details/122542564

Linux微观(函数) 1.网络

这个
https://zhuanlan.zhihu.com/p/524298207

arch/arm/kernel/head-armv.S

该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码,
主要作用是检查CPU ID, Architecture Type,初始化BSS等操作,并跳到start_kernel函数。在执行前,处理器应满足以下状态:

r0 - should be 0 
r1 - unique architecture number 
MMU - off 
I-cache - on or off 
D-cache – off
/* 部分源代码分析 */
/* 内核入口点 */
ENTRY(stext)
/* 程序状态,禁止FIQ、IRQ,设定SVC模式 */
mov r0, #F_BIT | I_BIT | MODE_SVC@ make sure svc mode
/* 置当前程序状态寄存器 */
msr cpsr_c, r0 @ and all irqs disabled
/* 判断CPU类型,查找运行的CPU ID值与Linux编译支持的ID值是否支持 */
bl __lookup_processor_type
/* 跳到__error */
teq r10, #0 @ invalid processor?
moveq r0, #'p' @ yes, error 'p'
beq __error
/* 判断体系类型,查看R1寄存器的Architecture Type值是否支持 */
bl __lookup_architecture_type
/* 不支持,跳到出错 */
teq r7, #0 @ invalid architecture?
moveq r0, #'a' @ yes, error 'a'
beq __error
/* 创建核心页表 */
bl __create_page_tables
adr lr, __ret @ return address
add pc, r10, #12 @ initialise processor
/* 跳转到start_kernel函数 */
b start_kernel

start_kernel()函数分析

  • lock_kernel()
/* Getting the big kernel lock.
* This cannot happen asynchronously,
* so we only need to worry about other
* CPU's.
*/
extern __inline__ void lock_kernel(void)
{
    if (!++current->lock_depth)
    spin_lock(&kernel_flag);
}

kernel_flag 是一个内核大自旋锁,所有进程都通过这个大锁来实现向内核态的迁移。

只有获得这个大自旋锁的处理器可以进入内核,如中断处理程序等。在任何一对 lock_kernel/unlock_kernel函数里至多可以有一个程序占用CPU。

进程的lock_depth成员初始化为-1,在 kerenl/fork.c文件中设置。在它小于0时 (恒为 -1),进程不拥有内核锁;当大于或等于0时,进程得到内核锁。

  • setup_arch()
    -在这里插入图片描述

Linux启动 2.龙芯Linux那本书

龙芯书第二章专门讲了启动。

宏观

在这里插入图片描述

微观

在这里插入图片描述


在这里插入图片描述

  • arch/mips/boot/compressed/head.S
  • 在这里插入图片描述
#include <asm/asm.h>
#include <asm/regdef.h>

	LEAF(start)
	/* Save boot rom start args */
	move	s0, a0
	move	s1, a1
	move	s2, a2
	move	s3, a3

	/* Clear BSS */
	PTR_LA	a0, _edata
	PTR_LA	a2, _end
1:	sw	zero, 0(a0)
	addiu	a0, a0, 4
	bne	a2, a0, 1b

	PTR_LA	a0, (.heap)	     /* heap address */
	PTR_LA	sp, (.stack + 8192)  /* stack address */

	PTR_LA	t9, decompress_kernel
	jalr	t9

2:
	move	a0, s0
	move	a1, s1
	move	a2, s2
	move	a3, s3
	PTR_LI	t9, KERNEL_ENTRY
	jalr	t9

3:
	b	3b

	END(start)

	.comm .heap,BOOT_HEAP_SIZE,4
	.comm .stack,4096*2,4
  • /arch/mips/kernel/head.S
    在这里插入图片描述
    kernel_entry()。内核的真正入口。
    在这里插入图片描述

大概流程就是:

  • 通电 自检 bios bootloader 内核。
  • 其中内核这部分是这篇主要的,通过bootloader初始化好一些条件,然后调用kernel_entry()开始正式进入内核之中,后面就是内核操作了,启动进程什么的。

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

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

相关文章

Java知识点

Java浅拷贝 Java的深拷贝和浅拷贝 - YSOcean - 博客园 (cnblogs.com) Clone 是 Object 类中的一个方法&#xff0c;通过对象A.clone() 方法会创建一个内容和对象 A 一模一样的对象 B&#xff0c;clone 克隆&#xff0c;顾名思义就是创建一个一模一样的对象出来&#xff08;浅…

如何确保海外服务器的高可用性?

服务器正常运行时间和站点可用性是每个企业的首要任务。但对于那些通过在线业务盈利的公司来说&#xff0c;确保可靠性是最重要的。然而&#xff0c;任何意外停机都是有代价的&#xff0c;而硬件故障是最常见的原因。不过好在这也是可以预防的。那么&#xff0c;如何确保海外服…

怎样把网页上的音频转换成mp3格式?试试这几个转换方法

大家平时喜欢听音乐吗&#xff1f;我经常会在网上保存一些不错的音频到设备上&#xff0c;这样子就方便我可以随时播放了。那你们有遇到过该音频格式不支持播放的情况吗&#xff1f;这种情况是因为播放器兼容的音频格式比较少&#xff0c;需要我们将音频格式转换成播放器兼容的…

如何发现Python依赖库漏洞

因为python编程的流行&#xff0c;python的各种库也越来越多&#xff0c;但许多小伙伴可能只注意到了自己编程所要依赖的环境&#xff0c;但是却忽略了库的版本也有可能存在漏洞的风险&#xff0c;如果不及时检查和更新python依赖库&#xff0c;那么很有可能你写的代码本身就存…

[附源码]SSM计算机毕业设计医院药房管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

《500强高管谈VE》-以VE ORIENTED管理为目标

文章出处&#xff1a;日本VE协会杂志文章翻译&#xff1a;泰泽项目部 关注泰泽&#xff1a;实现高利润企业《500强高管谈VE》-以VE ORIENTED管理为目标 作者&#xff1a;代表董事兼副社长近藤一 以阪神大地震为首的诸多事件等&#xff0c;社会动荡中&#xff0c;经济的动向也以…

HTML + CSS 实现矩形/圆形进度条效果 - SVG

本文记录通过 HTML CSS 部分原生 JS 使用 SVG 嵌入 HTML 文档的用法实现常见的圆形和矩形进度条效果&#xff0c;效果图如下&#xff1a;&#xff08;实际运行效果是进度条从 0 过渡到一个目标值比如 100%&#xff09; 下面直接上代码&#xff1a; 圆形 HTML&#xff1a;线…

【数据结构】第七章 图

1.单选(2分) 已知一个有向图的邻接矩阵表示&#xff0c;要删除所有从第i个结点发出的边&#xff0c;操作为&#xff08; &#xff09;。 ‏A.将邻接矩阵的第i列删除 B.将邻接矩阵的第i行元素全部置为0 C.将邻接矩阵的第i列元素全部置为0 D.将邻接矩阵的第i行删除 2.单选(2分)…

UE5——动画混合

一、引言 关于动画的一些基础可以看我往期的文章&#xff1a;《UE5——动画重定向》 二、动画混合 1、动画混合的原理 动画&#xff1a; 我们知道动画实际上就是控制静态模型中的某些点按照一定的预定轨迹移动&#xff0c;简言之就是 “一组变换信息的集合” 动画混合&…

多功能手持读数仪VH03如何连接手机蓝牙

VH03 内置有基于 SPP&#xff08;Serial Port Profile&#xff09;协议的蓝牙接口&#xff0c;蓝牙名称为“VH03”。 使用任何支持 SPP 协议的蓝牙设备均可实现与 VH03 的连接。当蓝牙建立连接后&#xff0c;可向 VH03 发送指令进行交互&#xff08;前述 MODBUS、AABB、字符串…

CET-4 week9 阅读 写译

去# 阅读 question 定位 寻找有意义有目的 的动词符号 – &#xff0c; 转折词从句的解释说明理解超刚词不完全一样的地方要注意 注意匹配对应 answer 是否出现比较 比较对象 结果 article 重点长难句考点不在简单词上 选相反的答案或其他 仔细阅读 严格翻译题目 知道重点…

采用策略分布曲线评估信用风险模型的效果

在信贷业务的风控体系中&#xff0c;模型的构建与应用始终是一项重点内容&#xff0c;最常见的莫过于贷前环节的申请信用风险模型。作为典型的二分类模型&#xff0c;为了有效识别好坏用户群体&#xff0c;我们经常选取某些评价指标来量化模型的综合性能&#xff0c;例如KS、AU…

Java定时任务技术分析

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建SpringBoot集成Mybatis项目实操SpringBoot集成MybatisPlus项目实操SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理&#xff1a;Liquibase…

内存 管理

内存管理c/c中内存分布sizeof 与 strlenc 语言中动态内存管理方式malloccallocreallocc 中动态内存管理new 与 delete自定义类型空间的动态分配new 与 delete 的实现operator new 与 operator delete基本概念辨识malloc/free 与 new/delete 区别 *****内存泄漏c/c中内存分布 c…

手把手教你:CSS + JS实现文本交替

1. Koa 中间件 Koa 的中间件通过一种更加传统的方式进行级联&#xff0c;摒弃了以往 node 频繁的回调函数造成的复杂代码逻辑。使用异步函数&#xff0c;我们可以实现"真正" 的中间件。与之不同&#xff0c;当执行到 yield next 语句时&#xff0c;Koa 暂停了该中间…

Qt 在linux上检测内存泄漏,用valgrind的问题

我在ubuntu上装了Qt5.15.2, 打开我的项目后&#xff0c;准备检测内存泄漏问题。 此时&#xff1a; 内存检测工具都是可用状态&#xff0c;但点击内存检测后&#xff0c;进度条走完后&#xff0c;就结束了。项目都没启动起来&#xff0c;这怎么检测内存问题&#xff1f; 然后&…

11月30日(第二天)

序列化&#xff1a;implements Serializable&#xff0c;public final static Long SeriaVersionUid 1L;MP的使用步骤&#xff1a;在BookBO类上使用TableName(“表名")去关联&#xff0c;在字段上使用TableId&#xff0c;TableField进行字段关联。(最好新建一个BookVO类,…

嫦娥五号探测器详细介绍

嫦娥五号&#xff08;Change 5&#xff09;&#xff0c;即嫦娥五号探测器&#xff0c;是由中国空间技术研究院研制的中国首个实施无人月面取样返回的航天器&#xff0c;是完成中国探月工程重大科技专项“绕、落、回”三步走发展战略最后一步的关键任务。 中国探月工程三步走 嫦…

Linux 主机间ssh相互免密

Linux 主机间ssh相互免密两步实现ssh主机免密详细教程请往下看主机间ssh相互免密 —— 方法一主备两台未配置密钥主机作为测试生成公私密钥拷贝公钥到目标主机ssh免密测试主机间ssh相互免密——方法二实验准备分发密钥对免密测试MobaXterm免密登录服务器&#xff08;以ecs-4207…

SAP中的PI接口

文章目录1 Pi overall2 Create pi process3 Inbound interface4 Outbound interface5 Matter need attention6 Pi test7 View log8 Transport CTS1 Pi overall What is the pi ? Pi is Sap’s middle software . it is interacted with SAP an external system. 2 Create p…