Linux系统的启动过程
2014-09-19 17:41
204 查看
Linux系统的启动必然是从加电开始,一开始没有任何的程序可以运行,只有上电后引起的门电路的启动。具体来说,就是CPU的RESET引脚会产生一个逻辑值,使得CPU的寄存器被置上值。然后CPU开始执行固化在ROM中的启动代码,这个启动代码叫做BIOS系统,主要进行底层的硬件初始化操作。BIOS还负责将装载器复制到RAM中,装载器比如Grub,LILO,BIOS从硬盘的第一个扇区(叫主引导扇区MBR)找到Grub程序,开始复制。
第二个然后Grub被复制到RAM(对于x86系统架构,拷贝到0x00007c00)中,一共512字节(在MBR引导扇区中存储,存入RAM,前446字节内容存放grub(bootloader)关键引导程序,接着64字节放置硬盘分区表DPT(Disk
Partition Table)),然后BIOS继续拷贝setup函数(位于arch/x86/boot/header.S中)。
第三个然后,BIOS将内核映像拷贝到内存正确的位置(一般的高地址装载bzImage大内核映像,装载到0x00100000地址)。
第四个然后,BIOS跳转并执行setup()函数,setup()函数根据操作系统的类型继续重新初始化硬件设备,调整内核镜像的位置,并使CPU切换到保护模式。
第五个然后,BIOS跳转并执行startup_32()函数(位于arch/i386/boot/compressed/head.S),主要作用是解压缩内核映像,并对位置做调整。
第六个然后,跳转到0xC0000000+0x100000+0x2000位置,执行startup_32函数(位于arch/i386/kernel/head.S),主要作用如下:[1]建立初始化临时内核页表[2]建立内核态堆栈[3]建立初始化临时全局描述符表和中断描述符表[4]将系统参数写入空页框中[4]跳转执行start_kernel()函数。
第七个然后(最终):执行start_kernel()函数,完成中断表、调度程序、软中断、日期时间、控制台、模块、slab分配器的初始化,确定CPU时钟速度,创建第一个内核线程等。
第二个然后Grub被复制到RAM(对于x86系统架构,拷贝到0x00007c00)中,一共512字节(在MBR引导扇区中存储,存入RAM,前446字节内容存放grub(bootloader)关键引导程序,接着64字节放置硬盘分区表DPT(Disk
Partition Table)),然后BIOS继续拷贝setup函数(位于arch/x86/boot/header.S中)。
第三个然后,BIOS将内核映像拷贝到内存正确的位置(一般的高地址装载bzImage大内核映像,装载到0x00100000地址)。
第四个然后,BIOS跳转并执行setup()函数,setup()函数根据操作系统的类型继续重新初始化硬件设备,调整内核镜像的位置,并使CPU切换到保护模式。
第五个然后,BIOS跳转并执行startup_32()函数(位于arch/i386/boot/compressed/head.S),主要作用是解压缩内核映像,并对位置做调整。
第六个然后,跳转到0xC0000000+0x100000+0x2000位置,执行startup_32函数(位于arch/i386/kernel/head.S),主要作用如下:[1]建立初始化临时内核页表[2]建立内核态堆栈[3]建立初始化临时全局描述符表和中断描述符表[4]将系统参数写入空页框中[4]跳转执行start_kernel()函数。
第七个然后(最终):执行start_kernel()函数,完成中断表、调度程序、软中断、日期时间、控制台、模块、slab分配器的初始化,确定CPU时钟速度,创建第一个内核线程等。
相关文章推荐
- 剖析Linux系统启动过程
- Linux系统启动过程:
- 剖析Linux系统启动的后台全过程
- 剖析Linux系统启动过程(zz)
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- 剖析Linux系统启动的后台全过程
- 剖析Linux系统启动过程--redhat
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程(转)
- 剖析Linux系统启动的后台全过程
- 笔记:Windows XP 启动过程概述 剖析Linux系统启动过程--redhat
- 关于嵌入式Linux系统的启动(很好的嵌入式linux启动过程分析)
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- Linux系统启动过程详解
- 剖析Linux系统启动过程
- 剖析Linux系统启动的后台全过程