Linux启动过程与initramfs


Linux启动过程概述

这里先简单列一下 Linux 操作系统启动的全过程:

  1. 按下电脑的电源键后,电脑通电,BIOS启动;
  2. BIOS读取硬盘的MBR,运行启动扇区中的代码,旧系统往往需要自己写启动扇区,而新系统基本上由专用的启动软件接管了,在 Linux 世界中,目前都是用的 Grub2。由于启动扇区空间太小,放不下太复杂的代码逻辑,所以 Grub2 也使用了多阶段启动的策略;
  3. Grub2 负责将操作系统内核加载到内存,如果有必要,也会把 initramfs 文件加载到内存,然后将控制权交给内核;
  4. 内核进行初始化,内核的初始化过程结束后,就会把控制权交给/init程序,从此进入用户空间;
  5. 因为内核先是将 initramfs 文件挂在为根文件系统,所以刚开始运行的/init程序其实是 initramfs 文件中的,所以该文件需要的重要的初始化脚本、内核模块、配置文件等,都位于 initramfs 文件中,这也是为什么很多时候我们修改了某些配置文件后,需要先更新 initramfs 文件再重启操作系统才会生效;
  6. initramfs 文件中的/init程序负责挂载硬盘上的文件系统,然后再把根文件系统切换到硬盘上的根分区,再运行/sbin/init程序,这时所有程序、配置文件、脚本都是使用的硬盘上的了,当然,网络文件系统也是同理。可以看出 init 程序的运行也是一个分阶段的过程;
  7. /sbin/init程序负责系统的初始化、各种服务的运行、用户的登陆等等;
  8. 如果需要运行图形界面,则/sbin/init程序会运行 Display Manager,在 Fedora 中是 gdm,在 Ubuntu 中是 lightdm。然后 Display Manager 负责启动整个图形界面。

Continue reading “Linux启动过程与initramfs”

Advertisements

Linux Bootstrap With UEFI


UEFI系统

UEFI(Unified Extensible Firmware Interface)通过boot service控制系统的启动过程,就像古老的BIOS一样,同时UEFI通过runtime service为操作系统和系统固件提供接口,与BIOS不同的是UEFI独立于CPU有自己的架构,同时它拥有自己的驱动。UEFI无法挂在分区并读取某些文件系统。 Continue reading “Linux Bootstrap With UEFI”

Linux Bootstrap With BIOS


Bootstrapping(引导) 是 Staring up a computer 的标准术语。bootstrap来自一则谚语:

“pull oneself up by one’s bootstraps”

这句话的字面意思是”拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做”拉鞋带”,久而久之就简称为boot了。 Continue reading “Linux Bootstrap With BIOS”