Linux系统启动流程
发布时间:2022-11-22 21:22:23阅读:54次来源:HarmonyOS下载网 系统大全为您提供Linux系统启动流程Linux系统从按下开机按钮到等待用户输入用户名、密码,这中间到底发生了什么,本文接下来将要简单讲解一下Linux系统的启动过程。Linux系统启动流程大致是这样的:BIOS(BootSequence)-->MBR(GRUB,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)下面详细讲一下其中的每一步。1.BIOSBIOS是英文"BasicInputOutputSystem"的缩略词,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序。主板在接通电源后,BIOS会第一个获得系统的控制权。BIOS首先会对系统硬件进行检测(POST,PowerOnSelfTest,上电自检),自检测过程大致为:加电-CPU-ROM-BIOS-SystemClock-DMA-64KBRAM-IRQ-显卡等。如果关键部件有问题,计算机会发出报警声。自检一切正常后BIOS会调用一些设备自身ROM中的初始化代码,对这些设备进行初始化,比如显卡。这时可以看到一些初始化信息,介绍生产厂商、芯片类型等内容。最后,BIOS会根据COMS中设置的启动顺序(BootSequence),依次尝试启动。当启动设备是硬盘时,BIOS会把系统控制权交给硬盘MBR中的bootloader。http://baike.baidu.com/link?url=3u5SmrzMeDuUNAo9rqDc4Vxo8mN0n-7OCLMurOs4yxGXL1ffjnIh0BAsyFm5Elai4ijwxk8dQEVKEHhqWtbHoa2.MBRMBR是MasterBootRecord的简写,即主引导记录。MBR记录一般在磁盘0磁道1扇区,共512个字节。前446个字节是BootLoader(引导程序),后4*16的64个字节是存放分区信息的,最后2个字节是校验信息,一般是55AA。大多数Linux系统使用GRUB作为BootLoader。GRUB可以引导多种操作系统,它可以识别磁盘文件系统的格式,所以只需要内核文件名和内核所在分区就可以加载内核,通过/boot/grub/grub.conf文体来配置这些信息。GRUB是模块化的,运行时经历如下阶段:Stage1Stage1的代码保存在MBR中前446字节。将MBR导出为文件后查看#ddif=/dev/sdacount=1of=/tmp/MBR1+0recordsin1+0recordsout512bytes(512B)copied,0.000283544s,1.8MB/s#file/tmp/MBR/tmp/MBR:x86bootsector;GRandUnifiedBootloader,stage1version0x3,bootdrive0x80,1stsectorstage20x8480e,GRUBversion0.94;partition1:ID=0x83,active,starthead32,startsector2048,1024000sectors;partition2:ID=0x8e,starthead221,startsector1026048,82860032sectors,codeoffset0x48/boot/grub/stage1是stage1未作修改的代码备份。#file/boot/grub/stage1/boot/grub/stage1:x86bootsector;GRandUnifiedBootloader,stage1version0x3,GRUBversion0.94,codeoffset0x48Stage1_5Stage1_5的代码允许GRUB识别多种类型的文件系统,识别每个文件系统的代码的代码保存在/boot/grub/*stage1_5的文件中。#cd/boot/grub#ls*stage1_5e2fs_stage1_5iso9660_stage1_5reiserfs_stage1_5xfs_stage1_5fat_stage1_5jfs_stage1_5ufs2_stage1_5ffs_stage1_5minix_stage1_5vstafs_stage1_5Stage2Stage2代码读取/boot/grub/grub.conf文件,决定如何加载内核,Stage2的代码保存在文件/boot/grub/stage2中:#ls-al/boot/grub/stage2-rw-r--r--.1rootroot125976Jun282012/boot/grub/stage23.KernelGRUB的最后阶段stage2会根据/boot/grub/grub.conf文件中的配置加载kernel到内存中,并将系统控制权交给kernel。4.initrdinitrd是"initialRAMdisk"的缩写,随kernel一起被GRUB加载进内存,在系统引导过程中挂载的一个临时根文件系统。Linux内核在设计风格上属于单内核,文件系统、进程管理、内存管理都需要内核来完成,这样势必会造成内核代码非常庞大。为了减少linux内核的大小,Linux系统内核被分成了内核和内核模块,内核会根据平台需要动态加载内核模块,非核心功能通常做成内核模块,比如大多数设备驱动。这样势必会产生矛盾,比如,如果Linux内核中没有集成识别ext3文件系统的模块,而ext3模块却在ext3文件系统中。这时,Linux内核访问文件系统需要拿到这个模块,而这个模块又在文件系统中。这样就能看出使用initrd的必要了。在linux2.5内核开始引入initramfs技术,作用与initrd类似,都是由内核执行其上的某个程序(initrd是nuxrc,initramfs是/init)。区别是nuxrc不是以PID=1执行的,因为1这个进程ID是给/sbin/init保留的。initrd机制找到真正的根设备后将其设备号写入/proc/sys/kernel/real-root-dev,然后控制转移到内核由其装载根文件系统并启动/sbin/init。initramfs机制中/init以PID=1执行,由init装载根文件系统并用exec转到真正的/sbin/init,这样简化了启动流程,减少了启动时间。5.init/sbin/init进程是Linux启动的第一个进程,PID=1。Linux系统的init进程经历了两次重大的演进,传统的sysvinit已经淡出历史舞台,新系统UpStart和systemd各有特点。sysvinit读取的一个主配置文件是/etc/inittab,文件格式参考这里主要定义的设置有:1.定义默认启动级别2.系统初始化阶段调用rc.sysinit3.调用rc脚本,传入运行级别作为参数,启动和关闭对应级别的服务4.ctrl+alt+del组合按键的动作5.6个虚拟终端7.运行级别为5时启动窗口显示管理器而UpStart则仅保留sysvinit的inittab文件中默认启动级别,其它的配置分散到了/etc/init/*.conf多个文件中。<spanstyle="font-size:14px;">[rising@centos~]$ls/etc/initcontrol-alt-delete.confprefdm.confrcS-emergency.confreadahead-disable-services.conftty.confinit-system-dbus.confquit-plymouth.confrcS-sulogin.confserial.confkexec-disable.confrc.confreadahead-collector.confsplash-manager.confplymouth-shutdown.confrcS.confreadahead.confstart-ttys.conf</span>init程序(sysvinit)读取或运行的文件顺序如下:init->inittab->rc.sysinit->rc->rc.local->mingettytty[1-6]->X11/prefdm/etc/inittab的任务:1、设定默认运行级别;2、运行系统初始化脚本;3、运行指定运行级别对应的目录下的脚本;4、设定Ctrl+Alt+Del组合键的操作;5、定义UPS电源在电源故障/恢复时执行的操作;6、启动虚拟终端(2345级别);7、启动图形终端(5级别);/etc/rc.d/rc.sysinit完成的任务:1、激活udev和selinux;2、根据/etc/sysctl.conf文件,来设定内核参数;3、设定时钟时钟;4、装载键盘映射;5、启用交换分区;6、设置主机名;7、根文件系统检测,并以读写方式重新挂载;8、激活RAID和LVM设备;9、启用磁盘配额;10、根据/etc/fstab,检查并挂载其它文件系统;11、清理过期的锁和PID文件;/etc/rc.d/rc文件中有如下的shell代码,负责运行指定运行级别对应的目录下的脚本,接受一个参数作为运行级别 for I in /etc/rc$1.d/K*; do$I stopdonefor I in /etc/rc$1.d/S*; do$I startdone 关闭或启动的优先次序,数据越小越优先被选定 先关闭以K开头的服务,后启动以S开头的服务;/etc/rc.d/rc.local: 系统最后执行的一个脚本。一般被链接为S99local,被/etc/rc.d/rc脚步执行。mingetty inittab文件中定义了多个虚拟终端运行的程序。mingetty会启动login程序进行身份验证。经验总结: 以上就是系统大全给大家介绍的如何使的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击系统大全官网吧。本文来自系统大全http://www.win7cn.com/如需转载请注明!推荐:win7纯净版