第一阶段:基础通识

需要掌握

1.C语言核心:
  • 基础语法:数据类型、运算符、流程控制、函数。

  • 指针与内存:指针运算、多级指针、动态内存管理(malloc/free)、内存布局(栈/堆/全局区/常量区)。

  • 结构体与位运算:结构体、联合体、枚举、位域操作、位掩码。

  • 预处理指令:宏定义、条件编译、头文件管理。基础数据结构:链表、队列、栈。

  • C语言高阶:指针与内存管理、结构体与链表、函数指针与回调、位操作、预处理器与宏

  • Linux命令行:文件与目录操作、权限管理、进程管理、网络命令、Vi/Vim编辑器

  • Shell脚本:变量、条件判断、循环、函数、常用文本处理(grep/sed/awk)

  • 开发工具链:GCC编译流程、Makefile编写、GDB调试、Git版本管理

2.数据结构基础

链表、队列、栈、树的基本操作和适用场景。嵌入式开发中环形缓冲区、任务队列、状态机都建立在这些结构之上。

3.计算机组成原理:
  • CPU架构、内存层次、总线、I/O接口、中断机制。(计算机组成原理)

  • 数字电路基础:二进制/十六进制转换、逻辑门、时序电路。(模拟电子技术基础、数字电子技术基础)

4.电子电路基础硬件入门:
  • 欧姆定律、分压/滤波电路、二极管/三极管/MOS管基本原理。(模拟电子技术基础)

  • 能读懂元器件数据手册,掌握基本英文文档阅读能力。

  • 认识电阻、电容、电感,理解欧姆定律、基尔霍夫定律,能看懂简单的分压电路和上拉/下拉电阻。不需要深入模电,但要能看懂开发板原理图中的外设连接方式。(电路)

推荐课程与资源

  • CSDN嵌入式零基础入门视频教程(2026最新版) :基础篇涵盖C语言、数据结构及实战项目

  • 中国大学MOOC:搜索“嵌入式软件设计”(合肥工业大学彭敏主讲),系统讲解嵌入式C编程与Linux工具链

  • 书籍:《C和指针》《UNIX环境高级编程》(APUE)

实践

  1. 在虚拟机中安装Ubuntu,完成日常操作从图形界面到命令行的迁移

  2. 用C语言实现一个简易通讯录(链表+文件存储)

  3. 编写Makefile编译多文件C项目

  4. 用Shell脚本实现日志自动清理和备份脚本

第二阶段:Linux应用开发(2-3个月)

完成从理论到实物的落地,掌握嵌入式核心能力。建议以STM32为主线。

核心知识

  • 文件I/O:open/read/write/lseek、标准I/O库、文件描述符与文件指针的区别

  • 多进程编程:fork、exec族函数、wait/waitpid、守护进程

  • 多线程编程:pthread_create、线程同步(互斥锁、条件变量、信号量)

  • 进程间通信:管道、消息队列、共享内存、信号

  • 网络编程:TCP/UDP Socket编程、IO多路复用(select/poll/epoll)

  • 串口编程:termios配置、串口数据收发

推荐课程与资源

  • 野火嵌入式Linux学习路线:将Linux开发分为5个阶段,涵盖核心编程与网络编程,每个阶段有明确的学习目标和实操任务

  • 《ARM嵌入式Linux系统开发详解(第3版)》 :系统介绍ARM Linux开发全流程,配套5个典型案例

  • 国家高等教育智慧教育平台“嵌入式软件设计” :14章内容覆盖文件操作、进程线程、信号、IPC、套接字等

实践

  1. 文件操作类:实现一个文件复制工具,支持进度显示

  2. 多进程类:实现简易Shell(支持命令解析、管道、重定向)

  3. 网络类:编写TCP客户端/服务器,实现文件传输

  4. 综合类:串口数据采集程序——从串口读取传感器数据,写入日志文件,并通过TCP发送到远程监控端

全栈知识体系中,应用阶段的核心就是文件IO、多进程多线程、进程通信、串口/网络编程与业务功能开发。

