Linux内核加载过程

Linux内核大致加载过程:

Linux内核加载过程_第1张图片


第一步--加载BIOS

稍有计算机基础的人都应该听过BIOS(Basic Input/Output System),可以看做是记录在ROM中的软件。也都清楚系统加电会执行BIOS中的程序,这种机能是如何实现的呢?看下图:

Linux内核加载过程_第2张图片


这是早期DOS系统内存空间分配情况,可以借来理解。在0xF0000(64k高端内存)的位置有一段 ROM BIOS区,我们可以理解为ROM中的BIOS数据映射到了RAM地址空间中了(实际上操作系统的存储空间不仅仅是通常所说的内存,还包括IO空间,显存等等)。当加电后,系统把IP指向BIOS数据区,完成BIOS加电自检,枚举和初始化本地设备。

启动第二步--读取MBR

硬盘上第0柱面0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。系统通过BIOS程序找到硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中,并跳转到此处继续执行。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

启动第三步--Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例,系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。

启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核载入在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

启动第五步--执行init及其他工作。

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

此后进行一系列操作,系统进入登录界面。


以上是Linux系统内核加载的,大体过程,以后再做具体的分析。

你可能感兴趣的:(Linux内核学习)