核心总纲
Linux操作系统由内核 + 用户态程序、工具、配置、驱动共同组成。硬盘只负责持久存放这些文件;真正运行,必须把代码加载到内存。内核是整套系统的核心资源管理者;驱动是内核与硬件的翻译;所有业务软件无权直接操控硬件,必须通过内核中转。
一、安装系统:系统被放在哪里?
安装Linux,本质是把一系列文件写入硬盘的不同分区,硬盘断电数据保留,但存放在硬盘里的文件只是静态副本,不会自动运行 。
分区存放内容:
- EFI分区(UEFI启动):存放引导文件,让主板能找到GRUB;
- /boot:存放内核镜像
vmlinuz、initramfs临时文件系统; - 根分区
/:系统主体,包含命令、配置文件、/lib/modules(各个硬件对应的驱动模块ko文件)、各类服务程序; - swap分区:交换空间,内存压力大时临时使用。
区分:发行版(Ubuntu/Rocky)≠ 内核。发行版 = 内核 + 一大堆配套工具、服务。单独内核没法登录、敲命令。
二、开机完整流程:从按下电源到系统稳定
-
主板固件(BIOS/UEFI)先启动
固件固化在主板芯片上,不在硬盘。上电先做POST自检,检查CPU、内存、硬盘等硬件是否正常;然后按启动顺序寻找可引导设备,找到GRUB引导程序,把GRUB加载进内存,把CPU控制权交给GRUB。此时Linux内核还没有运行。
-
GRUB引导程序
GRUB就是开机看到的内核选择菜单。它的任务:从硬盘/boot里读取内核vmlinuz + initramfs,加载到内存,之后把控制权交给内核。
- initramfs:内核早期的微型临时文件系统,自带磁盘、RAID卡临时驱动。
- 原因:刚启动的原生内核,还没有加载硬盘驱动,读不到硬盘上完整系统,必须靠initramfs里面的临时驱动先打开硬盘。
- 内核初始化、识别硬件、加载驱动
内核拿到CPU控制权后,先初始化CPU、中断、虚拟内存;依靠initramfs里的驱动识别硬盘,执行switch_root,抛弃临时的initramfs,挂载硬盘上真实的根文件系统。
挂载根之后,内核扫描PCI总线上所有硬件(网卡、SSD、RAID卡、USB设备),匹配硬件ID,从/lib/modules/对应内核版本/加载对应的驱动模块(ko)。
驱动加载成功,内核和硬件之间的通信通道正式打通。硬件完成工作后,通过中断通知内核。
驱动有两种形式:① 内置驱动:编译时直接打包进vmlinuz内核;② 可加载模块ko:独立文件,可以用
lsmod/insmod/rmmod动态加载、卸载,节省内存。驱动运行在内核态(最高权限)。
- 启动第一个用户进程 systemd(PID=1)
内核只管底层硬件和资源调度,不负责启动业务服务。内核准备就绪后,拉起systemd,它相当于前台总管,按顺序执行:挂载其他分区、配置网卡IP、启动ssh、日志、定时任务、开启登录终端。
等所有依赖服务启动完成,系统进入稳定运行状态,等待用户登录、运行程序。
三、驱动:定义、工作原理
驱动是跑在内核态的一段小程序,内核和硬件之间的翻译。
- 内核只下发标准化指令:读、写、打开设备;
- 不同厂商硬件指令、寄存器、时序各不相同,内核看不懂硬件原生信号;
- 驱动双向翻译:
正向:内核下发通用指令 → 驱动翻译成硬件识别的电信号,写入硬件寄存器,指挥硬件干活;
反向:硬件完成任务,触发中断告诉CPU → 驱动读取硬件原始数据,翻译成内核能识别的数据结构,上交内核。
⚠️ 重要风险:驱动和内核在同一个地址空间,驱动bug、版本不匹配,会直接造成内核panic、整机卡死;普通用户程序崩溃,仅仅自身进程退出,不会影响整机。
四、系统稳定运行之后,整套交互链路
内存中常驻两大块:
- 内核:持续管理CPU调度、内存、pagecache、IO队列、网络协议栈、中断;
- 用户态进程:bash、nginx、MySQL、各类业务程序。
完整请求链路(比如程序读取一个文件):
应用软件(用户态,权限受限) → 发起系统调用syscall(举手向内核申请) → 内核收到请求 → 调用对应驱动下发指令 → 驱动控制硬件读取数据
数据原路返回:硬件 → 驱动翻译原始信号 → 内核 → 拷贝数据给应用程序
通俗一句话:应用不能直接摸硬件,所有硬件操作都必须委托内核,由驱动完成和硬件的通信。
五、几个关键概念补充
- 系统调用(syscall):用户进程进入内核的唯一正规入口,
strace可以抓取; - 中断:硬件主动通知内核的机制,比如网卡收到包、磁盘IO完成;
- 内核态vs用户态:内核是最高权限Ring0,可以访问全部内存、硬件;用户态程序权限隔离,做了安全限制;
- 版本强绑定:驱动模块ko必须和当前运行的内核版本严格匹配,版本不一致会加载失败。
六、常见故障对应这个流程
- 引导损坏:UEFI找不到GRUB,开机黑屏;
- 卡在initramfs:临时工具箱缺少磁盘/RAID驱动,识别不到根分区;
- 网卡有硬件信息但是无法使用:没有匹配的网卡驱动;
- 内核panic、服务器直接重启:内核本身或者驱动代码异常;
- OOM killer杀进程:内存资源耗尽,内核按照策略杀死进程释放内存。