天天看点

linux系统启动(bootstrap)流程

一、BIOS

1.POST(Power-On Self-Test)

2.初始化硬件设备

3.搜索一个操作系统来启动

4.只要找到一个有效的设备,就把第一个扇区的内容拷贝到RAM中从物理地址0x00007c00开始的位置,然后跳转到这个地址处,开始执行刚刚装载进来的代码。

二、Boot Loader:引导装入程序

boot loader是由BIOS用来把操作系统的内核映像装载到RAM中所调用的一个程序。引导装入程序可以指定使用哪个内核文件来启动。

从磁盘启动Linux内核需要一个两步的引导装入程序。早起Linux默认使用LInux LOader(LILO),主流的为GRand Unified Bootloader(GRUB),还有人用spfdisk

三、setup()

setup()函数必须初始化计算机中硬件设备,并为内核程序的执行建立环境。

四、startup_32()

有两个startup_32()函数

arch/i386/boot/compresed/head.S

arch/i386/kernel/head.S

这两个函数使用相同的名字不会产生任何问题,因为这两个函数会跳转到自己的起始物理地址去执行。

五、start_kernel()

start_kernel()函数完成Linux内核的初始化工作。

最后就会在控制台上出现熟悉的登录提示符~\^v^/~