x86架构芯片启动过程分析

news2024/10/6 10:39:04

1、上电启动顺序

在这里插入图片描述

上电自检
读取ROM里的bios程序
bios程序会进行硬件检测,比如:内存、硬盘、显卡等
bios完成自检后,需要选择引导设备。比如设备上有U盘、SSD、eMMC、机械硬盘,bios需要知道从哪个启动介质去启动计算机
bios操作界面是有默认的启动顺序,也可以在bios阶段手动修改启动顺序
确定好启动介质后,bios会去启动介质读取MBR分区表或者gpt分区表
在引导分区中存放了启动配置文件grub.cfg
grub.cfg文件里会指明内核放在哪个分区、根文件系统位置等
解析grub.cfg文件,启动内核、挂载根文件系统
备注:截图来自《史上最牛的Linux视频教程—兄弟连》

2、MBR和GPT分区

MBR分区:
(1)MBR(MasterBootRecord)是主引导记录的缩写,引导扇区是每个每个分区的第一个扇区,而主引导扇区是硬盘的第一个扇区;
(2)MBR分区最多支持4个主分区或者三个主分区+一个扩展分区,最多只能识别2TB的空间;
GPT分区:
(1)GPT是GUID磁碟分割表(GUID Partition Table)的缩写,中文含义“全局唯一标识磁盘分区表”,每个分区表有唯一的一串标识符来表示;
(2)GPT可以识别超过2T的空间,理论上可以有无数多个分区,但是实际上会有限制,在Windows中gpt最多支持128个主分区;
总结:GPT的出现晚于MBR,GPT分区方案比MBR更先进,目前推荐使用GPT分区方案;
.

3、把存储介质制作成启动盘

3.1、场景介绍

(1)有重装过电脑Windows系统经历的博友应该知道,重装过程就是制作一个启动U盘,从U盘启动然后去烧录硬盘;
(2)启动U盘里是一个完整的系统,在启动后能识别硬盘并且能把系统烧录到硬盘里,经过烧录后,硬盘里也有一个完整的系统,只需要修改启动顺序,这样电脑每次都从硬盘启动,这时候就不需要U盘了;
(3)下面介绍的脚本,就是启动U盘里用于烧录系统到硬盘/SSD的过程;

3.2、制作启动盘的脚本

#清楚掉ssd的分区信息
dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=1 
sectors_of_ssd=`cat /sys/block/nvme0n1/size`
dd if=/dev/zero of=/dev/nvme0n1 seek=$((${sectors_of_ssd}-32)) bs=512 count=32 > /dev/null 2>&1
sync

建立gpt格式分区表
parted /dev/nvme0n1 --script mklabel gpt		

#建立新的主分区,partion_start是分区起始地址,partion_end是分区结束地址
parted /dev/nvme0n1 --script mkpart primary ${partion_start} ${partion_end} 	

#设置第一个分区为引导分区
# set的格式:set number flag state
#如果你想从某个分区引导,那么你应该将这个分区的boot标记设置为on
parted /dev/nvme0n1 --script set 1 boot on    

#打印分区表
parted /dev/nvme0n1 --script print 

#格式化第一个分区为vfat格式,并设置卷名为ESP分区
mkfs.vfat -n 'ESP' /dev/nvme0n1p1

#格式化除第一分区之外的其他分区为ext4格式或者其他的文件系统格式
mke2fs -t ext4 -F -b 4096 -L "分区的标签名" /dev/nvme0n1p2 > /dev/null 2>&1

#挂载第一个启动分区,拷贝启动文件,比如:grub.cfg
mount -t vfat /dev/nvme0n1p1 /mnt/boot 
mkdir -p /mnt/boot/efi/boot
cp /system_files/efi/grub.cfg /mnt/boot/efi/boot/

# 拷贝内核、文件系统到指定分区
······

3、grub.cfg

set default=0	#默认从哪个菜单项启动
set fallback=3	#如果默认菜单项启动失败,那么就启动第几个菜单项(从'0'开始计数)
set gfxmode=1280x1024,auto	# 设置gfxterm使用的分辨率
set lang=en_US	#设置GRUB2的界面语言,简体中文应设为'zh_CN'
set timeout=3	#在启动时有3秒时间来选择从哪个菜单项启动

