的发射点2

☞ 通用计算机启动过程

1️⃣一个基础固件:BIOS

一个基础固件:BIOS→基本IO系统,它提供以下功能:

  • 上电后自检功能 Power-On Self-Test,即POST:上电后,识别硬件配置并对其进行自检,保证正常运行和初始化;
  • 基本IO驱动与事件处理功能:初始化并驱动硬件,如显示器、串口、键盘等接口,使能基本的中断;
  • 启动参数设置功能:过程中允许通过热键启动设置界面,进而对CMOS RAM中的启动参数进行配置。CMOS RAM等效于BBSRAM,存放启动配置数据,电池掉电后数据丢失;
  • 系统自动装载功能:在系统自检成功后,根据启动顺序,将相应启动设备主引导记录MBR(一般位于0磁道的0扇区,大小为512字节)的引导程序装入内存并从入口地址运行;
2️⃣WIndows操作系统启动过程

① 系统上电或复位,X86处理器复位——代码段寄存器CS为0xFFFF,指令指针寄存器IP为)0x0000,CS:IP地址存放下一条跳转指令,跳转至ROM中BIOS入口地址0xFFFFFFF0(复位向量地址),并启动BIOS。
② BIOS上电自检,若出现错误则初始化基本硬件,允许用户进行参数配置。
③ BIOS将第1个启动设备的第1个扇区加载到系统RAM的0x7C000地址,启动MBR中的引导程序,进入引导的第一个阶段。
④ 调用 Windows MBR Loader 或 LILO GRUB WinGrub等引导程序,进入引导的第二个阶段。
⑤ 引导程序调用 OS Boot Loader 把用户选择的操作系统内核加载到内存,并跳转到操作系统入口地址开始执行。
此时,计算机的控制权交给了操作系统,基本启动过程完成。

☞ 嵌入式系统启动过程

MCS-51 MCU 上电复位后,PC寄存器的初值为0x0000。0000H,0001H,0002H这三个单元存放了一条无条件跳转指令,当从该地址执行时将直接跳转到主程序的入口地址。
arm处理器复位后将从0x00000000地址处开始执行指令。

1️⃣处理器片内集成启动固件——嵌入式系统启动

① 上电程序引导
片内集成独立 Boot ROM (Brom),代码 Rom Boot Loader (RBL) 支持从 NAND Flash、SPI、UART 等外部接口启动。

  • 加电后,处理器将从该ROM的复位向量地址开始执行,RBL通过判断处理器特定引脚的电平来进入正常启动模式或开发模式;
  • RBL获取下一步要执行的代码,并将其复制到SRAM或SDRAM中引导执行;

② 嵌入式操作系统装载
嵌入式操作系统的引导也需要特定的机制和软件支持,即 Boot Loader。

  • 复位后,将 Boot Loader 代码从Flash 拷贝到SDRAM的特定区间并引导执行;
  • Boot Loader 程序执行一系列基本的硬件初始化工作;
  • 将自身拷贝到SDRAM中,RAM中的 Boot Loader 继续执行,为操作系统的运行做好环境准备,并将外部存储器中的操作系统内核映像及根文件系统映像拷贝到内存中的代码,数据空间,设置内核启动参数;
  • 跳转至内核入口地址开始执行。
2️⃣裸机

直接部署在嵌入式硬件上的软件称为裸机代码,或裸机(应用)软件。一般来说都是些无限循环结构,比如空调、冰箱等嵌入式系统。通过板级支持包BSP,向下屏蔽硬件的细节,向上提供统一的服务和接口。没有操作系统,通过中断来实现多任务运行。

☞ Linux系统启动过程

计算机接通电源上电后,需要经过BIOS加电自检、MBR系统引导、加载内核三步之后,操作系统才会启动。

1️⃣BIOS加电自检
  • BIOS全称 Basic Input/Output System,即基本输入输出系统,它是一个被永久刻录在ROM中的软件,加电自检是指 Power On Self Test,POST,属于BIOS的主要组成部分。
  • 计算机在接通电源后,BIOS通过POST来加载硬件信息,进行内存、CPU、主板等检测,如果硬件设备正常工作,BIOS会寻找硬盘第一个扇区中存储的数据,并使用MBR中的数据激活引导加载程序。
