guide.deepin.org/docs/deepin进阶教程/3.系统初始化/3.1.启动过程概述.md
xzl 9d8e013626
docs:update docs (#19)
* docs: update docs

Log:

* docs: update docs

Log:
2023-03-02 15:20:40 +08:00

86 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 3.1. 启动过程概述
你一定好奇从计算机开机到进入桌面,到底发生了什么?这篇文章将会带你了解一下启动过程。
计算机启动就像一个多级火箭发射的过程,每一级都有自己的任务,上一级完成任务后,下一级才能开始工作。这里我们将会从最底层的硬件开始,一步步的了解启动过程。
## 3.1.1. 第一级BIOSBasic Input/Output System
BIOS是计算机的基本输入输出系统它是计算机的第一级启动程序它的主要功能是检测计算机的硬件配置然后将控制权交给操作系统。
不过在现在的计算机中BIOS已经不是唯一的启动程序了UEFI[统一可扩展固件接口](https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E5%8F%AF%E6%89%A9%E5%B1%95%E5%9B%BA%E4%BB%B6%E6%8E%A5%E5%8F%A3/22786233)也是一种启动程序它的功能和BIOS类似但是它的功能更加强大它可以加载更多的操作系统比如我们的deepin系统就是通过UEFI启动的。
还有一种启动程序叫做uboot它和UEFI类似但是不常见于我们日常使用的计算机中,主要存在于国产计算机和部分基于ARM的单板机中。
## 3.1.2. 第二级:引导加载程序
引导加载程序是计算机的第二级启动程序,它的主要功能是加载操作系统内核,然后将控制权交给操作系统内核。
在我们deepin系统中引导加载程序是grub2由上一级UEFI加载。grub2加载内核所以你可以在grub中选择不同的内核启动如果我们在系统里面升级了内核就可以通过grub来选择启动新的内核。
GRUB2 首先读取 ESP 分区,使用 "/boot/efi/EFI/deepin/grub.cfg"里面 search.fs_uuid 指定的 UUID 来确定 GRUB2 菜单配置文件 "/boot/grub/grub.cfg" 所在的分区。
::: danger 别动
如果你不理解grub的配置文件不要随意修改否则可能会导致系统无法启动。对于一般用户我们推荐使用deepin的启动管理器来管理启动项你可以在控制中心找到它。
:::
::: tip
grub支持修改主题不过可能导致系统无法引导我建议你这么做之前备份好资料并且准备一个liveCD系统以防万一。
:::
GRUB2 菜单配置文件的关键部分看起来像:
```
menuentry 'deepin GNU/Linux' ... {
load_video
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1
echo 'Loading Linux 5.18.0-amd64 ...'
linux /boot/vmlinuz-5.18.0-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.18.0-amd64
}
```
/boot/grub/grub.cfg 文件上面部分菜单条目意义
| 设置 | 值 |
|:---------------------:|:---------------------------------------------------------:|
| GRUB2 模块加载 | gzio, part_gpt, ext2 |
| 使用的根文件系统分区 | 由 UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 指定的分区标识 |
| 内核镜像文件在根文件系统中的路径 | /boot/vmlinuz-5.18.0-amd64 |
| 使用的内核启动参数 | "root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet" |
| initrd 镜像文件在根文件系统中的路径 | /boot/initrd.img-5.18.0-amd64 |
::: tip
通过删除 "/boot/grub/grub.cfg" 里面的 quiet ,你能够查看内核启动日志信息。为固化这个修改,请编辑 "/etc/default/grub"里的 "GRUB_CMDLINE_LINUX_DEFAULT="quiet"" 行
:::
::: tip
通过设置在“ /etc/default/grub” 的 GRUB_BACKGROUND 变量指向到图像文件,或者把图像文件本身放入 “/boot/grub/”,你能够定制 GRUB 的启动图像。
:::
参见 “info grub” 及 grub-install(8)。
## 3.1.3. 第三级:内核
内核是计算机的第三级启动程序,它的主要功能是加载操作系统的驱动程序,然后将控制权交给操作系统的第一个进程。
在我们deepin系统中内核是linux内核由上一级grub2加载。内核加载驱动程序所以你可以在内核启动参数中指定加载哪些驱动程序比如我们可以通过内核启动参数来指定加载nvidia显卡驱动。
## 3.1.4. 第四级:第一个进程
第一个进程是操作系统的第一个进程,它的主要功能是加载操作系统的其他进程,然后将控制权交给操作系统的第一个用户进程。
如果你学习过操作系统的进程管理你应该知道操作系统的第一个进程叫做init进程它的PID是1它的父进程是0它的父进程是内核。
不过在现代的linux系统中init进程已经不是唯一的第一个进程了它的替代者是systemdsystemd是一个守护进程它的主要功能是管理系统中的所有进程。
systemd是一个很有野心的软件它目的是替换掉linux系统里面很多不好用的软件目标是成为linux世界里面最重要的组件之一。
[systemd官网](https://systemd.io/)
systemd会启动一系列服务 (service),这些服务会在后台运行,比如网络服务、打印服务、文件系统服务、用户管理服务、安全服务、时间服务、日志服务、电源管理服务、蓝牙服务、声音服务、打印服务、磁盘管理服务、文件系统管理服务、系统监控服务。
当显示管理器(DisplayManager)被启动时你就可以看到熟悉的登陆页面了。deepin使用的是LightDM作为显示管理器你可以在显示管理器切换到其他桌面环境。