嵌入式软件开发Linux方向学习路线
第一阶段:基础通识
需要掌握
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)
实践
-
在虚拟机中安装Ubuntu,完成日常操作从图形界面到命令行的迁移
-
用C语言实现一个简易通讯录(链表+文件存储)
-
编写Makefile编译多文件C项目
-
用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、套接字等
实践
-
文件操作类:实现一个文件复制工具,支持进度显示
-
多进程类:实现简易Shell(支持命令解析、管道、重定向)
-
网络类:编写TCP客户端/服务器,实现文件传输
-
综合类:串口数据采集程序——从串口读取传感器数据,写入日志文件,并通过TCP发送到远程监控端
全栈知识体系中,应用阶段的核心就是文件IO、多进程多线程、进程通信、串口/网络编程与业务功能开发。
此阶段可进阶
-
高并发网络编程进阶 深入
epoll+ 线程池 + Reactor/Proactor 模型,实现轻量级 HTTP 服务器、MQTT 客户端、WebSocket 通信,理解粘包/拆包、心跳、断线重连、协议编解码。 -
嵌入式 GUI 进阶 学习 LVGL 或 Qt(交叉编译 Qt),掌握触摸屏、framebuffer、显示驱动接口、界面与业务解耦,能做出“采集 + 显示 + 控制”的完整面板。
-
音视频与视觉进阶 学习 V4L2、ALSA、FFmpeg、RTSP/RTMP 推流,理解摄像头采集、编码压缩、网络传输、Web 端播放的完整链路。
-
系统编程与性能调优进阶 深入文件系统、内存映射、信号处理、进程调度、
strace/perf/gprof性能分析,能定位 CPU、内存、IO、线程锁问题。 -
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)提供从零开始的移植教程
实践
-
为开发板配置并编译U-Boot,修改启动参数
-
裁剪Linux内核,添加所需驱动模块,编译并在开发板上启动
-
用BusyBox制作根文件系统,包含基本的系统命令
-
完成“U-Boot + Kernel + RootFS”的最小系统移植
系统阶段的核心是U-Boot移植、内核裁剪编译、根文件系统制作与系统调试优化
4.数据采集系统:ADC采集 + 队列缓冲 + 串口上传,各功能独立为任务。
此阶段可进阶
-
Yocto/Buildroot 深度定制 掌握 BitBake、Layer、Recipe、BSP 层定制、SDK 生成、发行版裁剪,能为自定义板卡构建可量产的 Linux 镜像。
-
启动优化与系统安全 学习 U-Boot SPL、启动时间优化、安全启动、签名校验、A/B 分区、OTA 升级、恢复模式,理解产品级系统更新机制。
-
内核裁剪与实时性优化 掌握内核配置、驱动模块化、PREEMPT_RT、内存裁剪、启动日志分析、根文件系统瘦身,能做面向产品的系统优化。
-
文件系统与存储进阶 深入只读根文件系统、overlayfs、UBIFS、ext4、NFS 根文件系统、eMMC/SD 启动,理解掉电保护与数据可靠性。
-
设备树高级应用 掌握 pinctrl、clock、regulator、中断控制器、总线节点、自定义板级 DTS,能独立适配新硬件。
-
进阶目标 能从零为一块自定义板卡完成“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系列板卡,配套完整实验环境搭建教程
实践任务
-
入门:编写Hello World内核模块,实现加载/卸载
-
字符设备:实现一个虚拟字符设备驱动,支持open/read/write/ioctl
-
GPIO驱动:编写LED和按键驱动,通过sysfs控制
-
I2C驱动:为I2C传感器(如温湿度传感器)编写驱动
-
综合:为SPI屏幕编写驱动,或实现基于中断的按键输入子系统
驱动阶段的核心是内核模块、字符设备驱动、设备树配置、平台总线与各类外设驱动开发。
此阶段可进阶
-
内核子系统深入 学习 V4L2、ALSA、IIO、Input、MMC、USB、网络设备、RTC、Watchdog、PWM 等子系统,能开发复杂外设驱动。
-
总线与驱动框架进阶 深入 platform、I2C、SPI、Regmap、GPIO、MFD、sysfs、debugfs、udev,理解 Linux 设备模型与总线匹配机制。
-
高级内核主题 掌握 DMA、中断下半部、工作队列、tasklet、并发与锁、内存管理、电源管理、时钟框架、Regulator 框架。
-
内核调试与稳定性 熟练使用 ftrace、perf、kgdb、kasan、oops/panic 分析、crash dump、动态调试,能定位内核崩溃、死锁、内存泄漏和性能瓶颈。
-
内核社区与工程化 学习内核编码规范、提交 patch、参与邮件列表、编写驱动文档,能维护自己的 BSP 驱动包。
-
进阶目标 能独立开发、移植、调试和优化复杂外设驱动,具备内核问题定位与系统级调试能力。 对应下一阶段:第五阶段 综合项目实战。
第五阶段:综合项目
项目1:物联网数据采集网关
-
功能:通过串口/I2C采集传感器数据 → 本地存储 → 通过MQTT/HTTP上传云端 → 支持OTA升级
-
涉及技能:应用开发 + 驱动开发 + 网络编程 + 系统集成
-
参考硬件:树莓派、i.MX6ULL、RK3568
项目2:嵌入式视频监控终端
-
功能:USB摄像头视频采集(V4L2)→ 编码压缩 → 网络推流 → Web端查看
-
涉及技能:V4L2框架、多线程、网络编程
项目3:智能家居控制面板
-
功能:Qt/LVGL图形界面 + 触摸控制 + 多设备联动 + 语音交互
-
涉及技能:GUI开发、驱动开发、进程通信
此阶段可进阶
-
产品化进阶:OTA、日志系统、看门狗、异常恢复、权限与安全、出厂测试。
-
云边协同进阶:MQTT/HTTP、边缘计算、规则引擎、远程运维、设备管理平台。
-
工程化进阶:CI/CD、Docker 交叉编译、自动化测试、版本管理、代码审查。
更多推荐


所有评论(0)