x86 linux内核引导的过程

时间:2022-09-01 08:03:47


     最近在看linux内核,里面讲了一些关于内核引导的过程,我觉得还是比较详细的。所以想总结一下。

     

     英语缩写:

                   MBR(master boot record):主引导记录

                   POST(power on self test):加电自建


     主要步骤:

                 1.cpu自身初始化

                 2.BIOS

                 3.内核引导程序

                 4.自解压内核

                 5.内核启动


     详细分析:

               1.cpu自身初始化

                   cpu自身初始化是一个硬件的过程,所以一加电的时候,就触发了这个过程。cpu自身的初始化主要是做一个跳转的过程,cpu会从某一个固定的位置执行那个地方的指令(通常这个地方是0xffffffff),而这条指令是跳转的指令,这个指令跳转的位置是BIOS的首部。


               2.BIOS

                    从上一步可以得知,现在cpu所在的位置应该是bios的首地址,也就是说,cpu将执行bios程序。

                    BIOS是一个很小的程序,他是固化在硬件上的,它被存放在主板上的ROM中,每当到达这个时候的时候,就会读取BIOS程序,并且执行它。BIOS本身的工作有两个,1.是POST,而post的主要的完成硬件的检测。2.是内核的引导的过程。

                    post这个过程,是硬件的检测的过程,不是特别懂,关键任务还是内核的引导这个过程。BIOS完成了POST这个过程以后,就会读取第一个扇区的数据,这个第一个扇区我们通常称之为MBR,主引导记录。MBR包含了2个部分,1是内核引导程序。2是分区表。

                    以下是MBR分布图:

x86 linux内核引导的过程

              1.引导程序是引导内核的引导程序,内核的引导程序其实有两个部分组成,一个就是主引导程序,第二个是活动分区的次引导程序。MBR的引导程序主要是主引导程序,在pc上引导程序通常就是grub和lilo,而嵌入式是内核引导程序是u-boot,vivi之类的。而分区表主要是用来保存每一个活动分区的次引导程序的位置之类的。以前我看过<鸟哥私房菜>中好像讲过这个问题,每一个活动分区都有一个超级块,存放着引导程序。

              2.最后的2个字节是是0x55aa,这个用来检查MBR是否有效


           3.内核引导程序

                  内核引导程序本身也是分为2个阶段

                  1.第一阶段

                           用主引导程序去扫描分区表,寻找活动分区,然后就将次引导程序加载到内存

                  2.第二阶段

                           次引导程序是将linux内核加载,并将控制权转给内核

            


          4.内核自解压

                内核本身是经过压缩过的内核,所以如果要使用内核就必须要进过自解压变成一个科执行的内核。通常的压缩的内核是zImage 和 bzImage。在这些文件的头部都存放这解压的代码,那样就可以进行解压。

          5.这以后就是内核进行的启动了。