2022年剖析Linux系统启动过程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年剖析Linux系统启动过程 .pdf》由会员分享,可在线阅读,更多相关《2022年剖析Linux系统启动过程 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 转帖 剖析 Linux 系统启动过程剖析 Linux 系统启动过程图片:本文以 RedHat9.0 和 i386 平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux 启动过程。并且介绍了启动中涉及到的各种文件。阅读 Linux 源代码,无疑是深入学习Linux 的最好方法。在本文对Linux 启动过程的介绍中,我们也尝试从源代码的视角来更深入的剖析Linux 的启动过程, 所以其中也简单涉及到部分相关的Linux 源代码,Linux 启动这部分的源码主要使用的是C语言,也涉及到了少量的汇编。而启动过程中也执行了大量的shell(主要是 bash shell)所写脚本。为了
2、方便读者阅读,笔者将整个Linux 启动过程分成以下几个部分逐一介绍,大家可以参考上图:当用户打开 PC的电源, BIOS开机自检,按BIOS中设置的启动设备( 通常是硬盘 ) 启动,接着启动设备上安装的引导程序lilo或 grub 开始引导 Linux ,Linux 首先进行内核的引导,接下来执行init程序, init程序调用了 rc.sysinit和 rc 等程序, rc.sysinit和 rc 当完成系统初始化和运行服务的任务后,返回init;init启动了 mingetty后,打开了终端供用户登录系统,用户登录成功后进入了Shell ,这样就完成了从开机到登录的整个启动过程。名师资料
3、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 下面就将逐一介绍其中几个关键的部分:第一部分:内核的引导( 核内引导 ) Red Hat9.0 可以使用lilo或 grub 等引导程序开始引导Linux 系统, 当引导程序成功完成引导任务后,Linux 从它们手中接管了CPU的控制权,然后CPU就开始执行Linux 的核心映象代码,开始了Linux 启动过程。这里使用了几个汇编程序来引导Linux ,这一步泛及到Linux 源代码树中的
4、“ arch/i386/boot”下的这几个文件: bootsect.S、setup.S 、video.S等。其中 bootsect.S是生成引导扇区的汇编源码,它完成加载动作后直接跳转到setup.S的程序入口。 setup.S的主要功能就是将系统参数(包括内存、磁盘等,由BIOS 返回)拷贝到特别内存中,以便以后这些参数被保护模式下的代码来读取。此外,setup.S还将 video.S中的代码包含进来,检测和设置显示器和显示模式。最后,setup.S将系统转换到保护模式,并跳转到 0 x100000 。那么 0 x100000 这个内存地址中存放的是什么代码?而这些代码又是从何而来的呢?0
5、 x100000 这个内存地址存放的是解压后的内核,因为Red Hat 提供的内核包含了众多驱动和功能而显得比较大,所以在内核编译中使用了“makebzImage ”方式,从而生成压缩过的内核,在RedHat 中内核常常被命名为 vmlinuz ,在 Linux 的最初引导过程中,是通过arch/i386/boot/compressed/中的 head.S 利用 misc.c中定义的 decompress_kernel()函数,将内核vmlinuz解压到 0 x100000 的。当 CPU跳到 0 x100000 时,将执行 arch/i386/kernel/head.S中的 startup_
6、32,它也是 vmlinux的入口,然后就跳转到start_kernel()中去了。 start_kernel()是init/main.c中的定义的函数,start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。 start_kernel()函数中,做了大量的工作来建立基本的Linux 核心环境。如果顺利执行完start_kernel(),则基本的Linux 核心环境已经建立起来了。在 start_kernel()的最后,通过调用init()函数,系统创建第一个核心线程,启动了init过程。而核心线程 init()主要是来进行一些外设初始化的工作的,包括调用 do_b
7、asic_setup()完成外设及其驱动程序的加载和初始化。并完成文件系统初始化和root文件系统的安装。当 do_basic_setup()函数返回 init(),init()又打开了 /dev/console设备,重定向三个标准的输入输出文件 stdin 、stdout和 stderr到控制台,最后,搜索文件系统中的init程序(或者由init=命令行参数指定的程序),并使用 execve()系统调用加载执行init程序。到此 init()函数结束,内核的引导部分也到此结束了。第二部分:运行init 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
8、- - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - init的进程号是1,从这一点就能看出,init进程是系统所有进程的起点,Linux 在完成核内引导以后,就开始运行init程序,。init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。在Redhat 系统中, inittab的内容如下所示(以“#开始的中注释为笔者增加的 ) :# # inittab This file describes how the INIT process should set up
9、 # the system in a certain run-level. # # Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if y
10、ou do not havenetworking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # #表示当前缺省运行级别为5(initdefault);id:5:initdefault: #启动时自动执行 /etc/rc.d/rc.sysinit脚本 (sysinit) # System initialization. si:sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wai
11、t:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 #当运行级别为5 时,以 5 为参数运行 /etc/rc.d/rc脚本, init将等待其返回 (wait) l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 #在启动过程中允许按CTRL-ALT-DELETE 重启系统# Trap CTRL-ALT-DELETE ca:ctrlaltdel:/sbin/shutdown -t3 -r now 名师资料总结 - -
12、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UP
13、S connected and working correctly. pf:powerfail:/sbin/shutdown -f -h +2 Power Failure; System Shutting Down # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c Power Restored; Shutdown Cancelled #在 2、3、4、5 级别上以 ttyX为参数执行 /sbin/mingetty程序,打开ttyX 终端
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年剖析Linux系统启动过程 2022 剖析 Linux 系统启动 过程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内