LUCAS / COLLECTIONS
嵌入式 Linux 系统工程:资源、开发、使用与排障
120 课覆盖系统启动、进程内存、文件存储、并发通信、驱动外设、多媒体网络、开发调试与整机验收,配套 C、Shell、Python 实验和资源速查表。
已发布 120 篇 · 按阅读顺序排列
嵌入式 Linux 系统工程 001:Linux 系统分层与资源地图
摄像头程序调用库,库通过系统调用请求内核,驱动再管理硬件。
阅读全文 →嵌入式 Linux 系统工程 002:主机、目标板与交叉开发
编译发生在主机,程序运行在目标板;交叉编译器的目标三元组描述目标环境。
阅读全文 →嵌入式 Linux 系统工程 003:架构、ABI、大小端与工具链
指令集决定 CPU 能解码什么,ABI 约定参数、寄存器、数据布局和链接规则。
阅读全文 →嵌入式 Linux 系统工程 004:Shell、管道、重定向与退出码
标准输入、输出、错误分别是文件描述符 0、1、2。
阅读全文 →嵌入式 Linux 系统工程 005:BusyBox 与 GNU 工具差异
BusyBox 把多个 applet 编进一个可执行文件,命令是否存在、支持哪些选项都受构建配置影响。
阅读全文 →嵌入式 Linux 系统工程 006:目录结构与虚拟文件系统
/proc 和 /sys 主要反映内核对象,/dev 提供设备访问入口,/run 常放本次启动的运行状态。
阅读全文 →嵌入式 Linux 系统工程 007:串口、SSH 与开发网络
串口控制台独立于 IP 网络,适合记录启动早期故障。
阅读全文 →嵌入式 Linux 系统工程 008:建立开发板信息与版本基线
可复现问题需要把固件、设备树、模型、配置和硬件编号关联起来。
阅读全文 →嵌入式 Linux 系统工程 009:从 Boot ROM 到用户空间
启动链逐步建立运行条件:早期代码初始化存储和内存,Bootloader 加载内核与设备树,内核初始化驱动并挂载根文件系统,最后启动 PID 1。
阅读全文 →嵌入式 Linux 系统工程 010:U-Boot 环境与内核启动参数
U-Boot 环境变量和内核参数不是同一套命名空间。
阅读全文 →嵌入式 Linux 系统工程 011:内核配置、编译与模块
CONFIG 项可以内建、作为模块或关闭。
阅读全文 →嵌入式 Linux 系统工程 012:设备树编译、加载与生效确认
DTS 描述硬件连接和资源,DTB 是编译结果,运行内核使用的是启动时传入并可能被修改的树。
阅读全文 →嵌入式 Linux 系统工程 013:根文件系统与 initramfs
initramfs 在内存中提供早期用户空间,可以准备设备后切换到实际根文件系统。
阅读全文 →嵌入式 Linux 系统工程 014:BusyBox init、启动脚本与 systemd
PID 1 负责用户空间启动和进程回收。
阅读全文 →嵌入式 Linux 系统工程 015:Buildroot 工程构建与定制
Buildroot 组织工具链、内核、Bootloader 和根文件系统构建。
阅读全文 →嵌入式 Linux 系统工程 016:Yocto 的 layer、recipe 与镜像
BitBake 按 recipe 和任务图构建,layer 组织元数据,MACHINE 表示目标硬件配置,DISTRO 表达发行策略。
阅读全文 →嵌入式 Linux 系统工程 017:读懂 procfs 的系统与进程信息
/proc 以文件接口暴露内核状态。
阅读全文 →嵌入式 Linux 系统工程 018:sysfs:设备、属性与拓扑
/sys/devices 表达设备拓扑,/sys/class 和 /sys/bus 提供不同索引。
阅读全文 →嵌入式 Linux 系统工程 019:设备节点、设备号与动态管理
字符和块设备节点保存设备号,打开时由内核转到对应驱动。
阅读全文 →嵌入式 Linux 系统工程 020:debugfs、tracefs 与配置依赖
debugfs 用于调试接口,内容可能随版本变化;tracefs 暴露追踪控制与事件。
阅读全文 →嵌入式 Linux 系统工程 021:内核日志、用户日志与时间线
dmesg 读取内核环形日志,容量有限且可覆盖;用户程序 stderr 不会自动成为内核日志。
阅读全文 →嵌入式 Linux 系统工程 022:uptime、负载与基础状态
load average 反映可运行任务及某些不可中断等待任务的平均数量,不是 CPU 百分比。
阅读全文 →嵌入式 Linux 系统工程 023:系统快照与版本对照
快照应同时记录环境和事件窗口。
阅读全文 →嵌入式 Linux 系统工程 024:工具、权限和内核能力的辨别
一条命令失败可能发生在 Shell 找命令、工具解析参数、系统调用授权或内核实现四个层次。
阅读全文 →嵌入式 Linux 系统工程 025:进程生命周期与状态
fork 创建子进程,exec 替换当前进程映像,wait 回收子进程状态。
阅读全文 →嵌入式 Linux 系统工程 026:线程、TID 与共享资源
同一进程的线程共享地址空间和通常的文件描述符表,但有自己的栈、调度状态和线程 ID。
阅读全文 →嵌入式 Linux 系统工程 027:调度策略、nice 与实时优先级
nice 影响普通调度任务的相对权重,不能保证截止时间。
阅读全文 →嵌入式 Linux 系统工程 028:CPU 亲和性与多核
亲和性约束线程可运行的 CPU 集合,不是独占 CPU,也不会自动搬走中断。
阅读全文 →嵌入式 Linux 系统工程 029:上下文切换、抢占与唤醒延迟
线程从等待变为可运行,到真正获得 CPU 之间存在调度延迟。
阅读全文 →嵌入式 Linux 系统工程 030:信号与有序退出
信号处理函数会打断正常控制流,只能调用异步信号安全的操作。
阅读全文 →嵌入式 Linux 系统工程 031:僵尸进程与子进程回收
子进程退出后保留供父进程读取的状态,父进程未 wait 会出现僵尸。
阅读全文 →嵌入式 Linux 系统工程 032:高 CPU、低 CPU 卡顿与 D 状态
高 CPU 可能是有效计算、忙轮询或异常重试;低 CPU 卡顿可能等待锁、事件、I/O 或配额。
阅读全文 →嵌入式 Linux 系统工程 033:虚拟地址、物理内存与映射
进程地址空间通过页表映射到物理页,映射可以按需建立,虚拟连续不保证物理连续。
阅读全文 →嵌入式 Linux 系统工程 034:栈、堆、malloc 与 mmap
malloc 管理用户态分配,可能从堆或匿名映射取得空间;free 将内存归还分配器,不保证立即还给内核。
阅读全文 →嵌入式 Linux 系统工程 035:RSS、PSS 与共享内存统计
RSS 统计驻留页,共享页可能同时计入多个进程;PSS 将共享页按映射者分摊,适合估算进程群的份额。
阅读全文 →嵌入式 Linux 系统工程 036:页缓存、回收、swap 与内存压力
Linux 利用空闲内存缓存文件数据,可回收缓存与不可回收占用性质不同。
阅读全文 →嵌入式 Linux 系统工程 037:slab 与内核内存
内核使用对象缓存管理 inode、dentry 等对象。
阅读全文 →嵌入式 Linux 系统工程 038:CMA、保留内存与厂商缓冲池
CMA 支持某些连续内存分配需求,reserved-memory 则描述保留区域及用途。
阅读全文 →嵌入式 Linux 系统工程 039:OOM、碎片与分配失败
分配失败可以来自进程限制、cgroup 限额、地址空间、特定内存区域或连续性要求,未必触发 OOM。
阅读全文 →嵌入式 Linux 系统工程 040:内存泄漏、越界与峰值
泄漏指失去必要的释放路径,峰值高可能只是并发在途数据多。
阅读全文 →嵌入式 Linux 系统工程 041:文件描述符与打开文件状态
文件描述符是进程表中的索引,底层打开文件描述保存偏移和状态。
阅读全文 →嵌入式 Linux 系统工程 042:权限、属主、umask 与链接
访问文件需要沿路径具备目录搜索权限;文件自身可读不代表路径可达。
阅读全文 →嵌入式 Linux 系统工程 043:VFS、挂载点与文件系统
VFS 为不同文件系统提供统一接口,路径解析经过挂载关系。
阅读全文 →嵌入式 Linux 系统工程 044:块设备、分区、eMMC 与 SD
块层以扇区组织请求,分区在设备上定义范围;eMMC、SD 控制器内部还可能执行擦写管理和垃圾回收。
阅读全文 →嵌入式 Linux 系统工程 045:MTD、NOR、NAND、UBI 与 UBIFS
MTD 暴露原始 Flash 的擦除和写入约束,UBI 在 MTD 之上管理逻辑擦除块和坏块,UBIFS 构建文件系统。
阅读全文 →嵌入式 Linux 系统工程 046:SquashFS、OverlayFS 与只读系统
SquashFS 常用于压缩只读根文件系统,OverlayFS 将只读 lower 与可写 upper 组合。
阅读全文 →嵌入式 Linux 系统工程 047:缓冲写入、fsync 与掉电一致性
write 成功通常表示数据进入内核处理路径,不一定到达非易失介质。
阅读全文 →嵌入式 Linux 系统工程 048:空间满、inode 耗尽与 I/O 慢
df 统计文件系统使用,du 汇总可见路径文件,两者口径不同。
阅读全文 →嵌入式 Linux 系统工程 049:阻塞、非阻塞与短读写
read、write 返回的是本次处理字节数,可能小于请求。
阅读全文 →嵌入式 Linux 系统工程 050:select、poll 与 epoll
就绪通知表示当前操作有机会不阻塞,并不保证完整消息到达。
阅读全文 →嵌入式 Linux 系统工程 051:pipe、FIFO 与 Unix socket
pipe 常用于有亲缘进程,FIFO 提供文件系统入口,Unix socket 适合本机双向通信。
阅读全文 →嵌入式 Linux 系统工程 052:共享内存与消息队列
共享内存共享的是数据存储,不自动提供互斥和完成通知。
阅读全文 →嵌入式 Linux 系统工程 053:mutex、条件变量与信号量
mutex 保护状态不变量,条件变量用于等待状态变化。
阅读全文 →嵌入式 Linux 系统工程 054:原子操作、内存序与数据竞争
C 的 volatile 不提供线程同步或原子性。
阅读全文 →嵌入式 Linux 系统工程 055:eventfd、timerfd 与 signalfd
这些 Linux 接口把事件、定时器和信号接入 fd 事件循环。
阅读全文 →嵌入式 Linux 系统工程 056:死锁、优先级反转与队列背压
两个线程以相反顺序持有锁会形成等待环。
阅读全文 →嵌入式 Linux 系统工程 057:device、driver、bus 与绑定
设备描述存在不等于驱动已绑定。
阅读全文 →嵌入式 Linux 系统工程 058:platform、设备树与 probe
platform 设备常用于不能自行枚举的 SoC 外设。
阅读全文 →嵌入式 Linux 系统工程 059:模块、固件加载与版本匹配
ko 在内核执行,firmware blob 是设备可能加载的数据或代码,两者不能互换。
阅读全文 →嵌入式 Linux 系统工程 060:MMIO 与资源申请
寄存器不是普通 RAM,读取可能清状态,写入可能触发操作。
阅读全文 →嵌入式 Linux 系统工程 061:IRQ、软中断与工作队列
硬中断处理必须快速并遵守上下文限制,线程化中断和 workqueue 可把部分工作移到可调度上下文。
阅读全文 →嵌入式 Linux 系统工程 062:GPIO、pinctrl 与有效电平
pinctrl 决定引脚复用和电气配置,GPIO 描述逻辑线。
阅读全文 →嵌入式 Linux 系统工程 063:clock、reset、regulator 与生命周期
外设通常需要供电、时钟和复位顺序。
阅读全文 →嵌入式 Linux 系统工程 064:DMA、IOMMU 与缓存所有权
CPU 虚拟地址、物理地址和 DMA 地址是不同概念。
阅读全文 →嵌入式 Linux 系统工程 065:UART、termios 与串口使用
串口 fd 的行为受 termios 控制,规范模式可能等待换行,回显和字符转换会修改字节流。
阅读全文 →嵌入式 Linux 系统工程 066:I²C 设备、事务与访问工具
Linux I²C 适配器编号不一定与芯片手册控制器编号相同。
阅读全文 →嵌入式 Linux 系统工程 067:SPI、spidev 与传输
SPI 传输同时涉及发送和接收,设备协议定义指令、地址、dummy 和数据阶段。
阅读全文 →嵌入式 Linux 系统工程 068:GPIO 字符设备与事件
GPIO line 请求建立所有权和配置,释放请求后电平保持行为取决于硬件与驱动,不能默认永久保持。
阅读全文 →嵌入式 Linux 系统工程 069:PWM、定时器与控制输出
硬件 PWM 由控制器产生周期,用户态定时 sleep 翻转 GPIO 不能等价替代。
阅读全文 →嵌入式 Linux 系统工程 070:ADC、传感器与 IIO
IIO 将采样通道、量程、偏移、触发和缓冲组织成接口。
阅读全文 →嵌入式 Linux 系统工程 071:input、按键与触摸事件
evdev 以类型、代码和值表达事件,SYN_REPORT 划分一组更新。
阅读全文 →嵌入式 Linux 系统工程 072:CAN、SocketCAN 与错误状态
SocketCAN 将 CAN 控制器接入网络栈,应用使用 CAN socket。
阅读全文 →嵌入式 Linux 系统工程 073:USB 枚举、描述符与端点
USB 主机枚举设备并读取描述符,再由驱动匹配接口。
阅读全文 →嵌入式 Linux 系统工程 074:USB Host、Gadget 与 UVC
Host 管理总线,Gadget 把板子呈现为 USB 设备,双角色控制器还涉及角色切换。
阅读全文 →嵌入式 Linux 系统工程 075:PCIe 枚举、BAR、MSI 与 DMA
PCIe 链路建立、配置空间可读、资源分配、驱动绑定、DMA 成功是逐层推进的。
阅读全文 →嵌入式 Linux 系统工程 076:V4L2 采集与缓冲队列
典型流式采集经历能力查询、格式协商、申请缓冲、入队、启动、出队和再入队。
阅读全文 →嵌入式 Linux 系统工程 077:Media Controller 与摄像头拓扑
Media Controller 用 entity、pad 和 link 表达媒体管线;subdev 描述 sensor、接收器等子设备。
阅读全文 →嵌入式 Linux 系统工程 078:ALSA、PCM 与音频欠载
ALSA PCM 把采样流组织为环形缓冲和 period,frame 包含同一采样时刻的各通道数据。
阅读全文 →嵌入式 Linux 系统工程 079:DRM、KMS 与显示缓冲
DRM/KMS 用 connector、encoder、CRTC 和 plane 表达显示资源。
阅读全文 →嵌入式 Linux 系统工程 080:厂商视频 SDK 与 NPU 资源
厂商 SDK 常把采集、处理、编码和推理封装为模块及通道。
阅读全文 →嵌入式 Linux 系统工程 081:网卡、MAC、PHY 与链路状态
网卡逻辑状态 UP 与物理 carrier 是不同条件。
阅读全文 →嵌入式 Linux 系统工程 082:IP、子网、路由与邻居表
发送 IP 数据先按路由决定出口及下一跳,再解析相邻链路层地址。
阅读全文 →嵌入式 Linux 系统工程 083:DHCP、DNS 与时间同步
DHCP 提供地址及租约配置,DNS 负责名字解析,NTP 等协议校准时钟,三者独立。
阅读全文 →嵌入式 Linux 系统工程 084:TCP、UDP 与 socket 缓冲
TCP 提供有序字节流,应用仍需消息边界和超时协议;UDP 保留数据报边界但不保证送达。
阅读全文 →嵌入式 Linux 系统工程 085:ss、抓包与协议分析
ss 展示 socket 状态,抓包观察特定位置的网络数据,两者回答不同问题。
阅读全文 →嵌入式 Linux 系统工程 086:吞吐、重传、MTU 与延迟
吞吐与单包延迟不是同一目标,批处理可能提高前者却增加后者。
阅读全文 →嵌入式 Linux 系统工程 087:Wi-Fi、蜂窝模块与重连
无线连接包括设备总线、固件、射频关联、认证和 IP 配置多个层次。
阅读全文 →嵌入式 Linux 系统工程 088:防火墙、转发、NAT 与隔离
本机接收、转发和本机发送经过不同网络处理路径。
阅读全文 →嵌入式 Linux 系统工程 089:交叉编译、sysroot 与 pkg-config
编译器目标、头文件、链接库和运行时必须一致。
阅读全文 →嵌入式 Linux 系统工程 090:Make、CMake 与可重复构建
构建系统根据依赖决定重建,依赖遗漏会留下旧产物。
阅读全文 →嵌入式 Linux 系统工程 091:ELF、库与动态加载器
静态链接把所需代码并入产物,动态链接由运行时加载器解析依赖。
阅读全文 →嵌入式 Linux 系统工程 092:程序无法启动的分层排查
Shell 执行失败可能来自权限、挂载 noexec、架构、解释器、动态库或脚本 shebang。
阅读全文 →嵌入式 Linux 系统工程 093:配置、日志与错误处理
配置必须定义类型、范围和默认值,错误输入应在资源申请前拒绝。
阅读全文 →嵌入式 Linux 系统工程 094:服务管理、依赖与恢复
守护程序应有清晰的前台运行模式、退出状态和停止协议,交由 init 管理。
阅读全文 →嵌入式 Linux 系统工程 095:capabilities 与设备访问
Linux 将部分特权拆为 capabilities,但文件权限、namespace 和 LSM 仍共同影响访问。
阅读全文 →嵌入式 Linux 系统工程 096:软件包、升级与回退
升级要同时处理真实性、版本兼容、掉电恢复和配置迁移。
阅读全文 →嵌入式 Linux 系统工程 097:strace 定位系统调用问题
strace 观察系统调用及信号,可回答程序卡在哪个内核接口、收到什么错误。
阅读全文 →嵌入式 Linux 系统工程 098:GDB 与 gdbserver
调试符号把地址映射到函数和源行,优化可能内联函数或移除变量。
阅读全文 →嵌入式 Linux 系统工程 099:core dump、符号与回溯
core 保存进程异常时的部分状态,是否生成受资源限制、core_pattern、权限和服务策略影响。
阅读全文 →嵌入式 Linux 系统工程 100:ASan、UBSan 与内存错误
ASan 检测多类越界和释放后使用,UBSan 检测部分未定义行为。
阅读全文 →嵌入式 Linux 系统工程 101:perf 与采样分析
perf 可读取性能事件并采样调用栈,但事件支持取决于 PMU、内核和权限。
阅读全文 →嵌入式 Linux 系统工程 102:ftrace、tracepoints 与时序
静态 tracepoint 记录内核定义的事件,函数追踪观察调用行为。
阅读全文 →嵌入式 Linux 系统工程 103:eBPF 的用途、条件与替代方案
eBPF 可在受控内核挂点运行经验证的程序,采集事件并通过 map 等传递结果。
阅读全文 →嵌入式 Linux 系统工程 104:联合定位性能瓶颈
性能是工作量、资源供给和排队共同作用的结果。
阅读全文 →嵌入式 Linux 系统工程 105:Oops、panic 与内核调用栈
Oops 报告内核异常,后续行为取决于上下文和策略;panic 则进入不可继续正常运行的处理路径。
阅读全文 →嵌入式 Linux 系统工程 106:hung task、soft lockup 与 hard lockup
hung task 常报告长时间不可中断等待;soft lockup 和 hard lockup 监测不同层次的 CPU 进展。
阅读全文 →嵌入式 Linux 系统工程 107:锁检查与内核调试配置
lockdep 检查锁依赖及上下文规则,KASAN 等工具辅助检测内核内存错误。
阅读全文 →嵌入式 Linux 系统工程 108:PREEMPT_RT 与实时延迟
实时性关注截止时间和最坏延迟。
阅读全文 →嵌入式 Linux 系统工程 109:时钟源、时间戳与对齐
CLOCK_REALTIME 表示墙上时间,可能被校准;CLOCK_MONOTONIC 适合测量同系统的持续时间。
阅读全文 →嵌入式 Linux 系统工程 110:频率、温度与降频
CPU 和设备频率由策略、负载、温度及电源条件共同控制。
阅读全文 →嵌入式 Linux 系统工程 111:suspend、runtime PM 与唤醒
系统休眠面向整机,runtime PM 管理运行期间的单设备空闲。
阅读全文 →嵌入式 Linux 系统工程 112:watchdog、pstore 与故障现场
硬件 watchdog 监测喂狗行为,不直接理解业务健康。
阅读全文 →嵌入式 Linux 系统工程 113:cgroups、限制与资源压力
cgroup 把任务组织为层级并控制资源。
阅读全文 →嵌入式 Linux 系统工程 114:namespaces、容器与设备访问
namespace 隔离可见视图,cgroup 管资源,容器共享宿主内核。
阅读全文 →嵌入式 Linux 系统工程 115:案例:启动和根文件系统失败
案例输入是构造日志,包含控制台已启动、根设备等待和 init 执行失败三类事件。
阅读全文 →嵌入式 Linux 系统工程 116:案例:摄像头无图、花屏与丢帧
无图沿供电、控制、出流、接收、ISP、缓冲和应用逐层检查。
阅读全文 →嵌入式 Linux 系统工程 117:案例:NPU 变慢与缓冲分配失败
先把预处理、排队、设备执行、后处理和输出拆开,再核对模型、频率和输入形状。
阅读全文 →嵌入式 Linux 系统工程 118:案例:网络视频卡顿与帧龄
视频流的用户体验由采集到呈现的年龄决定,网络吞吐足够也可能积压旧帧。
阅读全文 →嵌入式 Linux 系统工程 119:案例:长期运行的内存与句柄增长
长期异常需要观察资源斜率和业务周期,而不是只看崩溃瞬间。
阅读全文 →嵌入式 Linux 系统工程 120:整机验收与故障报告
验收将功能、性能和恢复能力放在明确条件下测试。
阅读全文 →