linux 内核核心初始化 📅 发布时间:2026/7/10 23:05:25 👁️ 浏览次数: start_kernel()是 Linux 内核最核心的初始化函数init/main.c几乎所有内核核心子系统的初始化都从这里触发函数内按依赖顺序调用一系列初始化函数整体可拆分为8 个关键阶段从核心到外围逐步展开阶段 1内核基础环境初始化最核心的 “地基”核心任务初始化内核运行的最基础环境无依赖、最优先。关键函数setup_arch()架构相关的通用初始化解析 Bootloader 传递的参数如内存大小、cmdline、初始化页表、识别 CPU / 硬件smp_setup_processor_id()多核 CPU 的核 ID 初始化区分主核 / 从核仅主核执行后续全部初始化从核等待唤醒boot_init_stack_canary()初始化栈保护Stack Canary防止缓冲区溢出page_address_init()初始化物理地址→虚拟地址的映射关系为内存管理做准备。核心目标让内核自身能稳定运行具备内存地址映射能力。阶段 2核心子系统初始化内核 “骨架”核心任务初始化内核最核心的子系统这些子系统是其他所有功能的依赖进程管理、内存管理、中断管理三大核心首次初始化。关键函数trap_init()初始化异常 / 陷阱处理x86 的中断门 / 陷阱门ARM 的异常向量表让内核能处理 CPU 异常、系统调用mm_init()初始化内存管理子系统创建内核页表、初始化伙伴系统buddy system物理内存分配的核心、slab 分配器内核小内存分配kmem_cache_init()初始化 slab/slub/slob 分配器优化内核小内存分配的性能。sched_init()初始化进程调度子系统创建调度器核心结构runqueue运行队列、初始化默认调度策略CFS 完全公平调度✅重点此阶段仅初始化调度器框架还未创建任何进程irq_init()初始化中断管理子系统初始化中断控制器如 APIC/x86、GIC/ARM、注册中断处理框架开启硬件中断init_IRQ()架构相关的中断初始化绑定中断号与处理函数的映射。核心目标构建内核的三大核心骨架进程、内存、中断具备中断处理、内存分配、调度框架能力。阶段 3内核服务与锁机制初始化“通信与同步基础”核心任务初始化内核的同步机制、调试机制、核心服务保证内核多线程 / 多核的安全运行。关键函数kernel_init_freeable()核心封装函数后续大部分初始化都在这个函数内执行为了后续释放初始化内存lock_init()初始化内核同步锁机制自旋锁 spinlock、互斥锁 mutex、信号量 semaphore解决多核 / 多进程的资源竞争debug_objects_init()初始化内核调试对象用于检测内存泄漏、锁滥用rcu_init()初始化 RCU读 - 拷贝更新内核高性能同步机制专为读多写少场景设计init_timers()/hrtimer_init()初始化定时器子系统提供内核时间管理延时、定时任务。核心目标让内核具备多核同步、定时调度、调试监控能力为后续多任务运行做准备。阶段 4进程管理体系初始化创建第一个内核进程“进程之根”核心任务创建 Linux 内核的第一个进程构建进程管理的根节点Linux 的所有进程 / 线程都从这个进程派生。关键函数 核心节点fork_init()初始化进程创建的核心参数如进程 PID 最大值、进程资源限制pid_init()初始化 PID 管理子系统创建 PID 命名空间、PID 映射表kernel_thread_init()初始化内核线程创建框架最核心rest_init()start_kernel()的最后一个调用函数永不返回这是进程创建的关键rest_init()内会创建3 个核心内核进程也是 Linux 进程树的根idle 进程0 号进程swapperLinux第一个进程由主核的start_kernel()直接演变而来无 fork是进程 0PID0核心作用是当 CPU 无其他进程运行时执行 idle 循环空转每个 CPU 核心都有一个专属的 idle 进程kthreadd 进程2 号进程Linux第一个通过 fork 创建的进程PID2内核线程的父进程所有后续内核线程如内存回收、磁盘调度都由 kthreadd 创建和管理init 进程1 号进程内核态→用户态的关键进程PID1又称 “始祖进程”是所有用户态进程的父进程rest_init()会通过execve()加载用户态的init/systemd程序进入用户态初始化。核心目标构建 Linux 的进程树根节点创建 0/1/2 号核心进程完成从 “无进程” 到 “进程管理体系” 的跨越。关键特点start_kernel()执行完rest_init()后主核的执行流就交给了idle 进程0 号后续初始化由新创建的内核进程执行。阶段 5多核 CPU 初始化SMP 初始化可选核心任务如果是多核 CPU唤醒从核副核并为每个从核初始化运行环境。关键函数smp_init()多核初始化主函数向从核发送 IPI处理器间中断唤醒从核从核被唤醒后执行secondary_startup()初始化自身的栈、页表、中断、调度器最终创建自身的idle 进程0 号并进入调度循环等待任务调度。核心目标让所有 CPU 核心都加入内核调度体系具备多核并行处理能力。核心特点仅主核执行完整的start_kernel()从核仅执行精简的初始化最终所有核心都由调度器统一管理。阶段 6设备与驱动核心初始化“硬件抽象层基础”核心任务初始化内核的设备模型和驱动核心框架为后续硬件驱动加载做准备此阶段仅初始化框架不加载具体设备驱动。关键函数device_init()初始化 Linux 设备模型核心kobject、kset、subsystem构建硬件设备的层级关系总线 - 设备 - 驱动bus_init()初始化总线子系统如 PCI、USB、I2C为设备和驱动的匹配做准备driver_init()初始化驱动核心注册驱动模型的核心回调函数核心目标构建 Linux统一的设备驱动模型让后续能通过 “总线 - 设备 - 驱动” 的匹配机制自动加载硬件驱动。阶段 7外围子系统与内核线程初始化“内核功能完善”核心任务初始化内核的外围子系统文件系统、网络、块设备等并通过kthreadd创建各类内核线程后台服务完善内核功能。关键函数 核心子系统vfs_caches_init()初始化虚拟文件系统VFSLinux 文件系统的抽象层为后续挂载根文件系统做准备blk_dev_init()初始化块设备子系统磁盘、SD 卡等创建块设备调度器如 CFQ、mq-deadlinenet_init()初始化网络子系统创建网络协议栈框架TCP/IP、UDP、网络设备接口workqueue_init()初始化工作队列内核的异步任务处理框架各类内核线程创建如kswapd内存回收、kjournald日志、khubdUSB 总线等均由kthreadd2 号进程fork 创建。核心目标让内核具备文件操作、磁盘 IO、网络通信等完整能力各类后台内核线程开始运行维护系统状态。阶段 8根文件系统挂载与用户态过渡“内核→用户态的最后一步”核心任务由1 号 init 进程执行挂载根文件系统/加载用户态的初始化程序完成从内核态到用户态的过渡核心初始化结束。关键流程由 init 进程PID1执行解析内核启动参数root找到根文件系统的设备如/dev/mmcblk0p1、/dev/sda1挂载根文件系统支持 ext4、btrfs、tmpfs 等这是用户态运行的基础所有用户程序都在根文件系统中查找并执行用户态的初始化程序传统系统/sbin/initSysVinit现代系统/usr/lib/systemd/systemdsystemd主流、/sbin/openrc等内核核心初始化正式结束后续的系统初始化如启动服务、挂载分区、创建用户进程由用户态的 init 程序完成。核心初始化的关键特性主核独担从核等待仅主核执行完整的start_kernel()从核直到 SMP 阶段才被唤醒且仅执行精简初始化依赖顺序严格先初始化无依赖的基础环境寄存器、页表再初始化核心子系统中断、内存、调度最后初始化外围子系统文件、网络避免依赖缺失0/1/2 号进程是根Linux 所有进程均派生自这三个进程进程树无环最终孤儿进程 / 僵尸进程都会被 1 号 init 进程收养内核态→用户态的过渡仅一次通过 1 号 init 进程的execve()完成后续用户态进程的创建均通过fork/exec不再回到内核态初始化架构无关的通用化除了早期汇编和setup_arch()后续 90% 的初始化代码是架构无关的这是 Linux 跨平台的核心原因。内核初始化的调试方式如果想深入分析内核初始化流程可通过以下方式调试 / 查看内核启动日志dmesgdmesg | head -100可查看内核初始化的所有打印信息对应start_kernel()内的各类初始化函数内核配置开启调试配置内核时开启CONFIG_DEBUG_KERNEL/CONFIG_INITCALL_DEBUG会打印每个初始化函数的执行顺序和耗时gdb 调试内核通过 QEMUgdb 挂载内核断点打在start_kernel()/rest_init()单步跟踪执行流程内核源码注释init/main.c的start_kernel()函数内有详细的注释标注了每个初始化步骤的作用。核心初始化的关键节点Linux 内核核心初始化的核心脉络可通过 5 个关键节点串联抓住这 5 个节点就抓住了整体流程start_kernel()通用初始化总入口所有架构汇聚于此三大核心子系统初始化trap_init()mm_init()sched_init()构建内核骨架rest_init()创建 0/1/2 号核心进程进程树的根SMP 初始化唤醒多核实现多核并行1 号 init 进程挂载根文件系统内核态→用户态核心初始化结束。总结Linux 内核核心初始化的核心是从裸机到内核态、从核心到外围、从无进程到进程管理体系、最终到用户态的逐步过渡核心要点可概括为 3 点总入口是start_kernel()架构相关差异仅在早期汇编和setup_arch()0/1/2 号进程是进程树的根rest_init()是进程创建的关键核心初始化的终点是 1 号 init 进程挂载根文件系统并进入用户态后续由用户态程序完成系统初始化。
全网最全 9个AI论文平台测评:继续教育毕业论文写作必备工具推荐 随着人工智能技术的快速发展,AI写作工具在学术领域的应用越来越广泛,尤其在继续教育领域,毕业论文写作成为许多学员必须面对的挑战。面对选题困难、文献资料繁杂、格式要求严格等问题,一款高效、专业的AI论文平台显得尤为重要。为… 2026/7/10 4:02:08
科研党收藏!9个一键生成论文工具深度测评:专科生毕业论文+开题报告写作神器推荐 对于专科生来说,毕业论文和开题报告的撰写往往是一项既耗时又复杂的任务。面对繁杂的文献资料、格式要求以及内容逻辑的梳理,许多同学常常感到无从下手。而随着AI技术的不断进步,越来越多的写作工具开始涌现,为学术写作提供了全新… 2026/7/9 17:53:39
2026必备!10个AI论文工具测评:本科生毕业论文与科研写作全攻略 随着人工智能技术的不断突破,AI写作工具正逐步成为高校师生和科研人员不可或缺的得力助手。2026年,论文写作与科研创作的效率提升已成为学术界关注的焦点,而市面上各类AI工具层出不穷,功能各异、适用场景不一,让不少学… 2026/7/9 12:07:27
TypeScriptCompiler编译器测试框架:自动化测试套件与错误检测机制终极指南 TypeScriptCompiler编译器测试框架:自动化测试套件与错误检测机制终极指南 【免费下载链接】TypeScriptCompiler TypeScript Compiler (by LLVM) 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScriptCompiler TypeScriptCompiler是一个基于LLVM/MLIR构建… 2026/7/11 17:28:38
编程器固件 MAC 地址修复:3 种方法解决刷机后地址冲突与丢失 编程器固件 MAC 地址修复:3 种方法解决刷机后地址冲突与丢失当技术人员进行路由器硬改、救砖或批量刷机时,经常会遇到一个棘手的问题:刷写编程器固件后,设备的 MAC 地址出现重复或丢失。这不仅会导致网络冲突,还可能影… 2026/7/11 17:22:36
CANN稀疏矩阵GPU测试 gpu_test-ops-sparse 【免费下载链接】cann-ops-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-ops-competitions SDDMM / SpGEMM / SpSM 的 GPU 内部验证࿱… 2026/7/11 17:20:36
Vulnhub Lampiao靶机:3种不同路径的渗透测试思路对比与复盘 Lampiao靶机渗透测试:多路径思维与实战决策树1. 靶机环境与渗透测试方法论概述Lampiao是Vulnhub平台上经典的渗透测试靶机,模拟了运行Drupal 7.54内容管理系统的Ubuntu服务器。与常规的线性渗透流程不同,本次我们将采用多路径渗透思维&#x… 2026/7/11 17:20:36
网页在 Edge 浏览器滚动卡顿?从 Performance 录制到根治的完整优化全过程 网页在 Edge 浏览器滚动卡顿?从 Performance 录制到根治的完整优化全过程 前言 最近我的网站首页在 Edge 浏览器上滚动时严重掉帧,鼠标滚轮一顿一顿的,体验极差,但是在chrome浏览器上就没有这个问题。我百度了很久,搜到的文章基本都是泛泛而谈"减少 DOM 操作"… 2026/7/11 17:18:35
功能测试报告模板(最常用的OA办公系统为例) 本测试报告模板以通用办公系统为例,涵盖了从引言、测试概述到结论分析的完整结构。在实际工作中,测试报告是项目交付的关键文档,用于评估软件质量、指导缺陷修复和风险决策。在面试中,是否写过测试报告、测试报告包含哪些内容也会经常被问到,一份结构清晰、数据详实的测试… 2026/7/11 17:14:34
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/11 14:53:30
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/11 15:29:59