☰
25-内核启动流程-head.S到start_kernel
2026/10/17 8:09:23 网站建设 项目流程

文章目录

    • 一、概述
    • 二、形象比喻:航天飞机发射倒计时
    • 三、内核启动流程图
    • 四、U-Boot 传递给内核的约定
    • 五、head.S 关键步骤源码分析
      • __create_page_tables 详解
    • 六、__mmap_switched:汇编到 C 的桥梁
    • 七、head.S 阶段的常见失败场景
      • 如何调试 head.S 阶段问题
    • 八、Image vs zImage:两种内核格式的差异
    • 📝 本章小结
    • 🏠 课后练习

这一章是全课程技术密度最高的一章,讲内核启动流程,从 head.S 的第一行汇编一直讲到 start_kernel 的第一行 C 代码。建议分两次听:第一次听"宏观流程",也就是第二到第六节,先建立全景;第二次再"钻源码",第五、六节逐行看。汇编细节别指望一次记住,重点是知道"卡在某步该查哪"–这就是本章的诊断价值。全章大约 35 到 40 分钟。学完这一章,你就能诊断 90% 的启动失败问题。

开讲前先把四个学习目标念一遍,带着听。第一,U-Boot 跳转到内核时,CPU 寄存器 r0、r1、r2 是什么状态?第二,head.S 如何验证 CPU 和 DTB 是否有效?第三,为什么需要创建临时页表?恒等映射和内核映射分别解决什么问题?第四,RK3506 的内核为什么是压缩的?zImage 和 Image 在启动流程上有什么本质区别?再次强调,学完不是要你会写汇编,而是要会判断"卡在哪一步、查什么"。

一、概述

内核启动流程是系统移植中最重要的知识之一。理解从head.S(第一行汇编)到start_kernel()(第一行 C 代码)的完整链路,你就能诊断 90% 的启动失败问题。

学完本章你将能回答:

  • U-Boot 跳转到内核时,CPU 寄存器(r0/r1/r2)是什么状态?
  • head.S如何验证 CPU 和 DTB 是否有效?
  • 为什么需要创建临时页表?恒等映射和内核映射分别解决什么问题?
  • RK3506 的内核为什么是压缩的(CONFIG_KE

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询