此阶段可进阶

  1. 高并发网络编程进阶 深入 epoll + 线程池 + Reactor/Proactor 模型,实现轻量级 HTTP 服务器、MQTT 客户端、WebSocket 通信,理解粘包/拆包、心跳、断线重连、协议编解码。

  2. 嵌入式 GUI 进阶 学习 LVGL 或 Qt(交叉编译 Qt),掌握触摸屏、framebuffer、显示驱动接口、界面与业务解耦,能做出“采集 + 显示 + 控制”的完整面板。

  3. 音视频与视觉进阶 学习 V4L2、ALSA、FFmpeg、RTSP/RTMP 推流,理解摄像头采集、编码压缩、网络传输、Web 端播放的完整链路。

  4. 系统编程与性能调优进阶 深入文件系统、内存映射、信号处理、进程调度、strace/perf/gprof 性能分析,能定位 CPU、内存、IO、线程锁问题。

  5. RTOS/裸机过渡进阶 若硬件基础薄弱,可用 STM32 + FreeRTOS 补足中断、任务、队列、信号量、状态机等概念,但不要作为 Linux 方向主线过久,完成过渡后应尽快回到 Linux 应用与驱动。

第三阶段:系统移植与构建

核心知识

  • 交叉编译工具链:理解host/target概念,搭建交叉编译环境

  • Bootloader(U-Boot) :启动流程分析、U-Boot移植与配置

  • Linux内核:内核配置与裁剪、内核编译流程、设备树(Device Tree)基础

  • 根文件系统:BusyBox构建、根文件系统制作、系统启动流程

  • 构建系统:Buildroot入门(相对Yocto更简单易学)

推荐课程与资源

  • 《Yocto项目实战教程:高效定制嵌入式Linux系统》 :从基础到高阶讲解Yocto核心技术,涵盖BitBake、BSP层定制、SDK开发等,结合QEMU、树莓派到NXP i.MX平台循序渐进

  • 《ARM嵌入式Linux系统开发详解(第3版)》 :讲解嵌入式Linux系统开发全流程,包含系统移植章节

  • 野火/正点原子配套教程:针对具体开发板(如RK3568、i.MX6ULL)提供从零开始的移植教程

实践

  1. 为开发板配置并编译U-Boot,修改启动参数

  2. 裁剪Linux内核,添加所需驱动模块,编译并在开发板上启动

  3. 用BusyBox制作根文件系统,包含基本的系统命令

  4. 完成“U-Boot + Kernel + RootFS”的最小系统移植

系统阶段的核心是U-Boot移植、内核裁剪编译、根文件系统制作与系统调试优化

4.数据采集系统:ADC采集 + 队列缓冲 + 串口上传,各功能独立为任务。

此阶段可进阶

  1. Yocto/Buildroot 深度定制 掌握 BitBake、Layer、Recipe、BSP 层定制、SDK 生成、发行版裁剪,能为自定义板卡构建可量产的 Linux 镜像。

  2. 启动优化与系统安全 学习 U-Boot SPL、启动时间优化、安全启动、签名校验、A/B 分区、OTA 升级、恢复模式,理解产品级系统更新机制。

  3. 内核裁剪与实时性优化 掌握内核配置、驱动模块化、PREEMPT_RT、内存裁剪、启动日志分析、根文件系统瘦身,能做面向产品的系统优化。

  4. 文件系统与存储进阶 深入只读根文件系统、overlayfs、UBIFS、ext4、NFS 根文件系统、eMMC/SD 启动,理解掉电保护与数据可靠性。

  5. 设备树高级应用 掌握 pinctrl、clock、regulator、中断控制器、总线节点、自定义板级 DTS,能独立适配新硬件。

  6. 进阶目标 能从零为一块自定义板卡完成“U-Boot + Kernel + RootFS + 设备树”的移植、裁剪、构建和启动调试。 对应下一阶段:第四阶段 Linux 驱动开发。

第四阶段:Linux驱动开发

