ARMv7-A小系统实践(七):GIC、定时器与一次完整的IRQ

本章记录什么

这一章沿着一枚定时器中断走完整条链:Private Timer 产生事件,GIC Distributor 和本核 CPU Interface 判断是否交付,处理器进入 IRQ,软件读取 IAR 完成应答,设备 handler 清除中断源,最后把原始 IAR 写回 EOIR。目标是理解一个状态机,而不是记住几组地址。

在这一章之前做了什么

上一章已经能够安全进入和离开 IRQ,但入口正确并不代表设备中断能够重复工作。还需要解决三层使能、优先级、目标 CPU、Pending/Active 状态以及设备侧状态。任何一层遗漏,现象都可能只是“没有输出”或“只进入一次”。

本章会先解释 SGI、PPI、SPI 和 GIC 两大组成,再用 ID29 建立周期 tick。所有关键寄存器语义、分发器骨架和排错顺序都在文章内展开,不要求读者另开工程才能补齐上下文。

ARMv7-A小系统实践(四):从ELF、模式栈到第一行串口输出

本章记录什么

这一章把前两章的寄存器规则和调用规范放进真正的启动路径:镜像被放到什么地址,向量表为何必须对齐,链接脚本如何给代码、数据、页表和各模式栈分配空间,启动汇编又如何把一个没有 C 运行时的处理器带到 kernel_main。这是后续一切功能的地基。

在这一章之前做了什么

此时已经知道处理器模式会选择不同的 banked sp,也知道调用 C 前必须满足 AAPCS 的栈对齐和寄存器约定。但这些知识仍是静态规则。启动阶段要把它们变成具体地址:先屏蔽异步事件,建立向量基址和每模式栈,清理 BSS,再由 CPU0 进入共享初始化;CPU1 不能重复执行同一套破坏性操作。

本章会从链接合同讲到第一行串口输出,并给出一份可独立阅读的启动汇编。代码不是“最终模板”,而是一条可以逐条断点验证的最小路径。


:D 一言句子获取中...