1 Star 1 Fork 0

latomic / openKylin笔记

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
系统启动流程.md 4.66 KB
一键复制 编辑 原始数据 按行查看 历史
latomic 提交于 2022-12-26 16:01 . 添加系统启动流程

系统启动流程

openKylin系统的启动分为以下几个步骤。这些步骤也基本适用于其他Linux系统。

运行主板集成的启动程序(UEFI)

目前主流的电脑中,主板集成的一般是统一可扩展固件接口UEFI (Unified Extensible Firmware Interface)。它是电脑硬件与操作系统软件之间的接口。在较老的电脑中使用的则是BIOS (Basic Input/Output System)。UEFI运行后,会按照设置去寻找启动盘。启动盘可能是硬盘、光盘、或者U盘。也可以选择通过网络引导系统的启动。当UEFI寻找到启动盘后,会运行启动盘上面的引导程序。

运行启动盘上的引导程序(GRUB)

Linux系统的引导程序一般位于/boot分区。openKylin选择使用的引导程序是GRUB (GRand Unified Bootloader)。另外一个Linux上常见的引导程序则是LILO (Linux Loader)。而Windows操作系统使用的引导程序则是NTLDR (NT loader)。使用引导程序的一个好处是,如果你的电脑上安装了多个操作系统,你可以在引导程序的界面上选择接下来要启动哪个系统。

在系统启动时一直按住Shift键则会出现如图所示的GRUB引导程序界面。

openKylin-grub.png

按照提示,按e键可以编辑启动项。启动项配置中有两个重要的参数:

linux  /vmlinuz-5.15.0-23-generic
initrd /initrd.img-5.15.0-23-generic

linux参数告诉GRUB Linux内核文件所在的路径。initrd文件里面包含了内核启动时所需的重要文件,例如一些设备驱动。可以通过lsinitramfs命令查看initrd文件中的内容。

$ lsinitramfs /boot/initrd.img-5.15.0-23-generic
kernel/x86/microcode/AuthenticAMD.bin
kernel/x86/microcode/GenuineIntel.bin
...

GRUB会将这两个文件加载到内存中,并将控制权转交给Linux内核。

运行Linux内核

Linux内核的启动日志可以通过dmesg命令查看。在日志中,我们可以看到Linux内核加载后,会检测各种硬件设备,然后将initrd中的内容挂在到根目录/,并运/init程序。

$ dmesg
[    0.000000] Linux version 5.15.0-23-generic ... #23ok3-KYLINOS
...
[    2.506711] Trying to unpack rootfs image as initramfs...
...
[    4.204096] Run /init as init process
...

init是英文单词initialization的缩写,意思是初始化。/init是一个Shell脚本,它做的最重要的事情之一是检测系统硬盘上真正的init的安装路径并运行它。

#!/bin/sh
...

for inittest in /sbin/init /etc/init /bin/init /bin/sh; do
    if validate_init "${inittest}"; then
        init="${inittest}
        break
    fi
done

maybe_break init

运行系统初始化及管理程序(systemd)

openKylin操作系统中,真正的init位于/sbin目录下。openKylin选择了目前主流的系统初始化及管理程序systemd作为系统的init程序。

$ ls -l /sbin/init
lrwxrwxrwx 1 root root 20 7月  16 02:24 /sbin/init -> /lib/systemd/systemd

systemd是系统启动后运行的第一个程序,进程号为1

$ ps -p 1
    PID TTY          TIME CMD
      1 ?        00:00:02 systemd

systemd与传统的init程序相比有很多优点。它可以很好的并行初始化不同的Linux服务,以便缩短系统的启动时间。可通过systemd-analyze命令来查看系统的启动时间。也可以额外添加blame参数来查看哪些服务启动时间比较长。

$ systemd-analyze 
Startup finished in 6.880s (kernel) + 2.992s (userspace) = 9.872s 
graphical.target reached after 2.905s in userspace

在众多的服务当中,有一个叫显示管理器(display manager)的服务。它将为用户提供图形化的桌面服务。

运行显示管理器(LightDM)

openKylin所使用的显示管理器是LightDM

/etc/systemd/system/display-manager.service -> /lib/systemd/system/lightdm.service

LightDM是一款轻量的、可扩展的显示管理器。它允许用户提供自己的Greeter欢迎界面。到这一步,系统的启动就基本告一段落。欢迎我们的是openKylin桌面系统的登陆界面:ukui-greeter

$ lightdm --show-config

F greeter-session=ukui-greeter
G user-session=ukui-wayland

openKylin-ukui-greeter

1
https://gitee.com/latomic/openkylin-notes.git
git@gitee.com:latomic/openkylin-notes.git
latomic
openkylin-notes
openKylin笔记
master

搜索帮助