51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师论坛测试积点免费获取渠道攻略20+企业级实战项目就在这里!横扫BAT,Python全栈测试开发技能大全
【114期】:谈数据库测试&测试开发相互间的关系!中国软件测试行业现状调查报告新鲜出炉! 【杂志】做测试行业不偏科的尖子生! 【活动】为视频UP主打CALL,互动领福利!
查看: 2034|回复: 0

Linux系统启动过程

[复制链接]

该用户从未签到

发表于 2014-8-23 06:46:33 | 显示全部楼层 |阅读模式
1.BIOS:基本输入输出系统,记录主板芯片集和相关设置,比如cpu与接口的通信频率,启动设备的搜索顺序,中断信息等。
当机器上电后,系统开始读取BIOS,当获取到BIOS的相关设置值,系统进行开机自检。当获取到硬件信息的完后,主机开始尝试由存储媒体加载操作系统,然后由BIOS引导读取硬盘的MBR读取,MBR上记录的是引导加载操作系统的grub加载程序,为什么不直接引导加载操作系统呢?因为MBR的存储是有限的,最多只有512KB的空间。之后由grub或者LILO引导程序加载操作系统。要想引导程序能够加载操作系统,引导程序必须要能够具有识别核心的功能。
引导程序除了可以直接指定核心文件夹来启动外,也可以指定某个超级块的引导加载程序接管启动的核心加载流程,这同时说明引导程序可以存在在MBR与超级块中,这也就多重系统能够存在的原因。Window的引导程序强制安装在MBR与超级块中,linux可以选择安装在MBR或者超级块中,因此要装window与linux两个系统的时候,需要先装好Window然后再装Linux,或者window的引导程序无法识别到linux的核心文件。
引导程序引导开始读取核心文件(/boot/vmlinuz)后,Linux将核心解压到主存储器中,利用核心的功能以及相应的驱动程序,开始测试与驱动相应的硬件设备。在加载核心时,系统只会载入根目录,而且是以只读的方式载入,此外,为了某些功能可以用文件的方式读取,系统在启动的时候,会建立虚拟盘(RAM DISK),这就需要使用initrd以及linuxrc,协同启动的过程。
核心加载完毕后,系统就绪,程序开始执行。运行第一个程序/sbin/init(PID=1),该程序从/etc/inittab中获取到运行等级(runlevel)之后,执行/etc/rc.d/rc.sysinit脚本来设置系统的环境,在执行sysinit脚本中,默认调用/etc/sysconfig中的文件来进行设置系统的环境,若想看系统加载的信息可以利用dmesg来查看。若想要加载自定的模块,则将整个模块写入到etc/sysconfig/modules/*.modules中,该目录下,只要文件以.modules结尾即可。若新加了硬件,但是系统不支持需要做的事情:1.重新编译核心,并加入最新的硬件驱动程序源码。
2.将该硬件的驱动程序编译为模块,在启动时加载该模块。
当上述步骤完成后,系统顺利运行,需要启动系统相关的服务与网络服务了,这时利用由/etc/inittab获取到的运行等级来加载相应的系统与网络服务,每个等级都对应一个启动目录,对应于/etc/rc.d/rc.n中,这些启动目录存放的是一些链接文件,链接到init.d的脚本文件中去。该目录下的文件都以K、S字母开头的,S表示启动时需要的文件,K则表示关闭时需要的文件。
/etc/init.d目录放的是服务的启动脚本,而/etc/sysconfig则是系统设置的启动脚本,用来设置系统环境的。
因此当要切换不同的运行等级的时候,用init runlevel就可以切换,不同的运行等级加载的服务是不一样的。若你随系统的启动执行自定义的命令,可以利用/etc/rc.d/rc.local这个文件来执行,该文件相当于window下的autoexec.bat文件。
开机启动过程:
BIOS-àMBR---àKernel code-à/sbin/init--àsysinit(期间用到/etc/sysconfig)-à/etc/rc.d/rc.n(用到/etc/initd.d)--à/etc/rc.d/rc.local 其中服务的启动在/etc/rc.d/rc.n以及/etc/rc.d/rc.local这两个过程中。

核心模块:
核心:/boot/vmlinuz
核心解压缩所需的RAM DISK:/boot/initrd
核心模块:/lib/modules/version/kernel
核心源码:/usr/src/linux
核心被加载到系统中,记录的信息。
核心版本:/proc/version
系统核心功能:/proc/sys/kernel

要想处理核心模块,自然要了解核心提供的模块之间的关联性,linux提供了一些模块依赖性的解决方案,/lib/modules/modules.dep文件记录着模块之间的关联性,利用depmod命令可以用来更新模块之间的依赖关系。利用lsmod可以查看所核心所加载的模块,modinfo可以查看模块的相应的信息,模块的手工加载与删除用insmod与rmmod,但是不解决依赖性关系,而才用modprobe可以加载依赖关系。
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2020-8-9 22:58 , Processed in 0.073001 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2020 Comsenz Inc.

快速回复 返回顶部 返回列表