openKylin系统的启动分为以下几个步骤。这些步骤也基本适用于其他Linux系统。
目前主流的电脑中,主板集成的一般是统一可扩展固件接口UEFI (Unified Extensible Firmware Interface)。它是电脑硬件与操作系统软件之间的接口。在较老的电脑中使用的则是BIOS (Basic Input/Output System)。UEFI运行后,会按照设置去寻找启动盘。启动盘可能是硬盘、光盘、或者U盘。也可以选择通过网络引导系统的启动。当UEFI寻找到启动盘后,会运行启动盘上面的引导程序。
Linux系统的引导程序一般位于/boot
分区。openKylin选择使用的引导程序是GRUB (GRand Unified Bootloader)。另外一个Linux上常见的引导程序则是LILO (Linux Loader)。而Windows操作系统使用的引导程序则是NTLDR (NT loader)。使用引导程序的一个好处是,如果你的电脑上安装了多个操作系统,你可以在引导程序的界面上选择接下来要启动哪个系统。
在系统启动时一直按住Shift
键则会出现如图所示的GRUB引导程序界面。
按照提示,按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内核的启动日志可以通过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
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)的服务。它将为用户提供图形化的桌面服务。
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。