Linux启动分析(1)— 总体过程

一、系统引导过程总体介绍
启动流程图:
             
   系统引导过程主要由以下几个步骤组成(以硬盘启动为例)
  1 开机;
   2 BIOS 加电自检( POST——Power On Self Test ),包括检查 RAM keyboard ,显示器,软硬磁盘等等。 Intel 系列的 CPU 首先进入的是实模式,并开始执行位于地址 0xFFFF0 处的代码,也就是 ROM-BIOS 起始位置的代码;
3 搜索启动的操作系统,根据 BIOS 设置,可能会依次访问每个软盘的第一个扇区、硬盘、 CD-ROW 等;一旦找到有效的启动设备,将第一个扇区( 0 0 1 扇区,也就是 Boot Sector )的内容读入内存地址 0x7c00 处;
   4 检查( WORD 0000 7dfe 是否等于 0xaa55. 若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 “No ROM BASIC” ,然后死机;
   5 跳转到 0000 7c 00 处执行 MBR 中的程序 bootsect.S
6 MBR 先将自己复制到 0x90000 处,然后将紧接其后的 setup 部分(第二扇区)拷贝到 0x90200 ,将真正的内核代码拷贝到 0x100000 。以上这些拷贝动作都是以 bootsect.S setup.S 以及 vmlinux 在磁盘上连续存放为前提的;
7 bootsect.S 完成加载动作后,就直接跳转到 0x90200 ,这里正是 setup.S 的程序入口。 setup.S 的主要功能就是将系统参数(包括内存、磁盘等,由 BIOS 返回)拷贝到 0x90000-0x901FF 内存中,这个地方正是 bootsect.S 存放的地方,这时它将被系统参数覆盖。以后这些参数将由保护模式下的代码来读取。
   8 setup.S 还将 video.S 中的代码包含进来,检测和设置显示器和显示模式。最 后, setup.S 将系统转换到保护模式,并跳转到 0x100000 (对于 bzImage 格式的大内核是 0x100000 ,对于 zImage 格式的是 0x1000 )的内核引导代码, Bootloader 过程结束;
   9 Bootloader 跳转到 0x100000, 此处为 "arch/I386/init/head.S" 中的 startup_32 startup_32 的代码只需要设置一下全局变量,然后就跳转到 start_kernel 去了; start_kernel() "init/main.c" 中的 asmlinkage 函数,至此,启动过程转入体系结构无关的通用 C 代码中;
   10 start_kernel() 中设置与体系结构相关的环境、页表结构初始化、 Trap/IRQ 初始化、核心进程调度器初始化、时间 / 定时器初始化、控制台初始化、核心 Cache 初始化、内存初始化、内部及通用等各种 Cache 初始化、信号量初始化、其他部分初始化 (Init() smp_init())
   11 、启动 Init() 过程,创建第一个进程; Init() 中,取得 run-level 信息 , 执行 /etc/rc.d/rc.sysinit 脚本 , 激活核心的外挂式模块 (/etc/modules.conf), 然后 init 执行 run-level 的各个脚本 , 接着执行 /etc/rc.d/rc.local 脚本 , 最后执行 /bin/login 程序, 登入之后开始以 Shell 控管主机;
   12 、启动完成。 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值