Linux内核的引导和启动过程

linux运维基础[启动引导与修复]——————开机启动过程、MBR出现问题、启动引导文件丢失、内核镜像文件丢失 文章目录1. 开机启动过程2.实验环境3.grub磁盘引导出现问题3.1 模拟问题3.2 解决问题4.启动引导文件丢失4.1 模拟问题4.2 解决问题5.内核镜像文件丢失5.1 模拟问题5.2 解决问题 1. 开机启动过程 过程如下图: 1)加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。 这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。 在此之后,计算机心里就有谱了,知 阅读详情

        我的问题:从我们按下开机或者复位键到出现企鹅系统登录框,到开心看电影,玩游戏(不要说Linux下不行,你太OUT了)爽得连自己都忘了是谁的时候,想过这个系统是如何引导的吗?没有,没关系,是人哪还有不犯错误的,以前逃了那么多课,这不现在就开始补了,还真应了那就话:在外面混,总是要还的..

        先给大家来个图(为啥每个人都喜欢看图,又不是美女,嘿嘿)来总体认识一下Linux内核的引导过程,然后详细介绍:

        

        这个图是X86 PC上的Linux 内核的引导过程,在嵌入式系统上的Linux内核的引导过程基本类似。不同只是在X86 PC上有一个从BIOS转移到Bootlloader的过程,嵌入式系统往往是复位后就直接运行Bootloader。

        从图上可以看出,在系统启动进入与Linux相关代码之前,会经历如下阶段:

        1)当系统上电或复位时,CPU会将程序计数器指针赋值为一个特定地址0XFFF0,并执行该地址里存放的指令。在PC中,该地址是存放在BIOS中,它保存在主板上的ROM或Flash中。

        2)BIOS运行时安装CMOS的设置定义的启动设备顺利来搜索处于活动状态且可以引导的设备。若从硬盘启动,BIOS会将硬盘MBR(主引导记录)中的内容加载到RAM。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。

        3)主引导加载程序查找并加载次引导加载程序。它在分区表中查找活动分区,当找到一个活动分区时,扫描分区表中的其他分区,一确保它们都不是活动的。当这个过程验证完成之后,就将活动分区的引导记录从这个设备中读入RAM并执行它。

        4)次引导加载程序加载Linux内核和可选的初始RAM磁盘,将控制权交给Linux内核源代码。

        5)运行被加载的内核,并启用用户空间应用程序。

        下面都上边加到linux内核的步骤5进行更详细的分析,它主要是完成启动内核并运行用户空间的init进程的功能。

        当内核映像被加载到RAM之后,Bootloader的控制权被释放。内核映像并不是可直接执行的目标代码,而是一个压缩过的zImage(小内核)或者bzImage(大内核).当bzImage(用于i386映像)被调用时它从/arch/i386/boot/head.S的start汇编例程开始执行。这个例程进行一些基本的硬件配置,并调用/arch/i386/boot/compressed/head.S中的 startup_32例程。它设置一个基本的的运行环境(如堆栈)后清除BSS段,用/arch/i386/boot/compressed/misc.c中的decompressed_kernel()解压缩内核。如下图:

        

        内核被解压缩到内存中之后会再调用/arch/i386/kernel/head.S文件中的startup_32例程,这个新的例程会初始化页表,并启用内存分页机制,接着为任何可选的浮点单元(FPU)检测CPU的类型,并将其存储起来供以后使用。

        这些都在做完以后,/init/main.c中的start_kernel()函数被调用,进入到与体系结构无关的Linux内核部分。

        start_kernel()函数会调用一系列初始化函数来设置终端,执行进一步的内存配置。之后,/arch/i386/kernel/process.c中kernel_thread()被调用一启动第一个核心线程,该线程执行init()函数,而原执行序列会调用cpu_idle(),等待调度。

        作为核心线程的init()函数完成外设及其驱动程序的加载和初始化,挂载根文件系统。init()打开/dev/console设备,重定向stdin,stdout和stderr到控制台。之后,它搜索文件系统中的init程序(当然也可以用"init="命令行参数制定init程序),并使用execve()系统调用执行init程序。其中搜索的顺序为/sbin/init,/etc/init,/bin/init和/bin/sh。在嵌入式系统中,多数情况下,可以给内核传入一个简单的shell脚本来启动必需的嵌入式应用程序。

        走到这里,终于把linux内核的引导和启动过程给走完了(一口气,累死我了),而init()对应的由start_kernel()创建的第一个线程也进入到用户模式。

        注:本文参考了人民邮电出版社《Linux设备驱动开发详解》一书,再次表示感谢。



