NuttX 启动 · 调试实战
📚 30 章完整版
v1.0
01
NuttX 概述
NuttX是什么
架构特点
对比Linux/FreeRTOS
应用领域
02
源码获取与编译环境搭建
GitHub拉取
交叉工具链
Kconfig配置
make编译
常见错误
03
启动流程概览
复位到main
BootROM→Bootloader
Kernel Init→App Init
04
芯片级启动 (BootROM)
上电第一条指令
中断向量表
堆栈指针初始化
跳转Bootloader
05
Bootloader 阶段
内置bootloader
分区表加载
DDR初始化
设备树传递
06
内核入口 (__start)
汇编入口分析
BSS清零
数据段拷贝
C运行环境
07
早期初始化 (up_initialize)
时钟初始化
串口初始化
内存管理初始化
08
中断子系统初始化
中断控制器初始化
向量表注册
中断使能流程
09
定时器与调度器初始化
系统滴答定时器
调度器初始化
空闲线程创建
10
设备驱动初始化
驱动注册机制
字符/块/网络设备
初始化顺序
11
文件系统初始化
VFS挂载
根文件系统
ROMFS/ProcFS
12
网络协议栈初始化
TCP/IP初始化
网络设备绑定
socket接口
13
用户空间初始化 (MMU版)
MMU初始化
页表创建
地址空间划分
跳转用户态
14
应用程序启动流程
board_app_initialize
main调用链
任务创建
15
构建系统详解
Kconfig语法
Makefile结构
自定义板级配置
添加新板子
16
调试工具链准备
GDB安装
OpenOCD/JLink
串口工具
网络调试(NSH)
17
NSH 调试技巧
常用命令
ps/free
动态加载模块
18
GDB 调试内核
连接目标板
断点/单步
寄存器/堆栈回溯
19
内存调试技巧
内存泄漏检测
堆内存统计
栈溢出检测
20
任务与调度调试
任务状态
优先级反转
死锁检测
断言
21
中断与异常调试
中断延迟测量
异常向量捕获
Fault分析
debug monitor
22
设备驱动调试
probe跟踪
IOCTL调试
DMA调试
trace工具
23
网络调试
ping测试
tcpdump抓包
socket选项
性能分析
24
文件系统调试
文件操作跟踪
磁盘I/O统计
fd泄漏检测
ProcFS接口
25
性能分析与优化
perf工具
函数执行时间
上下文切换开销
启动时间优化
26
电源管理调试
低功耗模式
唤醒源分析
电源状态转换
功耗测量
27
多核 (SMP) 调试
SMP启动流程
核间通信IPI
共享资源竞争
CPU亲和性
28
常见启动失败案例分析
卡在BootROM
DDR初始化失败
文件系统挂载失败
应用崩溃
29
NuttX 日志系统
syslog配置
日志级别控制
动态日志开关
输出到文件/网络
30
综合实战
从零调试启动问题
完整定位与修复