AMBA AXI 协议学习笔记
本文基于 ARM AMBA AXI Protocol Specification v1.0 (ARM IHI 0022B) 编写,面向固件/驱动开发者。文中用 DMA 描述符、内存屏障、scatter-gather 等软件概念做类比,帮助快速建立对 AXI 总线协议的直观理解。
本文基于 ARM AMBA AXI Protocol Specification v1.0 (ARM IHI 0022B) 编写,面向固件/驱动开发者。文中用 DMA 描述符、内存屏障、scatter-gather 等软件概念做类比,帮助快速建立对 AXI 总线协议的直观理解。
本文基于 ARM AMBA 5 AHB Protocol Specification (IHI 0033C) 编写,面向有软件开发背景、需要理解 SoC 总线协议的读者。文中用 CPU 流水线、内存总线等概念做类比,帮助快速建立直观理解。
拆解 NuttX 如何将单核 RTOS 改造为对称多处理器操作系统——从 CPU 启动、任务分配、跨核 IPI、自旋锁到临界区的完整实现路径。
一个 ELF 文件躺在文件系统里,NuttX 怎么把它变成一块可运行的内存、一个独立的任务?本文从
exec()开始,逐函数追踪——打开文件、解析 header、分配内存、修正符号引用,直到第一条用户指令执行。
kill(pid, SIGUSR1)之后,信号数据怎么跨进程投递?handler 怎么在用户态被调用,执行完又怎么回到被中断的代码?本文从 sigaction 注册出发,穿越 sigqueue、trampoline 和上下文恢复,完整还原 NuttX POSIX 信号的投递链路。
进程 A 怎么把一条带优先级的消息发给进程 B?共享内存又为什么能做到零拷贝?本文从信号量到消息队列、从管道到共享内存,用源码回答每种 IPC 的内核实现——不只看 API,看完数据结构、阻塞队列和 MMU 映射。
open("/dev/ttyS0")背后发生了什么?为什么/dev下的设备节点不需要格式化磁盘也能读写?本文从伪文件系统的 inode 树入手,穿过设备驱动注册和文件操作表派发,再到 mount() 接入真实文件系统,拆解 NuttX 统一 I/O 抽象层的内核实现。
串口收到一个字节后,CPU 怎么从用户态代码跳进内核 ISR?中断完成后又怎么决定”继续跑当前任务”还是”切到刚被唤醒的高优先级任务”?本文从 GICv2 硬件分发器出发,穿越向量表、irq_dispatch、中断级上下文切换,拆解 NuttX 中断处理的完整调用链路。
用户态的
malloc(100)在 KERNEL 模式下经历了什么?本文从用户堆管理往下追踪,穿过 kmm_malloc → pgalloc → L2 页表写入,拆解四层内存分配器如何协作——每一层的算法、数据结构和临界区。
NuttX 怎么做到”每个进程有独立地址空间”?用户态函数调用怎么穿过 SVC 陷阱进入内核?高优先级任务就绪后,调度器如何当场抢走 CPU?本文基于 ARMv7-A MMU,从地址环境、系统调用陷入、双栈切换到优先级继承,完整拆解 KERNEL 模式下的任务生命周期。