openKylin论坛

 找回密码

【openKylin笔记】系统启动流程 [复制链接]

本帖最后由 okylin 于 2022-12-26 13:45 编辑

本文转载自:https://gitee.com/latomic/openkylin-notes/blob/master/系统启动流程.md

系统启动流程

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

  • 运行主板集成的启动程序(UEFI)
  • 运行启动盘上的引导程序(GRUB)
  • 运行Linux内核
  • 运行系统初始化及管理程序(systemd)
  • 运行显示管理器(LightDM)

运行主板集成的启动程序(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键可以编辑启动项。启动项配置中有两个重要的参数:
  1. linux  /vmlinuz-5.15.0-23-generic
  2. initrd /initrd.img-5.15.0-23-generic<div></div>
复制代码

linux参数告诉GRUB Linux内核文件所在的路径。initrd文件里面包含了内核启动时所需的重要文件,例如一些设备驱动。可以通过lsinitramfs命令查看initrd文件中的内容。
  1. $ lsinitramfs /boot/initrd.img-5.15.0-23-generic
  2. kernel/x86/microcode/AuthenticAMD.bin
  3. kernel/x86/microcode/GenuineIntel.bin
  4. ...
复制代码

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

运行Linux内核

Linux内核的启动日志可以通过dmesg命令查看。在日志中,我们可以看到Linux内核加载后,会检测各种硬件设备,然后将initrd中的内容挂在到根目录/,并运/init程序。
  1. $ dmesg
  2. [    0.000000] Linux version 5.15.0-23-generic ... #23ok3-KYLINOS
  3. ...
  4. [    2.506711] Trying to unpack rootfs image as initramfs...
  5. ...
  6. [    4.204096] Run /init as init process
  7. ...
复制代码

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

  3. for inittest in /sbin/init /etc/init /bin/init /bin/sh; do
  4.     if validate_init "${inittest}"; then
  5.         init="${inittest}
  6.         break
  7.     fi
  8. done

  9. maybe_break init
复制代码

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

openKylin操作系统中,真正的init位于/sbin目录下。openKylin选择了目前主流的系统初始化及管理程序systemd作为系统的init程序。
  1. $ ls -l /sbin/init
  2. lrwxrwxrwx 1 root root 20 7月  16 02:24 /sbin/init -> /lib/systemd/systemd
复制代码
systemd是系统启动后运行的第一个程序,进程号为1。
  1. $ ps -p 1
  2.     PID TTY          TIME CMD
  3.       1 ?        00:00:02 systemd
复制代码

systemd与传统的init程序相比有很多优点。它可以很好的并行初始化不同的Linux服务,以便缩短系统的启动时间。可通过systemd-analyze命令来查看系统的启动时间。也可以额外添加blame参数来查看哪些服务启动时间比较长。
  1. $ systemd-analyze
  2. Startup finished in 6.880s (kernel) + 2.992s (userspace) = 9.872s
  3. graphical.target reached after 2.905s in userspace
复制代码

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

运行显示管理器(LightDM)

openKylin所使用的显示管理器是LightDM。
  1. /etc/systemd/system/display-manager.service -> /lib/systemd/system/lightdm.service
复制代码

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

  2. F greeter-session=ukui-greeter
  3. G user-session=ukui-wayland
复制代码
openKylin-ukui-greeter.png


openKylin-grub.png
发表于 2022-12-26 13:29:33
回复

使用道具 举报

【openKylin笔记】系统启动流程 [复制链接]

麒麟的界面好漂亮啊
发表于 2022-12-26 20:55:24
回复

使用道具 举报

openKylin

GMT+8, 2024-4-17 00:00 , Processed in 0.070427 second(s), 29 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表