简述LINUX操作系统启动过程

本文概述了Linux操作系统启动流程,从按下启动键到操作系统加载的详细步骤,包括BIOS的初始化、启动盘特性、Grub2的作用、引导扇区加载核心镜像、保护模式切换、解压缩kernel.img等关键环节。
摘要由CSDN通过智能技术生成

学习了LINUX操作系统启动过程,简要回顾:

按下启动按键之后,会进行一些重置工作,访问ROM内存,BIOS是烧写在ROM中的程序,有一个跳转指令会跳转到BIOS真正的启动代码处,BIOS开始初始化工作。

BIOS会做几件事情:

1.检查硬件

2.建立中断向量表及中断服务函数

3.如果需要,会在内存空间映射显存的空间,显示一定结果

Boot程序的功能就是为了加载 Loader程序

操作系统在哪儿呢?一般都会在安装在硬盘上,在 BIOS 的界面上。你会看到一个启动盘的选项。启动盘有什么特点呢?它一般在第一个扇区,占 512 字节,而且以 0xAA55 结束。这是一个约定,当满足这个条件的时候,就说明这是一个启动盘,在 512 字节以内会启动相关的代码。这些代码是谁放在这里的呢?在 Linux 里面有一个工具,叫 Grub2,就是搞系统启动的。grub2 第一个要安装的就是 boot.img。它由 boot.S 编译而成,一共 512 字节,正式安装到启动盘的第一个扇区。这个扇区通常称为 MBR(Master Boot Record,主引导记录 / 扇区)。BIOS 完成上面任务后,会将 boot.img 从硬盘加载到内存中的 0x7c00 来运行。

前面的CPU上电及BIOS的工作都不是操作系统能控制的,而从引导扇区开始,就完完全全可由操作系统来控制了,因此,编写引导扇区也是编写操作系统 必要的工作之一。从BIOS跳入引导扇后,计算机系统引导工作就算完成,怎样把操作系统内核读进内存,然后再安排一条跳转指令内核处执行就是操作系 统开发人员的工作了。
 boot.img 会加载另外的镜像core.img,core.img组成如图

boot.img 先加载的是 core.img 的第一个扇区。如果从硬盘启动的话,这个扇区里面是 diskboot.img,对应的代码是 diskboot.S。boot.img 将控制权交给 diskboot.img 后,diskboot.img 的任务就是将 core.img 的其他部分加载进来,先是解压缩程序 lzma_decompress.img,再往下是 kernel.img,最后是各个模块 module 对应的映像。这里需要注意,它不是 Linux 的内核,而是 grub 的内核。

lzma_decompress.img 对应的代码是 startup_raw.S,本来 kernel.img 是压缩过的,现在执行的时候,需要解压缩。在这之前,我们所有遇到过的程序都非常非常小,完全可以在实模式下运行,但是随着我们加载的东西越来越大,实模式这 1M 的地址空间实在放不下了,所以在真正的解压缩之前,lzma_decompress.img 做了一个重要的决定,就是调用 real_to_prot,切换到保护模式,这样就能在更大的寻址空间里面,加载更多的东西。

调用到保护模式,要开启分页模式、分段模式、打开Gate A20 (第 21 根地址线的控制线)。

接下来我们要对压缩过的 kernel.img 进行解压缩,然后跳转到 kernel.img 开始运行。

 然后会调用一系列grub函数,运行成功显示出让你选择的那个操作系统的列表,启动某个操作系统,就要开始调用 grub_menu_execute_entry() ,开始解析并执行你选择的那一项。选择装载指定的内核文件,并传递内核启动参数。相关数据与配置会被读取。当这些事情做完之后, 才开始真正地启动内核。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值