x86架构芯片启动过程分析

2023-11-11

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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86架构芯片启动过程分析 的相关文章

  • 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子 1048272975 1 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称 目前教科书基本都是以早期的MCS 51为原型 讲解微机的原理
  • 驱动开发概念详解

    1 什么是驱动 能够驱使硬件实现特定功能的软件代码 可以根据驱动程序是否依赖于系统内核将其分为裸机驱动和系统驱动 1 1裸机驱动 编写的驱动代码中没有进行任何内核相关的API调用 开发者查询资料配置寄存器完成硬件相关控制 不依赖于系统内核
  • Keil 5使用ST-LINK调试STM32程序

    1 下载并安装STM32 ST LINK Utility 含有驱动 2 启动STM32 ST LINK Utility 点击菜单 ST LINK Firmware 更新固件 3 打开Keil工程 设置Debug 4 开始调试
  • max 3485 使用方法详解

    芯片管脚介绍 1 1 1号引脚为RO 通常与MCU UART控制器的RX相连接 用于接收对端数据 1 2 2号引脚为RE RE对RO起控制作用 RE为低电平 RO可接收数据 RE为高电平时 RO不接收数据 1 3 3号引脚为DE DE对 D
  • iMX6ULL学习(一)

    以下部分资料和硬件参考于韦老师的百问网 文章目录 嵌入式linux启动流程 编译流程 链接库的创建使用 一 制作和使用动态链接库 so share object 二 制作和使用静态链接库 a archive 开发前基础库下载 各压缩格式操作
  • C语言黑科技—指针读写

    PS 本人之前对于指针的了解基本为0 更是没有实际使用过指针 后来在开发中学习到了利用指针在固定地址读取或者写入数据的方法 以及利用指针提取数组的方法 这里简单分享一下 手法可能有些粗陋 如果有大佬有其他方法欢迎留言交流 目录 1 利用指针
  • 内核调试手段

    1 内核调试配置选项 内核拥有多项用于调试的功能 但是这些功能会造成额外的输出并导致性能下降 因此 内核通常都是禁止掉调试功能 内核调试相关的配置项主要集中在内核配置菜单 Kernel hacking 中 在使用下面的调试手段时 先确保内核
  • openwrt-无线配置

    来源 华清远见嵌入式学院 默认开启无线网络 修改 package kernel mac80211 files lib wifi mac80211 sh vi package kernel mac80211 files lib wifi ma
  • Android如何配置init.rc中的开机启动进程(service)

    开篇 为什么写这篇文章 先说下我自己的情况 我是个普通的学生 之前在学校一直做Android应用开发 找实习的时候也一直想找相关的工作 来到现在这家公司以后 由于业务调整 被领导安排去做底层开发 本来我对底层的东西一无所知 加上其实并不感兴
  • STM32F103基于spi实现OLED显示

    文章目录 一 原理 二 实现 1 显示中文 2 滚动显示 3 显示字符串 4 读取温湿度 5 显示温湿度 三 结果 1 开机显示欢迎信息 2 循环读取温湿度以及滚动显示我的id 四 总结 五 参考 六 源码 1 github 2 gitee
  • linux 动态库搜索路径优先顺序以及Makefile 编译设置

    一 linux 下 动态库搜索路径优先顺序 编译目标代码时指定的动态库搜索路径 环境变量LD LIBRARY PATH指定的动态库搜索路径 配置文件 etc ld so conf中指定的动态库搜索路径 配置后要运行 ldconfig命令才能
  • 深入浅出PID控制算法(三)————增量式与位置式PID算法的C语言实现与电机控制经验总结

    前文对PID算法离散化和增量式PID算法原理进行来探索 之后又使用Matlab进行了仿真实验 对PID三个参数又有了更深入的认识 接下来我们来使用C语言进行PID算法实现 并且结合控制电机的项目来深入学习 1 PID 算法C 语言原代码 先
  • 嵌入式Linux开发环境搭建-2-制作编译工具

    嵌入式Linux开发环境搭建 2 制作编译工具 一 安装基本开发环境 1 1 build essential安装 1 2 bison和flex 4 3 安装C函数库的man手册 二 安装交叉编译工具链 2 1 相关软件下载 2 2 修改一个
  • 静态映射和动态映射

    1 为什么需要映射 在内核启动过程中会开启MMU 建立虚拟映射表 以后内核使用的都是虚拟地址 但是我们查询数据手册得到I O寄存器地址都是物理地址 于是需要将物理地址转换到虚拟地址 这样才能在内核空间去访问I O寄存器 物理地址转换到虚拟地
  • 双向链表,单向链表//循环

    head h ifndef HEAD H define HEAD H include
  • 嵌入式开发4(I.MX6U串口实验与ubuntu串口调试助手)

    在学习正点原子6UL嵌入式开发板的时候 串口UART是一个很重要的点 在以后的实验中会经常遇到 但是教学中是在windows环境下搭建ubuntu虚拟机来编译代码的 串口调试助手使用的是windows版本的 而我是安装了双系统 所以研究了一
  • 【STM32】输入捕获实验原理

    目录 输入捕获原理框架 输入捕获实验工作原理 1 滤波 2 设置捕获极性 3 设置输入捕获映射通道 4 预分频 5 中断开启 输入捕获有关库函数及操作 1 通道初始化函数 TIM ICInit 2 通道极性设置 TIM OCxPolarit
  • STM32 HAL——GPIO

    HAL的代码规范建议 以下内容是我自己参照HAL做的总结 如果公司有固定的编码规范 就跟公司保持一致 如果没有 那就推荐和所用库保持一致 注意 因人而异 并不具有普遍适用性 HAL库有如下代码规范 1 目录名除了专有词汇外 统一是单词首字母
  • 定时器详解

    1 什么是定时器 timer 定时器实际上就是Soc当中的一个内部外设 1 定时器与计数器 定时器常与计数器扯到一起 计数器也是soc当中的一个内部外设 计数器顾名思义是用来计数的 就和我们的秒表一样 秒表实际上就是一个计数器 每隔一个单位
  • lv12 uboot移植深化 9

    u boot 2013 0 1移植 实验目的 了解 u boot 的代码结构及移植 的基本 方法 实验环境 u buntu 14 04

