【正经教程】Linux基础(十一):启动流程·模块管理与Loader

(一)系统启动过程(以CentOS为参考)

  1. 加载BIOS(Basic Input Output System)的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备;
  2. 读取并执行第一个启动设备内的MBR(Master Boot Record)的boot Loader(即grub,spfdisk等程序)
  3. 依据boot loader的设置加载Kernel,Kernerl会开始检测硬件与加载驱动程序
  4. 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息。 (不一定是init。这取决于操作系统。但是这个进程的PID=1)
  5. init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络,时区等)
  6. init执行run-level的各个服务的启动(script方式)
  7. init执行etc/rc.d/rc.local文件
  8. init执行终端机模拟程序mingetty来启动login进程,之后等待用户登录

(二) BIOS,boot loader 与 Kernel加载

1.BIOS的开机自测与MBR

1.BIOS程序加载CMOS,获取主机的硬件配置
2.BIOS进行开机自检(Power-on Self Test,POST),硬件初始化,配置PnP设备
3.BIOS读取第一启动设备的MBR,执行BootLoader

2.Boot Loader

BootLoader的最主要功能:

①是认识操作系统的文件格式,②加载内核进入内存去执行

(每种操作系统有自己不同的BootLoader

BootLoader的保存位置:

①MBR区域 ②每个操作系统的文件系统的BootSector

BootLoader所提供的多重引导:

![](/assets/images/Screen Shot 2021-02-28 at 17.21.52.png)

3.有关MacOS的Boot文件

The Mac OS X boot loader is located in /System/Library/CoreServices/boot. efi. When loaded by the firmware, it displays a dark grey Apple logo on the screen. Then it loads the Darwin kernel from disk, as well as the essential driver extensions.

3.加载内核检测硬件与initrd

从这里开始,内核开始接管工作,并重新检测硬件。

Linux内核动态加载/lib/modules下的动态模块

·对于虚拟文件系统(InitialRAM Disk)的使用:

![](/assets/images/Screen Shot 2021-02-28 at 17.44.13.png)

如上图所示,bootloader 可以加载kernel 与initrd ,然后在内存中让initrd解压缩成为根目录,内核就能够借此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统,从而开始后续的正常启动流程。

initrd解压完了就是一个小型根目录。

(三) systemd与default.target与runlevel

有一说一= = 我一个MacOS一个Ubuntu, 也就没有init这个程序了。
所以这一段内容的笔记是参考的第四版的书。内核主动调用的一号进程是systemd

systemd的默认启动服务集合路劲

/etc/systemd/system/default.target

runlevel

Linux通过设置run level来规定系统使用不同的服务来启动,好让Linux使用不同的环境。这里不同的环境指的是那种单用户啊,有网络啊,图形还是命令行啊之类的。但是systemd已经不用这套东西了。改成了 c操作环境target

![](/assets/images/Screen Shot 2021-02-28 at 19.19.43.png)

我的Ubuntu里没有上面说的那个runlevel*.target文件,但是这个就先了解一下吧。这东西拓展开来那我真不知道何年何月才能看得完了。

systemd的处理流程

  1. 首先, 它会链接到/usr/lib/systemd/system/ 这个目录下去取得multi-user.target或graphic.target 这两个其中的一个
  2. 接下来s y s t e m d 会去找两个地方的设置, 即如下目录: • / e t c / s y s t e m d / s y s t e m / g r a p h i c a l . t a r g e t . w a n t s / : 用户设置加载的u n i t ; • / u s r / l i b / s y s t e m d / s y s t e m / g r a p h i c a l . t a 「 g e t . w a n t s / : 系统默认加载的u n i t 。
  3. 然后就不停地在这些文件里看到底还需要些什么,再去找相应的配置。直到所有的条件被满足。

![](/assets/images/Screen Shot 2021-02-28 at 19.19.43.png)

posted @ 2021-10-23 11:30  Craven胆小鬼  阅读(267)  评论(0)    收藏  举报