Linux 内核
Linux 内核子系统源码分析(Linux 6.8)。
中断 / softirq
专题页:中断 / softirq
- 硬中断、softirq 与 arm64 路径 — 栈与上下文、
irq_exit、local_bh_disable、加锁 - ARM64 异常路径上的栈切换 — 硬件换
SP_EL1、劫持SP_EL0、IRQ 栈与cpu_switch_to
USB 子系统
专题页:USB 子系统
- USB 2.0 枚举流程
- hub_port_init 调用链
- usb_get_descriptor 调用链
- 枚举与两轮 Probe
- UVC 驱动分析
- Gadget 子系统概览 — UDC / composite / configfs 四层架构
- Configfs 组装分析 —
gadget_info/cdev脚本拼装与 bind - UDC bind 分析 —
udc_bind_to_driver、pending、pullup - DWC2 接口总览 —
gadget_ops、ep_ops与框架交付边界 - DWC2 USBTRDTIM 选值 — 按 UTMI+ 位宽给 5 / 9,对照 ST HAL 按 AHB 频率查表
- Composite EP0 枚举 —
composite_setup、SET_CONFIGURATION - ACM Function 路径 —
f_acm.c、gserial_connect与 ttyGS - Gadget CDC ACM 串口实践 — configfs +
ttyGS0/ Hostcdc_acm
Media / V4L2 子系统
专题页:Media / V4L2
- i.MX6ULL OV5640:设备树到 /dev/video — DVP DTS、引脚冲突与 mx6s 出现 video 节点(Linux 4.9.88 BSP)
- OV5640 横纹与偏色 — CSI 同步极性 vs ffplay 像素格式(Linux 4.9.88 BSP)
- PXP PRIMARY 直写 fb0 — YUYV→RGB 硬件显示与内核 patch(Linux 4.9.88 BSP)
- PXP USERPTR 零拷贝 — CSI 缓冲直交 PXP,降低 CPU 占用(Linux 4.9.88 BSP)
- V4L2 设备注册与 video 节点
- V4L2 ioctl 分发
- videobuffer2:Buffer 状态机与双链表
Pinctrl / GPIO 子系统
SPI 子系统
专题页:SPI 子系统
Sound / ALSA
专题页:Sound / ALSA
内核以百问 Linux 4.9.88 BSP 为主(文首已注明;上面多数是 6.8)。
- ASoC 四层架构 — Machine / Platform / CPU DAI / Codec
/dev/snd设备节点 —ls /dev/snd看到的那些文件是干什么的- 声卡播放路径 —
aplay→ SDMA / SAI / WM8960 - 声卡录音路径 —
arecord、read、SAI RX - ALSA PCM 状态机 — 状态、
start/stop、underrun/overrun - ALSA hw_params 参数协商 — 为什么 48 kHz 能播,96 kHz 就不行
- WM8960 kcontrol 构造与使用 —
tinymix里那些音量名字是怎么来的 - amixer 改音量、拨开关:内核的不同调用 — 一条只改数字,一条才会接通通路
- 从 tinymix 到 WM8960 DAPM 路由 — 那些开关对应芯片里哪条线
- DAPM widget 上电:谁判、何时判 — 电源管理
BPF / kprobe
专题页:BPF / kprobe
内核以 Ubuntu HWE 5.15 为主(文首已注明;上面多数是 6.8)。
- eBPF kprobe:load / attach / 命中 — PROG_LOAD / 插桩 / LINK / 多 BPF 分发
- kprobe-on-ftrace 插桩实测 — 入口 NOP↔CALL 与 handler 上下文
- 经典 kprobe 插桩实测 — ARM32 undef 断点(非 ftrace)
调试与实践
具体问题的排查记录,和上面的流程分析互补。概览:调试与实践。
- DJI Osmo UVC/UAC2 枚举排查 —
2ca3:8004id_table 与 UAC2 probe - USB Device 公头悬空误报 Suspend — 悬空 D± 触发
USBSUSP - UVC 拔出后 DQBUF 不返回 — 断连未唤醒
done_wq,vb2_queue_error() - 重启后 USB WiFi 概率枚举不到 — 上电序列轮询超时,按序下电
- libusb Windows 枚举失败 — 空 root hub 让 HCD 扫描轮整体失败
- IMX6ULL SPI 片选 GPIO 时好时坏 — runtime PM 覆盖 CS
- 根据 Oops 的 PC 定位到出错指令 —
func+off/ kallsyms /objdump - 从 Oops 栈转储手工回溯调用栈 — 从 SP 认
push保存的 lr - 写作模板