1. BIOS/UEFI 初始化
计算机加电后,BIOS(基本输入输出系统) 或更新的 UEFI(统一可扩展固件接口) 会进行硬件自检(POST),并初始化硬件。随后,固件会按照预设的启动顺序,寻找可启动的设备,并加载该设备主引导记录(MBR)或EFI分区中的引导加载程序(Boot Loader) 。
2. GRUB 引导加载器
在大多数Ubuntu系统上,这个引导加载程序是 GRUB(GRand Unified Bootloader) 。GRUB 会显示一个启动菜单,让用户可以选择不同的内核或操作系统。选择后,GRUB 会将选定的 Linux 内核 以及一个临时的根文件系统镜像(initrd或 initramfs)加载到内存中,然后将控制权交给内核。
/etc/grub.d/ - 各种用于生成grub.cfg的脚本文件,每次update-grub时会执行里面的文件,生成grub.cfg
/etc/default/grub - 改变引导菜单外观的主要配置文件
/boot/grub/grub.cfg 系统引导时读取的文件之一,由其他文件生成的,一般不在这里修改
Intel硬解码绿屏问题
通过修改GRUB,配置显卡GPU选项:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.enable_guc=3 i915.enable_dc=4 i915.enable_fbc=1 i915.enable_psr=0 i915.fastboot=1 i915.reset=2 i915.enable_secure_batch=1 i915.preempt_timeout=2000 i915.request_timeout_ms=8000"
| 参数 | 作用 | 常规值范围 |
|---|---|---|
i915.enable_guc | 加载并启用GuC(图形微控制器)和HuC(HEVC微控制器)固件,用于任务调度、电源管理和硬件解码。 | 0(禁用) 1(仅启用HuC解码) 2(仅启用GuC提交) 3(两者都启用) |
i915.enable_dc | 控制显示省电(Display C-states)级别,允许显示器在空闲时进入更深节能状态。 | 0(关闭) 1-2(不同级别) |
i915.enable_fbc | 启用帧缓冲压缩,通过压缩显存中的数据来降低功耗(主要在静态画面时)。 | 0(禁用) 1(启用) |
i915.enable_psr | 启用面板自刷新,允许显示器在内容未变化时从本地缓冲区刷新,极大省电。 | 0(禁用) 1(启用) |
i915.fastboot | 尝试跳过部分启动时低层初始化,以加快系统启动速度。 | 0(禁用) 1(启用) |
i915.reset | 定义GPU驱动在检测到引擎挂起(GPU HANG)时的重置策略。 | 0(禁用自动重置) 1(仅重置出错的引擎) 2(尝试主动重置整个GPU) |
i915.enable_secure_batch | 启用安全批处理缓冲区,这是一项安全功能,用于限制GPU对内存的访问。 | 0(禁用) 1(启用) |
i915.preempt_timeout | GPU任务抢占超时时间(单位:毫秒)。如果高优先级任务无法在规定时间内抢占低优先级任务,驱动将认为GPU挂起。 | 默认值通常为 640。 |
i915.request_timeout_ms | GPU请求的整体超时时间(单位:毫秒)。如果一个渲染或计算请求超过此时间未完成,将触发恢复流程。 | 默认值通常为 20000(20秒)。 |
3. Kernel 内核初始化与系统管理进程
内核接管后,
- start_kernel处理由引导程序(如 GRUB)或 BIOS/UEFI 传递给内核的启动参数(
command_line),创建0号进程(或init_task),映射内存。 - rest_init->kernel_init内核切换到用户空间
- 加载启动真实根文件系统所需的核心硬件驱动(如磁盘控制器、文件系统驱动等),挂载根文件系统(
/) - 创建1号进程(第一个用户空间守护进程
/sbin/init)。在现代 Ubuntu 版本中,这个进程通常是 systemd(其进程ID为1)。它取代了传统的 SysV init 和 Upstart,负责管理后续的所有启动过程。 - 创建2号进程(
kthreadd,负责管理内核线程)
- 加载启动真实根文件系统所需的核心硬件驱动(如磁盘控制器、文件系统驱动等),挂载根文件系统(
4. Systemd 运行级别与系统服务
Systemd(/lib/systemd) 会启动预设的 目标(target) ,这类似于传统的运行级别(runlevel)。例如,图形化多用户模式通常对应 graphical.target(传统运行级别5)。在这个过程中,systemd 会并行启动该目标所依赖的各项系统服务,如网络、日志、调度任务等,极大地加快了启动速度。
- 启动/lib/systemd/system/下的所有Unit文件(
.target和.service文件),第一个是default.target - 初始化系统:systemd
- 管理服务周期:systemctl
- 状态查询:systemctl status
- 日志管理:journalctl
- 网络配置:systemd-networkd
systemd会运行systemd-sysv-generator,这个工具在/etc/init.d/目录中寻找所有可执行脚本。对于每个找到的脚本,生成器会为其在 systemd 的临时运行时目(如/run/systemd/generator.late/)中创建一个对应的.service单元文件- rc-local.service启用rc-local.service,并调用/etc/rc.local
- 查看已经加载的服务:systemctl list-units --type=service
- 查看开机自启动状态:systemctl list-unit-files --type=service
5. LoginManager 显示管理器与用户登录
当系统服务启动完毕后,显示管理器(Display Manager) ,如 GDM 或 LightDM,会启动并显示图形化登录界面。用户输入正确的用户名和密码后,显示管理器会验证凭据并启动该用户的桌面环境会话,最终呈现出完整的 Ubuntu 桌面