#菜单项0,作为正常启动模式
menuentry " device (Normal Mode)" {
        search --set -l boot_partition	# 查找标签是boot_partition的分区,该分区作为根分区
        linux /bzImage fbconsole=disable console=ttyS0,115200	# 内核镜像是根分区的bzImage,启动参数是fbconsole=disable console=ttyS0,115200
        initrd /root_image.gz	# 根文件系统是根分区的root_image.gz文件,文件系统类型是initrd
}

#菜单项1,作为异常情况下的启动模式,一般是Normal模式启动失败的情况下采用,用于恢复系统
menuentry " device (Rescue Mode)" {
        search --set -l rescue_partition	# 查找标签是rescue_partition的分区,该分区作为根分区
        linux /bzImage Rescue=1 fbconsole=enable # 内核镜像是根分区的bzImage,启动参数是Rescue=1 fbconsole=enable
        initrd /root_image.gz	# 根文件系统是根分区的root_image.gz文件,文件系统类型是initrd
}

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

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

相关文章

资料分析(四)—— 倍数、比重、平均数

倍数 现期倍数 (A是B的几倍): 多几倍 1 增长率 1 增长倍数(A比B多几倍): - 1 是几倍 - 1 增长率(增长几倍) 超过倍数(A超过B的 n 倍):A …

数据库--MySQL三大范式、多表查询、函数sql

数据库相关链接: 数据库基础操作--增删改查:http://t.csdn.cn/189CF 数据库--数据类型:http://t.csdn.cn/NnBsY​​​​​​​ 数据库--SQL关键字的执行顺序: http://t.csdn.cn/MoJ4i 一、什么是范式? 范式是数据库…

Android Settings 无障碍设置显示大小页面重复加载问题

基于Android 11,跟踪源码 显示大小页面 packages/apps/Settings/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java 通过commit() 提交更新页面显示大小。该方法是是在其父类PreviewSeekBarPreferenceFragment 实现调用。 基类预览滑动进度…

Vue-6.创建Vue项目

使用预设默认配置创建Vue项目 创建一个简单的 Vue 项目需要使用 Vue CLI(命令行界面)。Vue CLI 是一个用于快速构建 Vue.js 项目的工具,它可以帮助你设置项目的基本结构、配置以及开发环境。 以下是创建一个简单的 Vue 项目的步骤&#xff…

机器学习基础之《分类算法(1)—sklearn转换器和估计器》

一、转换器 1、什么是转换器 之前做特征工程的步骤: (1)第一步就是实例化了一个转换器类(Transformer) (2)第二步就是调用fit_transform,进行数据的转换 2、我们把特征工程的接口称…

idea中Maven报错Unable to import maven project: See logs for details问题的解决方法

idea中Maven报错Unable to import maven project: See logs for details问题的解决方法。 在查看maven的环境配置和idea的maven配置后,发现是idea 2020版本和maven 3.9.3版本的兼容性问题。在更改为Idea自带的maven 3.6.1版本后问题解决,能成功下载jar包…

个人对哈希数据结构学习总结 -- 实践篇 -- 上

个人对哈希数据结构学习总结 -- 实践篇 -- 上 引言最佳实践Java篇HashMapgetput扩容 ConcurrentHashMapgetput扩容协作扩容读为什么可以不加锁? ThreadLocalMapgetput扩容delete为什么遍历到null桶就可以判断key不存在?ThreadLocalMap为什么不需要锁&…

【uniapp】picker mode=“region“ 最简单的省市区 三级联动

省市区 picker template <picker mode"region" :value"date" class"u-w-440" change"bindTimeChange"><u--inputborder"bottom"class"u-fb u-f-s-28"placeholder"请选择省市区"type"te…

从零实战SLAM-第八课(非特征点的视觉里程计)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

ARM04cortex-A7核LED灯实验

文章目录 一、核心板二、扩展板二、硬件术语2.1 原理图2.2 PCB板2.3 丝印2.4 网络编号 三、分析电路图3.1 思路3.2 总结3.3 工作原理 实验目的&#xff1a;实现LED1/LED2/LED3三盏灯工作 一、核心板 二、扩展板 二、硬件术语 2.1 原理图 原理图是用来描述PCB板子上各个硬件连接…