2️⃣MBR系统引导
  • MBR全程 Master Boot Recode,是一种磁盘分区格式,也是以此种格式的磁盘中0盘片0扇区中存储的一段记录——主引导记录。磁盘中扇区的大小为512byte,主引导记录MBR占据第一个扇区的前446字节,剩余的空间依次存储一个64字节的磁盘分区表,和一个用于标识MBR是否有效的2字节的模数。
  • 主引导记录MBR中包含一个实现引导加载功能的程序——Boot Loader。由于BIOS只能访问很少量的数据,所以MBR中的引导加载程序其实只是一段初始程序的加载程序 Initial Program Loader,IPL,这段程序唯一的功能就是定位并加载 Boot Loader 的主体程序。
  • 加载引导分为两个阶段
    • 第一阶段,BIOS引导IPL获取 Boot Loader 主题程序在磁盘中的位置,此时系统启动的控制权由BIOS转移到MBR;
    • 第二阶段,Boot Loader 主题程序与操作系统对应的内核,定位到内核文件所在的位置,并将其加载到计算机内存中,此时系统启动的控制权由MBR转移到内核。
3️⃣加载内核
  • 内核是操作系统的核心,Linux操作系统的内核就是Linux。内核以一种自解压的压缩格式压缩,它与一个初始化的内存映像和存储设备映像表一起存储在 /boot 目录下。
  • 在选定的内核被加载到内存中并开始执行前需要先从压缩格式中解压,一旦内核自解压完成,systemd进程(也就是早期版本中的init进程)便被启动。
  • systemd进程的启动标识着引导过程的结束,也标识着启动过程的开始。在系统启动之初,由于系统中没有除systemd之外的程序执行,系统初始化工作尚未完成,因此计算机不能执行任何和用户相关的功能性工作。
  • 系统初始化需要进行挂载文件系统、启动后台服务等等一系列工作,这些初始化工作全部由systemd进程完成。对于用户来说,系统初始化完成后,系统才算正式启动。
4️⃣附:init进程启动级别

系统启动流程:
BIOS → MBR → boot loader → kernel → init
BIOS → MBR → GRUB → kernel → init

  • BIOS:找到启动介质 - 移动硬盘、磁盘、U盘等,找到启动介质后读取其中的第一个扇区;
  • MBR:第一个扇区(512字节)称为主引导记录。主引导记录分为3部分,前446byte是引导信息,后64byte是磁盘分区信息,最后2byte是标志位。MBR的作用是找到 boot loader 。
  • GRUP:是一种 boot loader ,用于加载kernel核心信息。
  • kernel:内核。
  • init:内核的第一个程序,分为7个启动级别。

查看启动级别配置文件

cat /etc/inittab  #查看启动级别相关的配置文件

inti命令可以切换系统的启动级别

inti 0/1/2/3/4/5/6
  • 0表示关机(不能设置为开机默认启动级别)
  • 1表示单用户
  • 2表示多用户(无网络的3级别)
  • 3多用户(命令行模式,字符终端)
  • 4用于开发
  • 5图形界面,默认启动方式
  • 6reboot(不能设置为开机默认启动级别)
runlevel   #查看系统的启动级别

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

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

相关文章

5.55 BCC工具之funcinterval.py解读

一,工具简介 eBPF/bcc非常适用于平台性能调优。通过funclatency工具,我们可以分析特定函数的性能,了解该函数的延迟情况。然而,有时性能下降并不是由于函数的延迟,而是函数调用之间的间隔。 funcinterval正是为此而生。 另外,在平台上进行硬件性能调优时,我们将使用协…

运维随录实战(13)之docker搭建mysql集群(pxc)

了解 MySQL 集群之前,先看看单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构需要特殊设计。单节点数据库无法满足大并发时性能上的要求。单节点的数据库没有冗余设计,无法满足高可用。单节点 MySQL无法承载巨大的业务量,数据库负载巨大常见 MySQL 集群方案 Re…

少儿编程 蓝桥杯青少组科技素养题 信息素养真题及解析第25套

少儿编程 科技素养 信息素养真题第25套 1、旅行结束之后,回到家的小蓝决定将照片备份在云端的网盘上。备份照片主要占用的是小蓝家的( )带宽 A、下行 B、上行 C、文件 D、数据 答案:B 考点分析:主要考查网络相关知识,要将照…

php使用redis做游戏服务端缓存