10、Linux内核启动过程及GRUB引导加载器详解 本文详细解析了Linux内核的启动过程及GRUB引导加载器的工作原理。内容涵盖Linux系统从BIOS初始化到用户空间启动的完整流程,介绍了如何查看启动时的诊断消息、理解并配置内核参数、GRUB的基本功能及其配置方法。此外,还深入探讨了GRUB的安装流程、常见问题及解决方法,并提供了内核启动和GRUB使用的最佳实践,帮助读者全面掌握Linux系统的启动机制和引导管理。 阅读详情

相关推荐

Linux内核引导过程

Linux内核引导过程

Linux内核引导启动过程

以Linux 0.12版本为例,介绍Linux内核引导启动过程

weixin_44022769的博客 640

毫米波与太赫兹:十射线模型建模

Pt=1,只考虑地面和前后两面墙的反射,反射系数为0.7。用matlab设计程序并实现该功能。,总计考虑10条路径,求出接收功率随。

SupermarketX的博客 785

Linux引导过程

操作系统的启动分为两个阶段:引导和启动。引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行。启动阶段接管了剩余工作,直到操作系统进入可操作状态。

g_l_d_y的博客 723

CTF实战:Wireshark数据包分析从入门到精通(附经典题型解析)

本文详细介绍了Wireshark在CTF比赛中的数据包分析技巧,从基础抓包到高级协议解析,涵盖HTTP流量分析、USB键盘数据还原等实战案例。通过经典题型解析,帮助读者掌握精准过滤、文件提取等核心技能,提升CTF竞赛中的网络流量分析能力。

pz890123的博客 586

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不支持问题

本文详细解析了在国产麒麟系统上部署Kettle时遇到的aarch64架构不支持问题,提供了从获取适配的SWT库、修改启动脚本到生产环境调优的完整解决方案。文章重点解决了ARM架构与Java GUI工具的兼容性挑战,并分享了内存配置、字体显示及Carte服务部署等实战经验,助力用户在国产化环境中稳定运行ETL流程。

weixin_29197835的博客 560

linux启动过程(一)

系统启动 系统启动阶段依赖于引导 Linux 系统上的硬件。在嵌入式平台中,当系统加电或重置时,会使用一个启动环境。这方面的例子包括 U-Boot、RedBoot 和 Lucent 的 MicroMonitor。嵌入式平台通常都是与引导监视器搭配销售的。这些程序位于目标硬件上的闪存中的某一段特殊区域,它们提供了将 Linux 内核映像下载到闪存并继续执行的方法。除了可以存储并引导 Linux 映

嵇康的专栏 653

Maxwell中铜导体热损计算的关键步骤与技巧

本文详细介绍了在Maxwell软件中准确计算铜导体热损的关键步骤与实用技巧。重点阐述了如何正确设置涡流场求解器、启用涡流效应、根据工作频率计算并应用肌肤深度以指导网格剖分,以及准确施加激励和定义电流回路。文章还强调了使用温度相关材料属性和进行后处理验证的重要性,旨在帮助工程师获得可靠的热损计算结果,优化产品设计。

weixin_29232121的博客 496

【Linux】引导过程与服务控制

Linux系统引导过程与服务控制

weixin_68840588的博客 1397

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4587

OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)

本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。

devops8pract的博客 334

Linux内核——引导启动

硬件上电->Linux引导程序->Linux内核启动

u012891333的博客 589

2025_NIPS_Truthful Aggregation of LLMs with an Application to Online Advertising

大型语言模型(LLMs)生成内容的 revenue 变现是在线广告的下一个前沿领域。我们考虑这样一种场景:广告商旨在影响LLM的回复,而平台则寻求最大化广告商价值并确保用户满意度。核心挑战在于,广告商的偏好通常与用户偏好存在冲突,且广告商可能误报其偏好。为解决这一问题,我们提出MOSAIC——一种拍卖机制,它确保真实申报是广告商的占优策略,并使每个广告商的效用与其对社会福利的贡献保持一致。重要的是,该机制无需LLM微调或访问模型权重,且随着计算资源的增加,可证明收敛到最优微调LLM的输出。

c_cpp_csharp的专栏 80

在linux中什么存放着内核和引导程序,Linux内核的引导和启动过程

先给大家来个图来总体认识一下Linux内核的引导过程,然后详细介绍。这个图是X86 PC上的Linux 内核的引导过程,在嵌入式系统上的Linux内核的引导过程基本类似。不同只是在X86 PC上有一个从BIOS转移到Bootlloader的过程,嵌入式系统往往是复位后就直接运行Bootloader。从图上可以看出,在系统启动进入与Linux相关代码之前,会经历如下阶段:1)当系统上电或复位时,CP...