深入理解epoll

文章目录 概述1. epoll_create - 创建一个epoll实例2. epoll_ctl - 控制epoll实例的事件结构体介绍events取值&#xff1a;data&#xff1a; 联合体&#xff08;共用体&#xff09;&#xff1a; 3. epoll_wait - 等待事件发生伪代码总结 概述 在网络编程中&#xff0c;高效地处…

2023 年牛客多校第九场题解

B Semi-Puzzle: Brain Storm 题意&#xff1a;给定 a , m a,m a,m&#xff0c;构造一个非负整数 u u u&#xff0c;使得 a u ≡ u ( m o d m ) a^u \equiv u \pmod m au≡u(modm)。 1 ≤ a < m ≤ 1 0 9 1 \le a<m \le 10^9 1≤a<m≤109&#xff0c; 0 ≤ u ≤ 1 …

Elasticsearch:如何在 Ubuntu 上安装多个节点的 Elasticsearch 集群 - 8.x

Elasticsearch 是一个强大且可扩展的搜索和分析引擎&#xff0c;可用于索引和搜索大量数据。 Elasticsearch 通常用于集群环境中&#xff0c;以提高性能、提供高可用性并实现数据冗余。 在本文中&#xff0c;我们将讨论如何在 Ubuntu 20.04 上安装和配置具有多节点集群的 Elast…

centos7安装protobuf|序列化和反序列化工具

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/categ…

如何利用视频监控与AI智能识别技术实现铁塔基站机房无人值守?

一、项目背景 很多通信铁塔和机房类项目&#xff0c;都呈现高密度、网格化分布的特点&#xff0c;铁塔基站大多都分布在公路边、高山、野外等区域&#xff0c;巡检难度大&#xff0c;维护效率低&#xff1b;基站设备众多且监控方式单一&#xff0c;而且时刻面临着非法闯入、被…

linux学习(进程替换)[10]

创建子进程 fork()创建子进程进行替换&#xff0c;不影响父进程&#xff0c;父进程聚焦在&#xff1a;读取数据、解析数据、指派进程、执行代码的功能。 子进程发生替换后的数据 在加载新程序进去之前&#xff0c;父子之间的的代码是共享的&#xff0c;数据写时拷贝进子进程…

Webshell实例分析解析

Webshell的实例分析 LD_PRELOAD的劫持在 web 环境中实现基于 LD_PRELOAD 的 RCE 命令执行利用 mail 函数启动新进程 绕过不含字母和数字的Webshell异或取反 LD_PRELOAD的劫持 LD_PRELOAD是Linux/Unix系统的一个环境变量&#xff0c;它影响程序的运行时的链接&#xff08;Runti…

ATF bl1 ufshc_dme_get/set处理流程分析

ATF bl1 ufshc_dme_get/set处理流程分析 UFS术语缩略词1 ATF的下载链接2 ATF BL1 ufshc_dme_get/set流程3 ufs总体架构图3.1 UFS Top Level Architecture3.2 UFS System Model 4 ufshc_dme_get/set函数接口详细分析4.1 ufshc_dme_get4.2 ufshc_dme_set4.3 ufshc_send_uic_cmd4.…

Visual Studio 如何放大代码字体的大小

1.打开Visual Studio&#xff0c;新建一个程序&#xff0c;一段代码&#xff0c;为接下去的操作做好准备。单击菜单栏的【工具】选项。 2.在跳出来菜单中找到【选项】&#xff08;一般在最后一项&#xff09;&#xff0c;然后单击。跳出新的窗口。 3.跳出新的窗口后&#xff…

SPI-FlexSPI

概念 SPI 高速全双工通信总线 SPI有四根线&#xff1a; SDO&#xff1a;数据输出-主设备数据输出&#xff0c;从设备数据输入 SDI:数据输入-主设备数据输入&#xff0c;从设备数据输出 SCLK&#xff1a;时钟信号-由主设备产生 CS&#xff1a;片选信号&#xff0c;主设备…