想走 Linux 方向,到底要不要先学 STM32 和 FreeRTOS?
经常有学弟学妹私信问我这个问题,今天就趁着摸鱼时间简单聊聊我的看法,希望能帮到一些还在纠结路线的兄弟。先说结论:看你具体想走哪个方向,不是一刀切的答案。
先搞清楚这俩到底是啥
在回答之前,先把概念捋一下,不然很多人其实是糊里糊涂在问。
Linux 本质上是一个操作系统内核,配合各种其他软件才能组成一个完整的操作系统,它是个软件。
STM32 是 ST 公司基于 ARM Cortex-M 系列内核做的 SoC 芯片(大部分是简单的 M3/M4/M7),它是个硬件。
说白了一个是软件一个是硬件,完全不是一个层面的东西。所以我一直挺纳闷的,"学 Linux 必须先学 STM32"这个说法到底是从哪传出来的……
那到底有没有关系?
有,但仅限于嵌入式 Linux 方向(包括 Linux 驱动开发)。
得先明白一点:Linux 从业方向真的非常非常多,随便列一下就有:
- 嵌入式 Linux
- Linux 内核开发
- 驱动开发
- 网络开发
- 应用开发
- 音视频开发
- 系统开发
- 运维
不同方向对底层硬件的依赖程度差太多了,不能一概而论。
想走嵌入式 Linux,建议先学 STM32 + FreeRTOS
如果你的目标很明确就是嵌入式 Linux 开发,我个人建议从 STM32 + FreeRTOS 入门。原因也很简单:
1. 学习曲线更平滑
Linux 本身是个非常复杂的软件系统,跑 Linux 的芯片(比如 A 系列)也比 STM32 复杂得多。直接上来啃 Linux,很容易被各种概念劝退。从简单的东西入门再过渡到复杂的,这个学习路径会舒服很多。
2. 硬件知识是互通的
从 STM32 上你能搞明白一个芯片大概由哪些东西组成——时钟、总线、GPIO、中断、DMA、外设控制器……这些知识在 A 系列芯片上几乎都是通用的,有些东西甚至完全一样。底层硬件这块吃透了,后面看 Linux 驱动就不至于一脸懵。
3. FreeRTOS 是 Linux 的"简化版预习"
FreeRTOS 是一个很轻量的 RTOS,任务调度、信号量、互斥锁、消息队列这些核心概念都有,但实现要简单得多。先把这些概念在 FreeRTOS 里搞明白,再去看 Linux 内核里那一套,理解起来会快很多。
但其他方向就真不一定了
最典型的就是 Linux 网络开发。
很多 STM32 芯片压根就没网卡这个外设,你学 STM32 对学 Linux 网络协议栈基本没什么帮助。这种情况下硬要先学 STM32,纯属浪费时间,不如直接上手 Linux 系统编程、socket 编程、协议栈那一套。
同理,如果你走的是应用开发、运维、音视频这些方向,STM32 的硬件知识用处也不大,按需学就行。
写在最后
总结一下我的看法:
- 嵌入式 Linux / 驱动方向 → 建议先 STM32 + FreeRTOS 打底,再上 Linux
- 网络 / 应用 / 运维 / 音视频方向 → 直接学 Linux 就行,STM32 不是必需的
- 完全不知道自己要走哪个方向 → 那就先 STM32 + FreeRTOS,反正硬件基础学了不亏,后面拐弯也来得及
之前参考的一个指南比较好 有需要的同学可以看看
嵌入式软件工程师面试完全指南
把整个秋招攒下来的面经全整理在这里了,目前32篇 / 12w+字,持续更新中。
内容覆盖:C语言陷阱 / 计网高频 / 操作系统 / RTOS / Linux驱动 / 通信协议 / 硬件基础——基本你面试会被问到的,这里都有。
已经有 4.7w+ 同学在看,3300+ 订阅,数据放这,口碑自己说话。
适合面经基础薄弱、想系统梳理一遍的同学,后面只会越来越全。
https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

华为HUAWEI工作强度 1363人发布