首页 > 代码库 > linux开机流程、模块管理与Loader
linux开机流程、模块管理与Loader
1.系统开机过程:
1)加载BIOS的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置
2)读取并执行第一个开机装置内MBR的boot Loader(亦即grub,spfdisk等程序)
3)依据boot loader的设定加载Kernel,Kernerl会开始侦测硬件信息与加载驱动程序
4)在硬件驱动成功之后,Kernel会主动呼叫init程序。而init会取得run-level信息
5)init执行/etc/rc.d/rc.sysinit档案来准备软件执行的作业环境(如网络,时区等)
6)init执行run-level的各个服务之启动(script方式)
7)init执行/etc/rc.d/rc.local档案
8)init执行终端机仿真程序mingtty来启动login,最后就等待用户登入啦。
2.BIOS、开机自我测试,MBR与boot loader
1)启动整部系统首先就得要让系统加载BIOS,并透过BIOS程序加载CMOS的信息,并且藉由CMOS内的设定值取得主机的各项硬件配置。取得这些信息后,BIOS还会进行自我测试,然后开始执行硬件侦测的初始化,并设定PnP(Plug and Play,即插即用装置),之后在定义出可开机的装置顺序,接下来就会开始进行装置的数据读取了(MBR相关任务的开始)。
2)开机管理程序(Boot Loader)安装在开机装置的第一个扇区(sector)内,也就是我们一直谈到的MBR(Master Boot Record,主要启动记录区)。BIOS透过INT 13这条信道来读取MBR。
3)Loader最主要的功能是识别操作系统的文件格式并加载核心到主存储器中去执行。其中每个文件系统(filesystem或partition)都会保留一块启动扇区提供操作系统安装boot loader,而通常操作系统默认都会安装一份loader到他的根目录所在的文件系统的boot sector上。linux系统安装时,你可以选择将boot loader安装到MBR去,也可以选择不安装。而windows安装时,它预设会主动的将MBR与boot sector都装上一份boot loader程序。因此,安装多重操作系统时,你的MBR常常会被不同的操作系统的boot loader所覆盖。
4)boot loader的主要功能有:
提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能
载入核心档案:直接指向可开机的程序区段来开始操作系统
转交其他loader:将开机管理功能转交给其他loader负责。
5)windows的loader预设不具有控制权转交功能,因此不能使用Windows的loader来加载Linux的loader,这也是为啥必须先装windows在装linux。
3.加载核心侦测硬件与initrd:boot loader开始读取核心后,linux会将核心解压缩到主存储器中,并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等。此时Linux会以自己的功能重新侦测一次硬件,而不一定会使用BIOS侦测到的硬件信息。即核心此时才开始接管BIOS后的工作了。核心一般放在/boot/vmlinuz
4.Linux可以动态加载核心模块的(可以理解为驱动程序),这些核心放置在/lib/modules/目录内。由于放置到磁盘根目录内(/lib不能与/分别放在不同的partition),因此在开机的过程中核心必须要挂载根目录,这样才能够读取核心模块提供加载驱动程序的功能。而且为了担心影响到磁盘内的文件系统,因此开机过程中根目录是以只读的方式来挂载的。
5.虚拟文件系统一般使用的档名为/boot/inird,这个档案可以透过boot loader来加载到内存中,然后这个档案会被压缩并且在内存当中仿真出一个根目录,且此仿真在内存当中的文件系统能够提供一支可执行的程序,透过该程序来加载开机过程中所最需要的核心模块,通常这些模块就是USB,RAID,LVM,SCSI等文件系统与磁盘接口的驱动程序,等载入完成后,会帮助核心重新呼叫/sbin/init来开始后续的正常开机流程。
6.第一支程序init及配置文件/etc/inittab与runlevel:在核心加载完,进行完硬件侦测与驱动程序加载后,此时你的主机硬件应该已经准备就绪了,此时核心会主动呼叫第一支程序,那就是/sbin/init,因此该程序的PID为1,该程序的最主要功能就是准备软件执行环境包括系统的主机名,网络设定,语系处理,文件系统格式及其他系统服务启动等。而所有的动作都会透过init的配置文件/etc/init的配置文件,亦即是/etc/inittab来规划,而inittab内还有一个很重要的设定项目,那就是默认的runlevel(开机执行等级)。关于运行级别棵参考:http://7613577.blog.51cto.com/7603577/1587174
7./etc/inittab解读:
initdefault:预设的runlevel设定值
sysinit:代表系统初始化动作项目
ctraltdel:代表[ctr]+[alt]+[del]三个按键是否可以重新启动的设定
wait:后面的字段设定的指令项目必须要执行完毕才能继续底下其他的动作
respawn:代表后面字段的指令可以无限制的再生(重新启动)。eg:tty1的mingetty产生的可登入画面,在注销结束后,系统会再开一个新的可登入画面等待下一个登入。
8.init的处理流程:该档案的内容设定是一行一行的从上往下处理的,具体为:
1)先取得runlevel亦即默认的开机级别。
2)使用/etc/rc.d/rc.sysinit进行系统初始化
3)执行runlevel对应的行,eg:runlevel=5,则执行l5:5:wait:/etc/rc.d/rc 5
4)设定[ctr]+[alt]+[del]这组的组合键功能
5)设定不断电系统pf,pr两种机制
6)启动mingetty的六个终端机(tty1~tty6)
7)最终以/etc/X11/perfdm-nodaemon启动图形接口
本文出自 “虎哥的博客” 博客,请务必保留此出处http://7613577.blog.51cto.com/7603577/1602691
linux开机流程、模块管理与Loader