第 1 / 120 课 · 系统全貌与工作环境。返回课程合集。
机制与资源关系
摄像头程序调用库,库通过系统调用请求内核,驱动再管理硬件。厂商 SDK 可能同时包含用户库、内核模块和固件,不能把整个 SDK 当作单独的一层。
一次取帧至少涉及设备句柄、驱动队列、DMA 缓冲和应用线程。资源地图要标出申请者、消费者、释放者及错误返回,而不只是芯片框图。
实际用法与观察入口
以下是操作说明;先确认执行环境、工具帮助和目标对象。设备名、PID、地址及项目名示例需要按实际替换,不能将整段命令当通用板端脚本执行。
|
输出解读与排查顺序
先固定内核、根文件系统、设备树和 SDK 四个版本,再沿出错调用定位边界。应用返回超时并不能证明 sensor 未出流,也可能是缓冲耗尽或线程没有及时消费。
情境推演
假设应用报取帧超时,但接收端中断持续增长。此时“sensor 完全没出流”的假设已减弱;继续检查 DMA 完成、驱动出队与应用消费。中断统计和缓冲状态属于不同证据,不能互相替代。
练习与参考分析
画出 sensor→驱动→SDK→应用的一条数据路径,每条边注明格式和所有权。参考结论:硬件有帧、驱动有帧、应用收到帧是三个独立的检查点。
本课练习属于阅读、分析或板端观察。未在目标开发板执行,记录时应写明板型、内核配置、工具版本和原始输出。
学习路线与完整目录
本系列承接SoC 与接口课程,以 Linux 的资源管理、程序接口和排障为主。主机实验与真实板端能力分开验证;硬件时序仍以芯片手册和实际 BSP 为准。综合速查表与报告模板见第 120 课。
01 · 系统全貌与工作环境
- 001 Linux 系统分层与资源地图
- 002 主机、目标板与交叉开发
- 003 架构、ABI、大小端与工具链
- 004 Shell、管道、重定向与退出码
- 005 BusyBox 与 GNU 工具差异
- 006 目录结构与虚拟文件系统
- 007 串口、SSH 与开发网络
- 008 建立开发板信息与版本基线
02 · 启动与系统构建
- 009 从 Boot ROM 到用户空间
- 010 U-Boot 环境与内核启动参数
- 011 内核配置、编译与模块
- 012 设备树编译、加载与生效确认
- 013 根文件系统与 initramfs
- 014 BusyBox init、启动脚本与 systemd
- 015 Buildroot 工程构建与定制
- 016 Yocto 的 layer、recipe 与镜像
03 · 系统观察与证据采集
- 017 读懂 procfs 的系统与进程信息
- 018 sysfs:设备、属性与拓扑
- 019 设备节点、设备号与动态管理
- 020 debugfs、tracefs 与配置依赖
- 021 内核日志、用户日志与时间线
- 022 uptime、负载与基础状态
- 023 系统快照与版本对照
- 024 工具、权限和内核能力的辨别
04 · 进程、线程与调度
- 025 进程生命周期与状态
- 026 线程、TID 与共享资源
- 027 调度策略、nice 与实时优先级
- 028 CPU 亲和性与多核
- 029 上下文切换、抢占与唤醒延迟
- 030 信号与有序退出
- 031 僵尸进程与子进程回收
- 032 高 CPU、低 CPU 卡顿与 D 状态
05 · 内存管理与排查
- 033 虚拟地址、物理内存与映射
- 034 栈、堆、malloc 与 mmap
- 035 RSS、PSS 与共享内存统计
- 036 页缓存、回收、swap 与内存压力
- 037 slab 与内核内存
- 038 CMA、保留内存与厂商缓冲池
- 039 OOM、碎片与分配失败
- 040 内存泄漏、越界与峰值
06 · 文件、存储与持久化
- 041 文件描述符与打开文件状态
- 042 权限、属主、umask 与链接
- 043 VFS、挂载点与文件系统
- 044 块设备、分区、eMMC 与 SD
- 045 MTD、NOR、NAND、UBI 与 UBIFS
- 046 SquashFS、OverlayFS 与只读系统
- 047 缓冲写入、fsync 与掉电一致性
- 048 空间满、inode 耗尽与 I/O 慢
07 · 并发、IPC 与异步 I/O
- 049 阻塞、非阻塞与短读写
- 050 select、poll 与 epoll
- 051 pipe、FIFO 与 Unix socket
- 052 共享内存与消息队列
- 053 mutex、条件变量与信号量
- 054 原子操作、内存序与数据竞争
- 055 eventfd、timerfd 与 signalfd
- 056 死锁、优先级反转与队列背压
08 · 驱动模型与硬件资源
- 057 device、driver、bus 与绑定
- 058 platform、设备树与 probe
- 059 模块、固件加载与版本匹配
- 060 MMIO 与资源申请
- 061 IRQ、软中断与工作队列
- 062 GPIO、pinctrl 与有效电平
- 063 clock、reset、regulator 与生命周期
- 064 DMA、IOMMU 与缓存所有权
09 · 常见外设的 Linux 用法
- 065 UART、termios 与串口使用
- 066 I²C 设备、事务与访问工具
- 067 SPI、spidev 与传输
- 068 GPIO 字符设备与事件
- 069 PWM、定时器与控制输出
- 070 ADC、传感器与 IIO
- 071 input、按键与触摸事件
- 072 CAN、SocketCAN 与错误状态
10 · USB、PCIe 与多媒体
- 073 USB 枚举、描述符与端点
- 074 USB Host、Gadget 与 UVC
- 075 PCIe 枚举、BAR、MSI 与 DMA
- 076 V4L2 采集与缓冲队列
- 077 Media Controller 与摄像头拓扑
- 078 ALSA、PCM 与音频欠载
- 079 DRM、KMS 与显示缓冲
- 080 厂商视频 SDK 与 NPU 资源
11 · 网络配置与排障
- 081 网卡、MAC、PHY 与链路状态
- 082 IP、子网、路由与邻居表
- 083 DHCP、DNS 与时间同步
- 084 TCP、UDP 与 socket 缓冲
- 085 ss、抓包与协议分析
- 086 吞吐、重传、MTU 与延迟
- 087 Wi-Fi、蜂窝模块与重连
- 088 防火墙、转发、NAT 与隔离
12 · 应用开发与部署
- 089 交叉编译、sysroot 与 pkg-config
- 090 Make、CMake 与可重复构建
- 091 ELF、库与动态加载器
- 092 程序无法启动的分层排查
- 093 配置、日志与错误处理
- 094 服务管理、依赖与恢复
- 095 capabilities 与设备访问
- 096 软件包、升级与回退
13 · 调试与性能工具
- 097 strace 定位系统调用问题
- 098 GDB 与 gdbserver
- 099 core dump、符号与回溯
- 100 ASan、UBSan 与内存错误
- 101 perf 与采样分析
- 102 ftrace、tracepoints 与时序
- 103 eBPF 的用途、条件与替代方案
- 104 联合定位性能瓶颈
14 · 内核故障、实时性与可靠性
- 105 Oops、panic 与内核调用栈
- 106 hung task、soft lockup 与 hard lockup
- 107 锁检查与内核调试配置
- 108 PREEMPT_RT 与实时延迟
- 109 时钟源、时间戳与对齐
- 110 频率、温度与降频
- 111 suspend、runtime PM 与唤醒
- 112 watchdog、pstore 与故障现场
15 · 隔离与综合工程案例
- 113 cgroups、限制与资源压力
- 114 namespaces、容器与设备访问
- 115 案例:启动和根文件系统失败
- 116 案例:摄像头无图、花屏与丢帧
- 117 案例:NPU 变慢与缓冲分配失败
- 118 案例:网络视频卡顿与帧龄
- 119 案例:长期运行的内存与句柄增长
- 120 整机验收与故障报告
官方资料与版本边界
内核、工具和厂商 BSP 的支持范围需分别核对。参考资料可能对应较新版本;不要据此推定旧 BSP 支持所有接口。