核心知识

  • 内核模块基础:module_init/module_exit、模块参数、符号导出

  • 字符设备驱动:file_operations、cdev、自动创建设备节点

  • 设备模型:kobject、kset、sysfs、udev规则

  • 设备树:DTS语法、节点与属性、驱动中解析设备树

  • 平台设备驱动:platform_driver/platform_device、总线匹配机制

  • 中断处理:request_irq、中断上半部与下半部(tasklet、工作队列)

  • 常见外设驱动:GPIO、I2C、SPI、PWM等子系统驱动开发

推荐课程与资源

  • 《Linux设备驱动开发(第2版)》 (John Madieu著):涵盖内核模块、字符设备、内存管理、RTC、IIO、IRQ、DMA等,从零开始讲解驱动编写

  • 《Linux驱动开发入门与实战(第3版)》 :清华大学出版社“Linux典藏大系”,配有499分钟教学视频

  • 正点原子《I.MX6U嵌入式Linux驱动开发指南》 :以i.MX6ULL为平台,逐章讲解各类驱动开发

  • 野火《嵌入式Linux驱动开发实战指南》 :基于LubanCat-RK系列板卡,配套完整实验环境搭建教程

实践任务

  1. 入门:编写Hello World内核模块,实现加载/卸载

  2. 字符设备:实现一个虚拟字符设备驱动,支持open/read/write/ioctl

  3. GPIO驱动:编写LED和按键驱动,通过sysfs控制

  4. I2C驱动:为I2C传感器(如温湿度传感器)编写驱动

  5. 综合:为SPI屏幕编写驱动,或实现基于中断的按键输入子系统

驱动阶段的核心是内核模块、字符设备驱动、设备树配置、平台总线与各类外设驱动开发。

此阶段可进阶

  1. 内核子系统深入 学习 V4L2、ALSA、IIO、Input、MMC、USB、网络设备、RTC、Watchdog、PWM 等子系统,能开发复杂外设驱动。

  2. 总线与驱动框架进阶 深入 platform、I2C、SPI、Regmap、GPIO、MFD、sysfs、debugfs、udev,理解 Linux 设备模型与总线匹配机制。

  3. 高级内核主题 掌握 DMA、中断下半部、工作队列、tasklet、并发与锁、内存管理、电源管理、时钟框架、Regulator 框架。

  4. 内核调试与稳定性 熟练使用 ftrace、perf、kgdb、kasan、oops/panic 分析、crash dump、动态调试,能定位内核崩溃、死锁、内存泄漏和性能瓶颈。

  5. 内核社区与工程化 学习内核编码规范、提交 patch、参与邮件列表、编写驱动文档,能维护自己的 BSP 驱动包。

  6. 进阶目标 能独立开发、移植、调试和优化复杂外设驱动,具备内核问题定位与系统级调试能力。 对应下一阶段:第五阶段 综合项目实战。

第五阶段:综合项目

项目1:物联网数据采集网关

  • 功能:通过串口/I2C采集传感器数据 → 本地存储 → 通过MQTT/HTTP上传云端 → 支持OTA升级

  • 涉及技能:应用开发 + 驱动开发 + 网络编程 + 系统集成

  • 参考硬件:树莓派、i.MX6ULL、RK3568

项目2:嵌入式视频监控终端

  • 功能:USB摄像头视频采集(V4L2)→ 编码压缩 → 网络推流 → Web端查看

  • 涉及技能:V4L2框架、多线程、网络编程

项目3:智能家居控制面板

  • 功能:Qt/LVGL图形界面 + 触摸控制 + 多设备联动 + 语音交互

  • 涉及技能:GUI开发、驱动开发、进程通信

此阶段可进阶

  1. 产品化进阶:OTA、日志系统、看门狗、异常恢复、权限与安全、出厂测试。

  2. 云边协同进阶:MQTT/HTTP、边缘计算、规则引擎、远程运维、设备管理平台。

  3. 工程化进阶:CI/CD、Docker 交叉编译、自动化测试、版本管理、代码审查。

更多推荐