按下按钮开始到进入桌面过程发生如下操作:
Power On,CPU先找到BIOS,将BIOS固件内程序加载进内存执行硬件检测
BIOS检测分为硬件连接检测和硬件功能检测,分两次完成
BIOS交接,主控权转给硬盘主引导扇区MBR,准备从硬盘开始启动操作系统
MBR分区启动的方式现在已经被GPT分区表替代了,GPT分区表把分区信息和启动信息分离,分区信息做了多份冗余,增强了健壮性,也支持更多的分区数量。需配合UEFI BIOS使用。后者提供图形更丰富的配置及更开放的第三方扩展性。
MBR位于整个硬盘的0磁道0柱面1扇区,直接就能被定位找到。 大小是512字节,其中前446字节放linux的启动引导Bootloader,这里通常可以安装GRUB实现多操作系统引导。之后跟64字节的分区信息,和2字节的Magic Number (十六进制的55AA)标志着MBR的结束。
这里顺带说一下安装多个GRUB,实现多个kernel启动的安装方法,GRUB不仅可安装在MBR的bootloader中,也可被安装多份,在每个主分区最前面的分区引导中,这样就能做到链式调用在不同GRUB界面中跳转,与GRUB功能类似的还有LILO和syslinux。
GRUB:GRUB文件保存在/boot/grub中,里面以“OS->kernel位置”的格式配置多个启动入口。它的主要作用是加载文件系统驱动,让存放在文件系统中的/boot/grub/grub.conf文件能被访问到,开启用户可以看到的选项画面。
Kernel:接下来按GRUB的指引要加载kernel,kernel一般也保存在/boot/目录下。kernel带有常见设备的驱动。kernel按功能分成计算,内存管理,网络,存储和UI交互几大模块。kernel在后面还要展开了解。
initrd:与kernel一起加载的还有initrd或者initramfs,它的存在目的之一是为了精简kernel,将不常用的驱动以模块化的方式组合加载。它本身是一个包含执行脚本和小型文件系统的文件。
initrd包含/proc /sys /dev 和一个初始化脚本。/proc存储所有开机后的硬件, process相关信息和实时变化的虚目录。/sys将系统功能模块化分类展示。/dev存放设备文件。最终这个小型的文件系统会被copy到即将启动linux文件系统下面去。
init:至此将开始执行Linux下的第一个进程init,它的PID是1。它将按照默认的运行级别开始一个个加载守护进程。运行级别的配置在文件/etc/initab中。这里需要提醒的是init并不是必须被第一个执行的进程。
按照/etc/initab的指定加载一个运行级别下的所有进程,通常默认的是x11图形化模式。它对应启动服务保存在/etc/rc.d/rc5.d中,这些守护进程以S开头的或K开头,数字越大执行越靠后。可以在这个目录下看到很多熟悉的服务。
所有进程加载完后就轮到rc.local。它用来配置要自定义加载的内容。显示分辨率设置通常在这个文件,环境变量也可以添加在这个文件,可以让配置改变对所有用户生效。
准备登陆shell,获取环境变量和局部变量。bash程序运行,加载/etc/profile设置系统环境变量。
加载/etc/bashrc设置系统功能参数。
加载$HOME/.bashrc设置用户使用的别名。
最后加载$HOME/.bash_profiles设置用户级环境变量。
至此shell加载完成,系统可用。
领取专属 10元无门槛券
私享最新 技术干货