Vonku's Blog

Keep calm or 烫烫烫

本文基于 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 模式下的任务生命周期。

阅读全文 »
0%