图解linux启动过程
概述
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWUVZVUFOR0VO/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
图1 linux系统过程big view
第一阶段引导载入程序
MBR 中的主引导载入程序是一个 512 字节大小的映像,当中包括程序代码和一个小分区表(參见图 2)。前 446 个字节是主引导载入程序,当中包括可运行代码和错误消息文本。接下来的 64 个字节是分区表,当中包括 4 个分区的记录(每一个记录的大小是 16 个字节)。
MBR 以两个特殊数字的字节(0xAA55)结束。这个数字会用来进行 MBR 的有效性检查。
第二阶段引导载入程序
次引导载入程序(第二阶段引导载入程序)能够更形象地称为内核载入程序。
这个阶段的任务是载入 Linux 内核和可选的初始 RAM 磁盘。
GRUB 阶段引导载入程序
/boot/grub 文件夹中包括了 stage1、stage1.5 和stage2 引导载入程序。以及非常多其它载入程序(比如,CR-ROM
使用的是 iso9660_stage_1_5)。
关于 GRUB。非常好的一件事情是它包括了有关 Linux 文件系统的知识。GRUB 不像 LILO 一样使用裸扇区。而是能够从 ext2 或 ext3 文件系统中载入 Linux 内核。它是通过将两阶段的引导载入程序转换成三阶段的引导载入程序来实现这项功能的。
阶段 1 (MBR)引导了一个阶段 1.5 的引导载入程序,它能够理解包括 Linux 内核映像的特殊文件系统。
这方面的样例包括reiserfs_stage1_5(要从
Reiser 日志文件系统上进行载入)或 e2fs_stage1_5(要从
ext2 或 ext3 文件系统上进行载入)。当阶段 1.5 的引导载入程序被载入并执行时,阶段 2 的引导载入程序就能够进行载入了。
当阶段 2 载入之后,GRUB 就能够在请求时显示可用内核列表(在 /etc/grub.conf 中进行定义。同一时候还有几个软符号链接/etc/grub/menu.lst 和 /etc/grub.conf)。我们能够选择内核甚至改动附加内核參数。
另外,我们也能够使用一个命令行的
shell 对引导过程进行高级手工控制。
将第二阶段的引导载入程序载入到内存中之后,就能够对文件系统进行查询了。并将默认的内核映像和 initrd 映像载入到内存中。当这些映像文件准备好之后,阶段
2 的引导载入程序就能够调用内核映像了。
内核
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWUVZVUFOR0VO/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
图3 linux内核i386引导函数流程
通过调用 start_kernel。会调用一系列初始化函数来设置中断,运行进一步的内存配置,并载入初始
RAM 磁盘。最后,要调用kernel_thread(在 arch/i386/kernel/process.c 中)来启动 init 函数。这是第一个用户空间进程(user-space
process)。最后。启动空任务。如今调度器就能够接管控制权了(在调用 cpu_idle 之后)。通过启用中断,抢占式的调度器就能够周期性地接管控制权,从而提供多任务处理能力。
在内核引导过程中,初始 RAM 磁盘(initrd)是由阶段
2 引导载入程序载入到内存中的,它会被拷贝到 RAM 中并挂载到系统上。这个initrd 会作为
RAM 中的暂时根文件系统使用,并同意内核在没有挂载不论什么物理磁盘的情况下完整地实现引导。因为与外围设备进行交互所须要的模块可能是 initrd 的一部分,因此内核能够很小,可是仍然须要支持大量可能的硬件配置。在内核引导之后,就能够正式装备根文件系统了(通过 pivot_root):此时会将 initrd 根文件系统卸载掉,并挂载真正的根文件系统。
decompress_kernel 输出
函数 decompress_kernel 就是显示我们通常看到的解压消息的地方:
Uncompressing Linux... Ok, booting the kernel.
initrd 函数让我们能够创建一个小型的
Linux 内核。当中包含作为可载入模块编译的驱动程序。这些可载入的模块为内核提供了訪问磁盘和磁盘上的文件系统的方法,并为其它硬件提供了驱动程序。因为根文件系统是磁盘上的一个文件系统,因此 initrd 函数会提供一种启动方法来获得对磁盘的訪问,并挂载真正的根文件系统。在一个没有硬盘的嵌入式环境中,initrd 能够是终于的根文件系统,或者也能够通过网络文件系统(NFS)来挂载终于的根文件系统
Init
当内核被引导并进行初始化之后,内核就能够启动自己的第一个用户空间应用程序了。
这是第一个调用的使用标准 C 库编译的程序。在此之前,还没有运行不论什么标准的 C 应用程序。
在桌面 Linux 系统上,第一个启动的程序一般是 /sbin/init。可是这不是一定的。非常少有嵌入式系统会须要使用 init 所提供的丰富初始化功能(这是通过 /etc/inittab 进行配置的)。
在非常多情况下,我们能够调用一个简单的
shell 脚本来启动必需的嵌入式应用。
版权声明:本文博主原创文章。博客,未经同意不得转载。
图解linux启动过程的更多相关文章
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- 嵌入式Linux启动过程中的问题积累
嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Num ...
- [linux 整理] linux启动过程3
本文介绍linux启动过程的第三步 busybox--------------------> rc init busybox位置即内容 busybox/init/init.c 1.各种设置信号 ...
- 从Linux启动过程到android启动过程
Linux启动过程: 1.首先开机给系统供电,此时硬件电路会产生一个确定的复位时序,保证cpu是最后一个被复位的器件.为什么cpu要最后被复位呢?因为 如果cpu第一个被复位,则当cpu复位后开始运行 ...
- Linux启动过程简述
Linux启动过程: 图片来自:https://www.cnblogs.com/codecc/p/boot.html 简单来讲: 加载BIOS–>读取MBR–>Boot Loader–&g ...
- Linux 启动过程详解
目录 1. Linux启动过程 2. 启动过程概述 3. 引导加载阶段 4. 内核阶段 4.1 内核加载阶段 4.2 内核启动阶段 5. 早期的用户空间 6. 初始化过程 6.1 SysV init ...
- 转-Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042 1)BIOS自检2)启动Grub/Lilo3)加 ...
- Linux启动过程笔记
Linux启动过程 1.启动流程(BIOS->MBR:Boot Code->引导GRUB->载入内核->运行init->runlevel) 2./boot/grub/下有 ...
随机推荐
- Python 极简教程(二)编码工具
Python 的编码工具很多.目前最流行的是 pycharm,关于 pycharm 的安装使用请参考 PyCharm安装使用教程. 而学习过程中,我觉得最好用的,还是 Python 自带的练习工具 I ...
- 卡塔兰数(Catalan)
卡塔兰数(Catalan) 原理: 令h(0)=1,h(1)=1. 卡塔兰数满足递推式:h(n)=h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)(n>=2) ...
- 基于AndFix的热修复 成功后简单的总结总结错失
首先了解热修复是什么东西?? 就我自己简单的理解:就是不须要又一次打包 公布到市场 然后再让用户又一次下载就能够把一些小bug和需求通过补丁的形式进行改动. 然后如今的热修复方式有大致的三种: 1.d ...
- REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE
参考: http://www.cnblogs.com/scottckt/archive/2012/10/11/2719562.html http://www.jb51.net/article/3842 ...
- 全面详细介绍一个P2P网贷领域的ERP系统的主要功能
一般的P2P系统,至少包括PC网站的前端和后端.前端系统的功能,可以参考"P2P系统哪家强,功能其实都一样" http://blog.csdn.net/fansunion/ ...
- Oracle以系统管理员的方式登录失败
解决方法: 因为SYS是在数据库之外的超级管理员,所以我们在登录的时候输入sys后在输入命令:password as sysdba 就可以!例如:输入口令: m1234 as sysdba 参考文章 ...
- 自定义 matplotlib 设置
Customizing plots with style sheets import matplotlib as mpl 查看配置文件所在的目录:mpl.get_configdir() 1. 自定义 ...
- IPv4与IPv6数据报格式详解
摘要: 本文给出IPv4与IPv6数据报格式示意图,并整理了各个字段含义,最后对比IPv4与IPv6数据报格式的区别. 一.IPv4数据报 图1 IPv4数据报格式版本号(version) 不同的IP ...
- TCP套接字编程模型及实例
摘要: 本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析. PS:本文权当 ...
- ZOJ-1649 Rescue BFS (HDU 1242)
看题传送门: ZOJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649 HDU http://acm.hdu.edu. ...