IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Linux系统基础——BIOS和Bootloader -> 正文阅读

[移动开发]Linux系统基础——BIOS和Bootloader

BIOS和Bootloader

特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和所有图片来源于这个专栏。

1 了解背景

1.1 目的

操作系统不是在板子上电就直接运行的,上电到系统启动的中间过程要搞明白,比如了解linux系统启动之前cpu做了哪些准备,内核如何被加载到内存上运行等等。

1.2 结论

BIOS时期: 板子上电,先读取ROM中的固件代码,做出一个基本输入输出系统
BootLoader时期: BIOS从启动盘(一般是硬盘第一个扇区)开始加载引导代码,进一步初始化硬件(实模式切换到保护模式; 启动分页管理内存)
BootLoader将一系列工作做完了,最重要的一步就是加载系统内核kernel到内存运行了。控制权移交给内核之后,BootLoader时期结束,然后开始内核的部分了。

2 BIOS阶段

BIOS是固化在ROM上的一段程序,如果你自己安装过操作系统,刚启动的时候,按某个组合键,显示器会弹出一个蓝色的界面。能够调整启动顺序的系统,就是我说的 BIOS,然后我们就可以先执行它。

2.1 内存空间

系统工作在实模式,这时只有1M的内存地址空间。该模式下将内存地址 0xF00000xFFFFF 这 64K 映射给 ROM。剩下的内存空间分布
在这里插入图片描述

2.2 上电流程

主板上电,CPU先从ROM中加载BIOS程序,BIOS进行硬件相关的初始化工作(cpu将CS寄存器置为0xffff,ip寄存器置0x0000,所以第一条指令指向的地址是0xfff0(实模式下,cs<<4 + ip)。这里有一个jmp指令,跳转到rom中做初始化的代码)。主要有2件事情

  1. 检查硬件环境
  2. 是建立中断程序和中断向量表,同时把结果显示在显示器上

3 BootLoader阶段

光有BIOS还不够,还要从硬盘上搞到操作系统。引导操作系统这一阶段就是BootLoader

3.1 引导管理器grub2

Linux一般通过grub来做系统引导程序。系统上提供了grub2工具,grub2用户配置文件/etc/default/grub,系统会根据用户配置自动生成/boot/grub/grub.cfg。常用命令

# 重新生成配置文件
grub-mkconfig -o /boot/grub/grub.cfg
 
# 将Grub 2安装到硬盘引导扇区
grub-install --root-directory=/ /dev/sda
3.2 引导流程

使用 grub2-install /dev/sda,可以将启动程序安装到/dev/sda。其中有boot.imgcore.img

在这里插入图片描述

<1> boot.img

在BIOS平台下,boot.img是grub启动的第一个img文件,它被写入到MBR中或分区的boot sector中,因为boot sector的大小是512字节,所以该img文件的大小也是512字节。

boot.img唯一的作用是读取属于core.img的第一个扇区并跳转到它身上,将控制权交给该扇区的img。由于体积大小的限制,boot.img无法理解文件系统的结构,因此grub2-install将会把core.img的位置硬编码到boot.img中,这样就一定能找到core.img的位置。

参考文章: https://www.cnblogs.com/f-ck-need-u/p/7094693.html#blog122

<2> core.img

core.img根据diskboot.img、kernel.img和一系列的模块被grub2-mkimage程序动态创建。core.img中嵌入了足够多的功能模块以保证grub能访问/boot/grub,并且可以加载相关的模块实现相关的功能,例如加载启动菜单、加载目标操作系统的信息等,由于grub2大量使用了动态功能模块,使得core.img体积变得足够小。

core.img中包含了多个img文件的内容,包括diskboot.img kernel.img等。

参考文章: https://www.cnblogs.com/f-ck-need-u/p/7094693.html#blog122

引导流程

先加载boot.img到内存中运行,boot.img 将控制权交给 diskboot.img 后,diskboot.img 的任务就是将 core.img 的其他部分加载进来,先是解压缩程序 lzma_decompress.img,再往下是 kernel.img,最后是各个模块 module 对应的映像。根据开机grub界面选项,进入启动系统内核的流程。

ps: 这里需要注意,这里的kernel.img它不是 Linux 的内核,而是 grub 的内核。

4 补充知识

4.1 从实模式切换到保护模式

在bootloader过程中,lzma_decompress.img 做了一个重要的决定,就是调用 real_to_prot,cpu从实模式切换到保护模式。切换到保护模式要干很多工作,大部分工作都与内存的访问方式有关。

  • 第一项是启用分段,就是在内存里面建立段描述符表,将寄存器里面的段寄存器变成段选择子,指向某个段描述符,这样就能实现不同进程的切换了。
  • 第二项是启动分页。能够管理的内存变大了
  • 打开第21根地址线 Gate A20,cpu从20位总线到32位总线访问内存
4.2 主引导扇区、分区引导扇区、分区表

一个硬盘实际上由一个个扇区组成,它起始的一部分扇区为主引导扇区,包括MBR(主引导纪录)和DPT(分区表)。

硬盘可以有多个分区,每个分区起始的一部分扇区,为分区引导扇区。分区引导扇区之后的部分,为文件系统的索引,不同的文件系统采用不同的索引,文件系统通过它定位文件在硬盘上的位置。

对硬盘的读写操作,通过文件系统来完成;引导扇区中的内容,我们不能够在文件系统中进行操作,而需要专用软件,比如引导管理器。

9 References

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:21:31  更:2022-12-25 11:24:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 18:04:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码