weixin_29505609的博客 665

XDMA流传输模式

XDMA 流传输模式(Streaming DMA)​ 是 Xilinx FPGA 通过 PCIe 与主机进行 ​实时流式数据传输 的核心机制,

浩瀚之水的专栏 3435

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux开机启动过程(1):内核引导过程

内核引导过程. 第一部分. 从引导加载程序内核 如果看过我在这之前的文章,你就会知道我已经开始涉足底层的代码编写。我写了一些关于 Linux x86_64 汇编的文章。同时,我开始深入研究 Linux 源代码。底层是如何工作的,程序是如何在电脑上运行的,它们是如何在内存中定位的,内核是如何管理进程和内存,网络堆栈是如何在底层工作的等等,这些我都非常感兴趣。因此,我决定去写另外的一系列文章关于 x86_64 框架的 Linux 内核。 注意这不是官方文档,只是学习和分享知识 需要的基础知识 理解 C 代码

RToax 3021

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

x86架构linux内核引导过程分析,X86架构下Linux启动过程分析

1、X86架构下的从开机到Start_kernel启动的总体过程这个过程简要概述为:开机——>BIOS——>GRUB/LILO——>LinuxKernel其运行的流程图和重要函数如下图所示:2、加载Linux内核(基于X86)的内存布局图| |0A0000 +--------------------------+|ReservedforBIOS ...

weixin_39969298的博客 597

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linux内核启动引导过程

linux内核的启动过程

生命的紫金颜色 1206

计算机上电后Linux内核从引导到启动的过程

计算机上电后Linux内核从引导到启动的过程 笔记说明:实验是在RedHat9.0上使用bochs 2.1.1做的,参考书籍是《Linux内核的设计艺术》第二版 新设计团队著。 首先我们了解下BIOS程序,它是被固化在计算机主板的一小块ROM芯片里的一段程序,不同的主机板所用的BIOS程序也有所不同。但是就启动部分而言,各种BIOS的基本原理大致相似。为了方便,我用参考书籍中的说法,使用的...

博客 1124

Linux启动引导程序(GRUB)加载内核的过程

在刚刚的启动过程中,我们已经知道启动引导程序(Boot Loader,也就是 GRUB)会在启动过程中加载内核,之后内核才能取代 BIOS 接管启动过程。如果没有启动引导程,那么内核是不能被加载的。 本节,我们就来看看启动引导程序加载内核的过程,当然 initramfs 这个虚拟文件系统也是要靠启动引导程序调用的。在 CentOS 6.x 中,启动引导程序默认是 GRUB,GRUB 是现在最为流行的启动引导程序,我们也用 GRUB 来说明启动引导程序的作用。 早期的 LILO 引导程序已经不是很常见了,GR

u010783226的专栏 3899

Linux0.11内核引导启动过程概述

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!                Linux0.11仅支

gdfjhc的博客 208

Linux0 11内核引导启动过程概述

Linux0 11内核引导启动过程概述

qq_43718131的博客 172

linux内核读取引导扇区,Linux启动引导程序(GRUB)加载内核的过程

在刚刚的启动过程中,我们已经知道启动引导程序(Boot Loader,也就是 GRUB)会在启动过程中加载内核,之后内核才能取代 BIOS 接管启动过程。如果没有启动引导程,那么内核是不能被加载的。本节我们就来看看启动引导程序加载内核的过程,当然 initramfs 这个虚拟文件系统也是要靠启动引导程序调用的。在 CentOS 6.x 中,启动引导程序默认是 GRUB,GRUB 是现在最为流行的启...

weixin_39758494的博客 335

Linux之系统引导过程及引导修复(bios初始化+磁盘引导+grub2+内核加载+系统初始化镜像+系统启动级别+超级用户密码忘记)的解决方法

################################# 1.通电 ################################# ################################# 2.bios初始化 ################################# 对硬件检测 初始化硬件时钟 ################################# 3...

ly_qiu的博客 1047

linux jvm启动过程,Linux0.11内核引导启动过程概述

Linux0.11仅支持x86架构。它的内核引导启动程序在文件夹boot内,共有三个汇编代码文件。按嵌入式Linux0.11仅支持x86架构。它的内核引导启动程序在文件夹boot内,共有三个汇编代码文件。按照启动流程依次是:(1)bootsect.s。boot是启动引导的意思,sect即sector,是扇区的意思,二者合在一起启动引导扇区。这是磁盘引导程序。(2)setup.s(3)head.s前...

weixin_30798713的博客 253
上一篇: 频繁关联规则挖掘之FP树
下一篇: Linux内核的编译
wustdatamining
博客等级 码龄15年 12粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值