openKylin论坛
标题:
【openKylin笔记】系统启动流程
[打印本页]
作者:
okylin
时间:
2022-12-26 13:29
标题:
【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引导程序界面。
(, 下载次数: 18)
上传
点击文件名下载附件
下载积分: 麒麟币 -1
按照提示,按e键可以编辑启动项。启动项配置中有两个重要的参数:
linux /vmlinuz-5.15.0-23-generic
initrd /initrd.img-5.15.0-23-generic<div></div>
复制代码
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
复制代码
(, 下载次数: 18)
上传
点击文件名下载附件
下载积分: 麒麟币 -1
作者:
觉醒勇敢
时间:
2022-12-26 20:55
麒麟的界面好漂亮啊
欢迎光临 openKylin论坛 (https://forum.openkylin.top/)
Powered by Discuz! X3.3