游戏数据缓存:在游戏中,玩家的角色数据、游戏物品等信息通常需要频繁读取和更新。使用 Redis 可以将这些数据缓存起来,以提高数据的读取速度和减少数据库的负载。这种场景下,可以使用 Redis 的字符串(String&#xff0…

DHCP中继实验(华为)

思科设备参考: 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP地址。如果不在同一个物理网段,…

uView guid 全局唯一标识符

唯一标识符 #guid(length 32, firstU true, radix 62) 该函数可以生产一个全局唯一、随机的guid&#xff0c;默认首字母为u&#xff0c;可以用于当做元素的id或者class名等需要唯一&#xff0c;随机字符串的地方&#xff0c;因为id或者class不能以数字开头。 length <…

vue开发100问?

以上问题旨在为Vue.js开发者提供更广泛的技术探索方向&#xff0c;覆盖了Vue.js项目开发中可能出现的各种技术和业务场景。 Vue.js的基本原理是什么&#xff1f;如何在Vue中实现数据双向绑定&#xff1f;Vue实例化时需要哪些基本配置项&#xff1f;Vue的生命周期钩子函数有哪些…

JVM知识整体学习

前言&#xff1a;本篇没有任何建设性的想法&#xff0c;只是我很早之前在学JVM时记录的笔记&#xff0c;只是想从个人网站迁移过来。文章其实就是对《深入理解JVM虚拟机》的提炼&#xff0c;纯基础知识&#xff0c;网上一搜一大堆。 一、知识点脑图 本文只谈论HotSpots虚拟机。…

微信小程序提交成功设置提示

在微信小程序中&#xff0c;当用户成功提交表单或完成某项操作后&#xff0c;通常我们会设置一个提示来告知用户操作已完成。这种提示通常可以通过几种方式来实现&#xff0c;例如使用 wx.showToast 方法显示一个短暂的提示消息&#xff0c;或者跳转到一个新的页面并显示成功信…

scikit-learn保姆级入门教程

在SKLearn中&#xff0c;因为做了上层的封装&#xff0c;分类模型、回归模型、聚类与降维模型、预处理器等等都叫做估计器(estimator)&#xff0c;就像在Python里『万物皆对象』&#xff0c;在SKLearn里『万物皆估计器』。 在本篇内容中&#xff0c;我们将给大家进一步深入讲解…

C# 视频转图片

在 C# 中将视频转换为图像可以使用 FFmpeg 库。下面是一个示例代码来完成这个任务&#xff1a; using System; using System.Diagnostics;class Program {static void Main(string[] args){string inputFile "input_video.mp4"; // 输入的视频文件路径string outpu…

【Leetcode打卡】递归回溯

【Leetcode打卡】递归回溯 784. 字母大小写全排列 class Solution { public:int find(string s,int pos){int ipos;while(i<s.size()){if(isalpha(s[i])){return i;}i;}return -1;}void turn(string& s,int pos){if(islower(s[pos])){s[pos]toupper(s[pos]);}else{s[po…

js的同步异步

JavaScript&#xff08;JS&#xff09;是一门单线程的编程语言&#xff0c;这意味着它一次只能处理一个任务。然而&#xff0c;JS 支持同步和异步操作。 同步操作是指代码按照顺序执行&#xff0c;每个操作必须在前一个操作完成后才能进行。这意味着当一个操作在执行时&#x…

思科网络中如何配置标准ACL协议

一、什么是标准ACL协议&#xff1f;有什么作用及配置方法&#xff1f; &#xff08;1&#xff09;标准ACL&#xff08;Access Control List&#xff09;协议是一种用于控制网络设备上数据流进出的协议。标准ACL基于源IP地址来过滤数据流&#xff0c;可以允许或拒绝特定IP地址范…

Java算法-力扣leetcode-274. H 指数

274. H 指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 **h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&a…

一文学会python实现四元数、欧拉角、旋转矩阵变换

文章目录 前言实现前言 本文主要是将python实现四元数、欧拉角、旋转矩阵变换的所有转换做了一个整理,方便大家调用实现变换。 实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np from scipy.spatial.transform import Rotationdef quaternion2eule…

欧拉计划第7题:10001st primeBy(质数 质数筛法)

欧拉计划简介&#xff0c;本系列希望以通俗易懂的语言、简洁的代码&#xff0c;带大家体会数学与编程结合的魅力。 Problem 7&#xff1a; 10001 10001 10001st primeBy 标签&#xff1a;质数、质数筛法 原文&#xff1a;By listing the first six prime numbers: 2 2 2, …

离散数学例题——7.代数系统和群论

代数系统定义 二元运算律 特殊元素 逆元 子代数系统 同态同构 半群和独异点&#xff08;含幺半群&#xff09; 群和阿贝尔群 常见群和群的证明 群的性质 群的幂 群元素的阶 群的同态同构 子群 子群证明

FFmpeg开发笔记(九)Linux交叉编译Android的x265库

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“12.1.2 交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库&#xff0c;前文又介绍了如何在Linux环境交叉编译Android所需FFmpeg的so库&#xff0c;接下来介绍如何在Linux环境交…

修改简化docker命令

修改|简化docker命令 使用命令打开 .bashrc 文件&#xff1a; vim ~/.bashrc在文件中添加类似以下行来创建别名&#xff1a; # 查看所有容器 alias disdocker images # 查看运行容器 alias dpsdocker ps # 查看所有容器 alias dpsadocker ps -a # 停止容器 alias dsdocker s…