作者:zpgood原文:https://blog.51cto.com/zhangp...1.Linux启动过程:BIOS:(BasicInputOutputSystem)BasicInputOutputSystem,其中是一种固化在计算机主板上的ROM芯片上的程序,存放着计算机最重要的基本输入输出程序、开机自检程序和系统自启动程序,可以读取和读取从CMOS写入系统设置的具体信息。MBR:MasterBootRecord,主引导记录区。引导加载程序:启动引导加载程序。二、详细过程第一步:加载BIOS并开启电脑,电脑硬件会自动加载BIOS,读取BIOS中的相关硬件信息并对硬件系统进行自检,然后找到第一个设备具有根据BIOS配置的引导程序。第二步:读取MBR硬盘第0磁道的第一个扇区称为MBR,即MasterBootRecord,大小为512字节,其中存放了预引导信息和分区表信息。系统找到BIOS指定的硬盘的MBR后,会将其复制到物理内存中,复制到物理内存中的内容就是BootLoader(lilo或grub)。第3步:启动BootLoaderBootLoader是在操作系统内核运行之前运行的一个小程序。通过这个小程序,我们可以对硬件设备进行初始化,建立内存空间映射,从而使系统的软硬件环境达到一个合适的状态,为最终调用操作系统内核做好一切准备。BootLoader有几种类型,其中Grub和Lilo是常见的Loader。本文以Grub为例进行说明,grub功能:提供一个菜单,让用户选择系统启动或不同的内核版本;将用户选择的内核加载到RAM中的特定空间,解压并展开。系统读取内存中的grub配置信息(通常是menu.lst或grub.conf),并根据这些配置信息加载指定的内核。第四步:加载内核grub,将系统的控制权交给内核。内核开始检测所有可以识别的硬件设备,并尝试挂载根目录以获取其驱动程序。此时需要先加载磁盘驱动程序才能读取磁盘,而磁盘驱动程序是存放在磁盘中的,这样会导致linux无法启动。这时候就需要一个伪文件系统来解决这个问题。虚拟文件系统(InitialRAMDisk)是/boot/initramfs-release.img。这个文件的特点是可以通过bootloader加载到内存中,然后解压这个文件在内存中模拟成一个根目录,而内存中的这个模拟文件系统可以提供一个可运行的程序,通过它加载启动过程中最需要的核心模块,通常这些模块是U盘、RAID、LVM、SCSI等带有磁盘驱动的文件系统。加载完成后,会帮助核心再次调用/sbin/init,开始后续的正常启动过程。注意:RamDisk是辅助文件,不是必须的,要看内核能否直接驱动根文件系统所在的设备。第五步:运行/sbin/init程序,设置linux的运行级别。内核加载完成后,运行用户空间的第一个应用程序是/sbin/init,然后读取/etc/inttab文件,根据文件配置进行设置。确定系统运行级别;第六步:init进程执行rc.sysinit设置运行级别后,Linux系统执行/etc/rc.d/rc.sysinit系统初始化脚本程序。初始化包括:设置主机名、设置欢迎信息、激活Udex和seliux、挂载/etc/fstab文件中定义的所有文件系统、检测根文件系统、设置系统时钟、根据/etc设置内核/sysctl.conf文件参数,激活LVM和软RAID设备,激活交换设备,加载附加设备的驱动程序,并执行清理操作。第七步:启动内核模块。具体根据/etc/sysconfig/modules文件目录下的文件加载内核模块。第八步:执行运行级的各个服务的启动(脚本方式)。根据运行级别的不同,系统会运行rc0.d到rc6.d中相应的脚本程序,完成相应的初始化工作,启动相应的服务。第九步:执行/etc/rc.d/rc.localrc.local是Linux在完成所有初始化工作后留给用户进行个性化设置的地方。你可以把你想要设置和启动的东西放在这里。第十步:执行/bin/login程序,进入登录状态。Linux会启动终端或XWindow等待用户登录。最新2TB技术干货:包括架构师实战教程、大数据、Docker容器、系统运维、数据库、redis、MongoDB、电子书、Java基础课程、Java实战项目、ELKStack、机器学习、BAT面试精读讲座视频等。只需在“打工哥科技之路”微信公众号对话框回复关键字:1024即可获取所有信息。
