开机到内核执行,Linux背后都经历了什么?

科技新创意 2025-04-02 10:54:13

你有没有过这样的经历?

在你按下电脑的电源按钮后,屏幕上的加载动画开始循环,无数次之后,终于呈现了熟悉的桌面。

对于大多数人来说,这只是一个普通的开机过程,而对于一些技术迷来说,这背后隐藏着一个精彩的故事。

今天,我们来聊聊这个过程,从你按下开机按钮那一刻,到 Linux 内核开始执行的那一刻,这背后究竟发生了什么。

从电源键到 Boot Loader 的第一步

也许你早就发现了,按下电源按钮之后,并不是立马到系统桌面。

事实上,这个过程有很多步骤。

首先最重要的就是主板上的固件,称作UEFI(统一可扩展固件接口),它立刻开始执行。

UEFI 可以理解为一座桥梁,连接了硬件与操作系统。

它会先去检查和初始化你的硬件,包括CPU、内存、显卡等等,确保每个部件都可以正常工作。

接下来,UEFI 会运行一个叫做 Boot Manager 的组件。

Boot Manager 的工作是找到并启动一个 UEFI 应用程序,常见的 UEFI 应用程序就是我们的 Boot Loader。

你可能熟悉的 GRUB 或者 Systemd-boot,其实都是 UEFI 应用程序。

这时候,Boot Manager 会查找一个叫 BootOrder 的变量,这个变量里记录了一系列可以启动的程序。

它会按顺序尝试,直到找到一个可以运行的。

解密 Boot Loader 的工作原理

这时候,主角之一的 Boot Loader 上场了。

假设我们用的是 Systemd-boot。

它的主要任务是加载并启动 Linux 内核。

Systemd-boot 会先从一个特定目录下读取配置文件,这些配置文件描述了不同的启动项,比如你可能装了多个系统或者多个内核版本。

Systemd-boot 还会有一个默认启动项,通常是最近的一次选择。

你可能会好奇,这里提到的配置文件是干什么的?

实际情况是,里面记录了内核的位置、要加载的初始文件系统(Initrd),以及一些内核参数。

可以把这些配置文件看做是指路牌,告诉系统如何开始自己的旅程。

还没完,Systemd-boot 接下来会展示一个简洁的菜单,让你可以选择不同启动项。

我们可能经常忽略它直接跳过,但它确实存在,尤其对于一些需要特定启动选项的场景来说非常有用。

从 Boot Loader 到 Linux 内核

一旦选好了启动项,真正的魔法才开始。

Systemd-boot 会加载指定的内核到内存中,并同时加载 initrd 文件。

这个 initrd 就好比是一个小型的根文件系统,为内核启动初期提供必要的资源支持。

Systemd-boot 综合 UEFI 提供的服务,如 LoadImage 和 StartImage,完成了加载和启动工作。

这个时候,控制权真正交到了 Linux 内核手里。

内核首先解压 initrd 到内存,并启动里面第一个用户程序,这个程序会挂载实际的根文件系统并让位给真正的 init 程序。

这个 init 文件就是我们平常说的操作系统的第一进程。

从这里开始,内核根据配置和硬件实际情况开始初始化各种子系统,最终启动用户空间的应用,你看到熟悉的登录界面或者桌面,也就意味着 Linux 内核已经完成了它的启动过程。

这么看下来,从你按下开机按钮的那一秒开始,开机过程中所发生的一切其实并不像我们想象的那样简单。

背后有硬件初始化、固件管理、引导加载程序和内核启动的层层递进。

每一步都至关重要,环环相扣。

日常使用中,我们无需关注这些复杂的细节,但偶尔了解一下还是相当有趣的。

它不仅让我们更清楚地认识到计算机如何为我们服务,也让我们更加能够理解这些技术背后的逻辑。

或许下次,当你再按下电源按钮时,会有一丝敬意打心底蹦出来,为那些默默工作的技术奇迹点个赞。

0 阅读:198

科技新创意

简介:科技助力环保,分享绿色能源