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

编程入门 行业动态 更新时间:2024-10-25 15:33:59

Linux启动分析(1)— <a href=https://www.elefans.com/category/jswz/34/1769117.html style=总体过程"/>

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 、启动完成。 

更多推荐

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

本文发布于:2024-02-08 20:41:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674817.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:总体   过程   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!