随机推荐

  • ros多机联调ROS md5sums do not match问题记录

    树莓派3b 上运行roscore 与pc端虚拟机上的ros联通 树莓派上运行一个AddTwoInts的服务节点 在pc端虚拟机上调用该服务 出现md5sums do not match的错误导致调用失败 后来发现是因为两边的 srv的数据类
  • spring03——用注解实现控制反转

    之前用xml文件配置也可实现控制反转 但注解方式更为方便 1 拷贝jar包 2 创建源路径包 3 配置applicationContext xml文件
  • mina服务器学习

    http bsr1983 iteye com blog 1880134
  • IDEA+Maven的JAVA开发环境配置

    本文记录了在windows上配置Hadoop Java开发环境的全过程 本次实验使用系统为Win10 其中Maven的安装位置为D 程序文件 源代码 Java apache maven 3 8 4 bin apache maven 3 8
  • token的生成与验证

    写在前面 最近在写自己毕业的东西 由于采用的是前后端分离的写法 为了方便写使用的是跨域的模式 所以cookie session就不好用了 所以记录一下token吧 夜太深了 就简单写一下用法吧 官方文档写的很全了 使用场景 用户成功登陆之后
  • 互联网业务全球化互通组网

    随着互联网业务的快速发展 越来越多的企业开始全球化扩张业务 并需要在全球范围内建立互联网组网以实现业务数据的高效传输 在这个过程中 如何建立高效 稳定的全球互联网组网方案 是每个企业都需要考虑的问题 一种可行的方案是使用云网络加速服务 例如
  • shell中打印带有时间的日志的命令(转)

    echo date Y m d H M S logadm on date Y m d H M S 2013 09 30 11 42 48 logadm on 20130930114248 转载于 https www cnblogs com
  • mobile.php discuz,电脑访问discuz手机版【触屏版跳转标准版的修改方法】

    推荐方法 以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站 但是在Chrome 32和33版本以后增加了更加便捷的方法 在开发者工具中只需要设置一下就能方便的模拟各种手机型号的访问效果了 方法如下 1 打开Chr
  • 作用域【python-4】

    file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大一在读的技术彩笔 brief python小白入门笔记 copyright 2022 8 COPYRIGHT 原创技术
  • windows脚本 批量删除指定文件夹、指定文件

    前言 用于批量删除项目中的测试数据 提供用户纯净的软件 使用说明 修改file list和folder list对应的数据 来自定义删除的内容 效果图 源码 echo off chcp 65001 gt nul 2 gt 1 REM 设置文
  • Errors accessing files.There may be spaces in your image‘s filename (已解决)

    一 问题 最近要做一个识别身份证的 然后就拷贝改代码 用到了Tesseract OCR 没想到出了这问题 说我文件名有空格 但是我这边确实没有啊 二 解决 上面框起来的地方是语言包 我想了想一般下载的时候好像没有相关的连带下载 然后去文件夹
  • Python3,爬虫的HTTP Error、URL Error及混合使用

    爬虫常出现的两种error URL Error HTTP Error HTTP Error 和URL Error 混合使用 URL Error url error 很常见的 就是url地址不正确 或者失效 我们来看看 代码是怎么实现的 co
  • 服务器被攻击了怎么处理?

    服务器若是被黑客或是攻击小组攻击 不同的机房会做出不同的策略调整 封机处理 一般2小时解封 最迟24小时 若是解封后仍然有攻击 则封机时间会增加24 48 72H 再安全的服务器也避免不了网络的攻击 作为一个网络安全运维人员需要做到维护好系
  • SD卡寄存器及对应的CMD命令描述

    目录 1 SD卡寄存器 1 1操作条件寄存器 OCR 1 2卡识别寄存器 CID 1 3特定数据寄存器 CSD 1 4相对地址寄存器 RCA 1 5驱动阶段寄存器 DSR 1 6SD配置寄存器 SCR 1 7SD状态寄存器 SSR 1 8卡
  • signature=5e1766d4239e5ac6aef18e8849a2555c,checksum.xml

    4FD71D2654435626B5FC1D5FB47809D322D9AC3AEDE1A45D1A45070B1820C922522C7D1586CD1C074F3F27D9E73C8F51F554AEE0F07A08ECB6593CAF
  • One-Way Conveyors 【Tarjan缩点+树链剖分】

    One Way Conveyors Aizu 1408 这道题上面推荐大家把maxN开的大一点 不然会RE 我倒是被这个坑了一下 还有一些细节 我将在后面徐徐道来 目前最快还是比较的开心 先讲一下题意 有N个点 M条无向边 然后输入这M条无
  • 回顾与展望

    原文链接 点击打开链接 摘要 8月14日启动 历时130天 全球AI届最大盛事之一 来自65个国家上万名选手参与的首届 AI Challenger全球AI挑战赛 在12月21日落下帷幕 AI Challenger视觉和翻译两大类共五个赛道
  • java快速开发框架---JavaBoot

    基于SpringBoot2倾情打造 面向所有层次的Java开发者 零门槛开箱即用的后台快速开发解决方案 1 系统环境 我们采取了Java EE 8 Servlet 3 0 Apache Maven 3作为环境开发的一套后台的系统 入门快 2
  • 【SSA-LSTM】基于麻雀算法优化LSTM 模型预测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 麻雀搜索算法 1 2 长短期记忆神经网络 2 运行结果 3 参考文献 4 Matlab代码实现 1
  • x86架构芯片启动过程分析

    1 上电启动顺序 上电自检 读取ROM里的bios程序 bios程序会进行硬件检测 比如 内存 硬盘 显卡等 bios完成自检后 需要选择引导设备 比如设备上有U盘 SSD eMMC 机械硬盘 bios需要知道从哪个启动介质去启动计算机 b