Harmony会成为下一个Linux吗?

Harmony会成为下一个Linux吗?

作为一个在嵌入式领域摸爬滚打了6年的老码农,看到这个问题我第一反应是——这问题问得太早了,但又问得恰到好处。

先说结论吧

Harmony能不能成为下一个Linux,取决于它能不能像Linux当年那样,让全世界的开发者都觉得“用它能赚到钱”。

注意啊,不是“用它能做出牛逼的东西”,而是“能赚到钱”。这是两码事。

我为什么这么说?

2015年我刚毕业那会儿,在厦门某马做单片机开发。那时候组里有个老哥,天天跟我吹Linux多牛逼,开源社区多繁荣。我就问他一句:“那你为啥不去搞Linux?”

他愣了半天,说:“公司项目用的STM32,我能咋办?”

你看,这就是现实。

后来我27岁跳到外企做车载Linux,才真正理解了Linux为什么能成为今天的Linux——不是因为它技术多先进,而是因为整个产业链都在用它赚钱。

芯片厂商基于它做BSP能卖芯片,方案商基于它做产品能接项目,程序员学它能涨薪跳槽,培训机构教它能收学费。这才是一个生态真正的护城河。

Harmony现在的处境

说实话,Harmony现在有点像2005年左右的Android——技术框架搭起来了,但生态还没跑通。

我最近接了几个企业咨询的单子,有做IoT的,有做车机的,他们问我最多的问题不是“Harmony技术行不行”,而是“用Harmony能不能降本?能不能快速出货?万一华为哪天不维护了怎么办?”

你看,打工人关心的永远是最现实的问题。

我在公众号写Linux相关内容这些年,涨粉最快的永远不是那些讲内核原理的硬核文章,而是“如何用Linux接外包月入2万”这种标题党。因为大家要恰饭啊。

Linux当年是怎么起来的?

很多人以为Linux是靠技术先进起来的,错了。

Linux真正起飞是在2000年后,IBM、红帽这些大厂开始all in的时候。为啥?因为他们发现用开源能赚更多的钱——卖服务比卖License利润更高,而且不用养那么多研发。

再看国内,为啥这么多公司用Linux?不是因为情怀,是因为省License费啊老铁!

我在外企那几年,光Android的License费就能省几百万美金。这钱省下来,老板开心,我们年终奖也多。这才是Linux在中国真正普及的原因。

Harmony的机会在哪?

说句可能得罪人的话——Harmony最大的机会不在技术,在政策。

如果哪天上面一纸文件下来,说某些领域必须用国产系统,那Harmony立马就能起飞。你看现在信创市场多火?麒麟、统信这些国产Linux发行版,技术比Ubuntu强吗?不见得。但人家有政策扶持啊。

但这也是Harmony最大的风险——如果只靠政策,没有真正的商业闭环,那就是空中楼阁。

我见过太多这样的项目了。政府补贴一停,公司立马黄。

真正的问题是什么?

Harmony要成为下一个Linux,需要解决三个问题:

第一,让芯片厂商赚到钱。

现在做Harmony芯片的有几家?瑞芯微、全志?远远不够。Linux之所以强,是因为从ARM到x86,从高通到MTK,大家都在做。芯片厂商才是生态的地基。

第二,让方案商活下去。

我接触过一些做Harmony方案的小公司,说实话日子不好过。客户要的是成熟稳定能快速出货的方案,不是“未来可能很牛”的东西。方案商活不下去,生态就是空谈。

第三,让开发者看到前途。

现在学Harmony的人多吗?不多。为啥?因为招聘网站上Harmony的岗位太少了。我一个做自媒体的,天天有人问我“学Harmony有前途吗?能找到工作吗?”

你看,大家关心的还是能不能赚钱。

我的判断

Harmony会不会成为下一个Linux?有可能,但至少还要5-10年。

这5-10年里,它需要:

  • 让至少50家芯片厂商基于它赚到钱
  • 让至少5000家方案商靠它活下去
  • 让至少50万开发者因为它涨薪跳槽

只有这样,它才能真正成为一个生态,而不是一个项目。

Linux用了15年才真正统治服务器市场,用了10年才在移动端站稳脚跟。Harmony凭什么能更快?

但话说回来,中国市场足够大,政策支持力度也够强。如果华为能扛住压力,持续投入,Harmony是有机会的。

只是这个过程,注定不会一帆风顺。

更多编程学习资源


嵌入式学习路线(2026最新版)

说完Harmony,聊聊嵌入式学习这事儿。

我24岁误打误撞进了这行,28岁开始写公众号分享经验,30岁靠这个赚到第一个百万。这些年带过不少新人,也见过太多人走弯路。

今天就把我这6年踩过的坑、总结的经验,毫无保留地分享给你们。

1. 学习大纲

2. 必看开源视频

B站高质量教程

C语言与数据结构:

  • 《郝斌C语言自学教程》 虽然是老视频,但讲得真的透彻。我当年就是看这个入门的,郝老师讲指针那部分,比我大学老师讲得清楚多了。180集看着多,其实每集也就20分钟,上下班地铁上就能刷完。 链接: bilibili.com/video/BV1o
  • 《浙大数据结构》陈越、何钦铭 这个是真的神课,浙大的良心之作。我做外包项目的时候,很多算法优化的思路都是从这门课里学的。特别是讲树和图那几节,配合PTA刷题,进步飞快。 链接: bilibili.com/video/BV1K

STM32单片机:

  • 《正点原子STM32开发板配套视频》 这个必须推。我在某马那会儿,组里新人都是看这个上手的。正点原子的视频最大的优点是理论+实战结合得好,不会让你光听理论云里雾里,每一节都有对应的代码和硬件实验。而且他们的开发板资料真的全,原理图、PCB、例程全开源。 链接: bilibili.com/video/BV1t
  • 《野火STM32视频教程》 野火的教程更偏工程化一些。我特别喜欢他们讲RTOS那部分,把FreeRTOS的任务调度、信号量、消息队列讲得很清楚。如果你想往产品级开发方向走,野火的教程更适合。 链接: bilibili.com/video/BV18

Linux系统编程:

  • 《Linux C编程一站式学习》宋劲杉 这个课程我反复看了三遍。第一遍看懂了60%,第二遍看懂了80%,第三遍看的时候已经在外企做Linux开发了,很多当时不理解的点突然就通了。特别是讲进程、线程、信号那部分,结合内核源码分析,醍醐灌顶。 链接: bilibili.com/video/BV1K
  • 《韦东山嵌入式Linux》 韦老师是我见过把驱动开发讲得最通俗易懂的。他那个“先用起来,再深入原理”的教学思路特别适合新手。我当年就是看他的视频,一周时间搞定了字符设备驱动,然后在公司项目里直接用上了。 链接: bilibili.com/video/BV1w

嵌入式Linux系统:

  • 《正点原子Linux开发实战指南》 从U-Boot到Kernel到根文件系统,整个流程讲得很完整。我做企业咨询的时候,经常推荐客户的工程师看这个。特别是讲设备树那部分,很多人看内核文档看不懂,看这个视频就豁然开朗了。 链接: bilibili.com/video/BV1w

进阶内容:

  • 《100ASK_IMX6ULL裸机开发》 想深入理解ARM架构和底层启动流程,这个课程必看。韦东山团队出品,质量有保证。我在写公众号文章分析启动流程的时候,很多素材都是从这个课程里来的。 链接: bilibili.com/video/BV1w
  • 《宋宝华Linux驱动开发》 宋老师是国内Linux驱动领域的大牛,他的课程偏实战。如果你已经有一定基础,想往驱动开发方向深耕,这个课程能让你少走很多弯路。我在外企做车载Linux的时候,很多疑难问题都是参考他的思路解决的。 链接: bilibili.com/video/BV14

图文教程推荐:

  • 《Linux C编程一站式学习》(开源电子书) 网址: akaedu.github.io/book/ 这本书配合视频看效果最好,很多概念视频里一带而过的,书里会详细展开。我当年打印出来,在地铁上翻烂了。
  • 《蜗窝科技》 网址: wowotech.net 这是国内最好的Linux内核分析网站,没有之一。文章质量极高,很多内核机制分析得非常透彻。我写公众号的时候,经常参考他们的文章。不过新手可能看着吃力,建议有一定基础再看。

3. 必读经典书籍

入门必读

《C Primer Plus》(第6版)

这本书我前前后后看了四遍。第一遍大学时候囫囵吞枣看完,第二遍工作后重新看,第三遍带新人的时候又翻了一遍,第四遍是写公众号文章的时候查资料。

这本书最大的优点是讲得细,每个知识点都有大量例子。特别是指针那章,很多人看不懂谭浩强的《C程序设计》,看这本书就能看懂。我在某马带过一个实习生,C语言基础很差,我让他啃这本书两个月,后来写代码完全没问题。

《C和指针》

如果说《C Primer Plus》是教科书,那《C和指针》就是武功秘籍。这本书专门讲指针,而且讲得非常深入。

我印象最深的是第4章讲指针运算,把指针加减、指针数组、数组指针这些容易混淆的概念讲得清清楚楚。我在外企面试的时候,面试官问我“int (*p)[10]和int *p[10]有什么区别”,就是靠这本书打的底。

建议有一定C语言基础后再看,新手直接看可能会懵。

《数据结构与算法分析——C语言描述》

这本书比《算法导论》友好多了,代码都是C语言实现的,直接能跑。我做外包项目的时候,经常需要优化算法,这本书翻得最多。

特别是第3章讲链表、第4章讲树,写得非常清楚。我在公众号写过一篇《手撕LRU缓存算法》,里面的链表+哈希表实现,就是参考这本书的思路。

单片机开发

《STM32库开发实战指南》(野火)

野火的书和他们的视频一样,工程化做得好。这本书最大的特点是代码注释详细,每个寄存器配置都会解释为什么这么写。

我在某马那会儿,手头常备这本书。遇到问题先看书,书里没有再去翻数据手册。特别是讲定时器、DMA那部分,比ST官方的参考手册好懂多了。

《深入浅出ARM Cortex-M3》(宋宝华)

这本书偏底层,讲ARM架构、中断、异常处理这些。如果你想深入理解STM32的工作原理,而不是只会调库,这本书必看。

我在外企做车载项目的时候,遇到过一个诡异的bug——系统跑着跑着就死机,调试了一周才发现是中断优先级配置错了。后来重新看这本书的第6章,才彻底理解了NVIC的工作机制。

《FreeRTOS内核实现与应用开发实战指南》(野火)

学RTOS必看。这本书把FreeRTOS的任务调度、内存管理、同步机制讲得很透彻,而且有大量实战案例。

我特别喜欢第12章讲任务间同步,把信号量、互斥锁、事件组的使用场景分析得很清楚。我在做IoT项目的时候,多任务之间的通信就是参考这本书设计的。

Linux系统编程

《UNIX环境高级编程》(APUE)

这本书是Linux编程的圣经,没有之一。我在外企那几年,这本书一直放在工位上,遇到问题就翻。

全书700多页,内容非常全面——文件IO、进程控制、信号、线程、网络编程,应有尽有。我印象最深的是第10章讲信号,把信号的产生、捕获、处理讲得非常细致。我在处理多进程通信的时候,经常参考这章的内容。

建议:这本书不要从头到尾看,而是按需查阅。比如你要做网络编程,就重点看第16、17章;要做多线程,就看第11、12章。我看了三年,也没完全看完,但不影响工作。

《Linux程序设计》(Beginning Linux Programming)

这本书比APUE友好,更适合入门。内容涵盖Shell编程、文件操作、进程线程、网络编程,而且每章都有完整的实战项目。

我特别推荐第13章讲进程间通信,把管道、FIFO、消息队列、共享内存、信号量讲得很清楚,配合代码示例,很容易理解。我在做车载项目的时候,多个进程之间的通信方案就是参考这本书设计的。

《UNIX网络编程》(卷1:套接字联网API)

做网络编程必看。这本书把TCP/IP、Socket编程讲得非常深入,而且有大量实战代码。

我在做IoT项目的时候,需要实现MQTT客户端,就是参考这本书的第6章(IO复用)和第16章(非阻塞IO)。虽然最后用了开源库,但理解底层原理后,遇到问题调试起来快多了。

注意:这本书比较厚(900多页),建议有一定网络编程基础后再看。新手可以先看《Linux程序设计》的网络编程部分。

驱动开发

《Linux设备驱动程序》(LDD3)

驱动开发的经典教材,虽然基于2.6内核,但核心思想没变。这本书把字符设备、块设备、网络设备驱动讲得很清楚。

我在外企做驱动开发的时候,这本书翻烂了。特别是第3章讲字符设备驱动,从file_operations到ioctl,每个接口都有详细解释。我写的第一个驱动就是参考这本书的例程。

《Linux驱动开发实战》(宋宝华)

宋老师的书偏实战,而且基于较新的内核(4.x)。这本书最大的特点是代码多、案例多,每个知识点都有对应的驱动实例。

我特别推荐第10章讲设备树,把DTS的语法、设备树的解析、平台设备驱动讲得很透彻。现在做ARM Linux开发,设备树是绕不过去的,这章必须吃透。

《深入Linux内核架构》

这本书很厚(1200多页),但如果你想深入理解Linux内核,这本书必看。从进程调度到内存管理,从文件系统到网络协议栈,讲得非常深入。

我在写公众号分析内核机制的时候,经常参考这本书。不过新手不建议看,建议工作1-2年后,有一定内核开发经验再看。

嵌入式Linux系统

《嵌入式Linux应用开发完全手册》(韦东山)

韦老师的书和他的视频一样,通俗易懂。这本书从Bootloader到Kernel到根文件系统,整个流程讲得很完整,而且有大量实战案例。

我特别推荐第5章讲Buildroot,把如何定制根文件系统讲得很清楚。我在做企业咨询的时候,帮客户定制嵌入式Linux系统,就是用的Buildroot,参考的就是这本书。

《Building Embedded Linux Systems》

这本书偏工程化,讲如何构建一个完整的嵌入式Linux系统。从交叉编译工具链到Bootloader移植,从内核配置到根文件系统制作,每个环节都有详细说明。

我在外企做车载项目的时候,需要从零搭建一个嵌入式Linux系统,就是参考这本书。虽然是英文版,但技术书籍的英文其实不难,配合Google翻译完全能看懂。

进阶书籍

《深入理解Linux内核》

这本书和《深入Linux内核架构》齐名,但侧重点不同。这本书更偏向内核源码分析,适合想深入研究内核的人。

我在分析内核启动流程的时候,参考了这本书的第2章。虽然基于2.6内核,但启动流程的核心逻辑没变,依然有参考价值。

《性能之巅》

做性能优化必看。这本书把Linux性能分析的方法论讲得很清楚,从CPU到内存,从磁盘到网络,每个子系统都有对应的分析工具和优化方法。

我在做车载项目的时候,遇到过系统卡顿的问题,就是用这本书介绍的perf、ftrace等工具定位的。虽然这本书偏运维,但对嵌入式开发也很有帮助。

4. 必做项目

做嵌入式最怕纸上谈兵,必须动手做项目。我这些年做过的项目、看过的开源项目,挑几个含金量高的推荐给你们。

单片机项目

智能小车(STM32)

  • 项目地址: github.com/Embedfire/eb
  • 推荐理由: 野火的电机教程配套代码,涵盖了直流电机、步进电机、舵机控制。我在某马那会儿,带新人都是让他们先做这个项目。通过这个项目,能掌握PWM、定时器、PID算法,而且成就感很强——看着小车跑起来,特别有动力。
  • 技术栈: STM32、PWM、PID、串口通信
  • 难度: ⭐⭐⭐

多功能智能手表(基于FreeRTOS)

  • 项目地址: github.com/moononournat
  • 推荐理由: 这是一个完整的智能手表项目,用的ESP32+FreeRTOS。包含GUI界面、蓝牙通信、传感器数据采集、低功耗管理。我在做IoT项目的时候,参考过这个项目的低功耗设计。
  • 技术栈: ESP32、FreeRTOS、LVGL、蓝牙
  • 难度: ⭐⭐⭐⭐

开源飞控(Betaflight)

  • 项目地址: github.com/betaflight/b
  • 推荐理由: 这是目前最流行的开源飞控固件,代码质量非常高。如果你想深入学习传感器融合、PID控制、实时系统,这个项目必看。我在写公众号分析姿态解算算法的时候,就是参考的这个项目。
  • 技术栈: STM32、传感器融合、PID、实时控制
  • 难度: ⭐⭐⭐⭐⭐

Linux应用项目

基于Qt的音乐播放器

  • 项目地址: github.com/Italink/QMus
  • 推荐理由: 这是一个完整的Qt音乐播放器,界面漂亮,功能完善。我在外企做车载项目的时候,HMI开发就是用的Qt,参考过这个项目的界面设计。通过这个项目,能掌握Qt编程、多媒体框架、多线程。
  • 技术栈: Qt、GStreamer、多线程
  • 难度: ⭐⭐⭐

视频监控系统(基于V4L2)

  • 项目地址: github.com/mpromonet/v4
  • 推荐理由: 这个项目实现了一个轻量级的RTSP服务器,可以把摄像头数据通过网络推流。我在做IoT项目的时候,需要实现远程视频监控,就是参考的这个项目。代码不多,但麻雀虽小五脏俱全,V4L2、网络编程、多线程都涉及到了。
  • 技术栈: V4L2、RTSP、网络编程
  • 难度: ⭐⭐⭐⭐

开源NAS系统(OpenMediaVault)

  • 项目地址: github.com/openmediavau
  • 推荐理由: 这是一个基于Debian的NAS系统,功能非常强大。如果你想学习Linux系统管理、Web开发、存储管理,这个项目值得研究。我在做企业咨询的时候,帮客户搭建过私有云存储,就是基于这个项目改的。
  • 技术栈: Linux系统管理、PHP、存储管理
  • 难度: ⭐⭐⭐⭐

Linux驱动项目

字符设备驱动模板

  • 项目地址: github.com/Johannes4Lin
  • 推荐理由: 这是一个非常好的驱动开发教程,从最简单的Hello World驱动,到字符设备、平台设备、设备树,每个知识点都有对应的代码。我在带新人的时候,都是让他们先跟着这个教程走一遍。
  • 技术栈: 字符设备驱动、平台设备驱动、设备树
  • 难度: ⭐⭐⭐

USB摄像头驱动(UVC)

  • 项目地址: github.com/torvalds/lin
  • 推荐理由: 这是Linux内核自带的UVC驱动,代码质量非常高。如果你想学习USB驱动开发、V4L2框架,这个驱动必看。我在外企做车载项目的时候,需要适配一个特殊的USB摄像头,就是参考的这个驱动。
  • 技术栈: USB驱动、V4L2、视频采集
  • 难度: ⭐⭐⭐⭐⭐

SPI Flash驱动(MTD)

  • 项目地址: github.com/torvalds/lin
  • 推荐理由: 这是Linux内核的SPI Flash驱动,基于MTD框架。如果你想学习SPI驱动开发、Flash操作,这个驱动值得研究。我在做嵌入式Linux系统的时候,经常需要操作SPI Flash,这个驱动看了不下十遍。
  • 技术栈: SPI驱动、MTD框架、Flash操作
  • 难度: ⭐⭐⭐⭐

嵌入式Linux系统项目

Buildroot定制系统

  • 项目地址: github.com/buildroot/bu
  • 推荐理由: Buildroot是构建嵌入式Linux系统的利器,配置简单,编译快速。我在做企业咨询的时候,帮客户定制嵌入式Linux系统,90%都是用Buildroot。建议fork一份,自己定制一个最小系统,加深理解。
  • 技术栈: Buildroot、交叉编译、根文件系统
  • 难度: ⭐⭐⭐⭐

Yocto项目

  • 项目地址: git.yoctoproject.org/cg
  • 推荐理由: Yocto是更强大的嵌入式Linux构建系统,但学习曲线陡峭。如果你想往高端嵌入式方向发展,Yocto必须掌握。我在外企做车载项目的时候,用的就是Yocto,虽然一开始很痛苦,但掌握后效率很高。
  • 技术栈: Yocto、BitBake、Layer管理
  • 难度: ⭐⭐⭐⭐⭐

OpenWrt路由器系统

  • 项目地址: github.com/openwrt/open
  • 推荐理由: OpenWrt是最流行的开源路由器系统,代码质量很高。如果你想学习网络编程、Linux系统定制,这个项目必看。我在做IoT网关的时候,就是基于OpenWrt改的。
  • 技术栈: Linux网络、iptables、UCI配置
  • 难度: ⭐⭐⭐⭐

综合项目

智能家居系统(HomeAssistant)

  • 项目地址: github.com/home-assista
  • 推荐理由: 这是一个完整的智能家居系统,支持上千种设备。虽然是Python写的,但架构设计非常值得学习。我在做IoT项目的时候,参考过它的设备管理、自动化规则设计。
  • 技术栈: Python、MQTT、REST API
  • 难度: ⭐⭐⭐⭐

车载信息娱乐系统(AGL)

  • 项目地址: git.automotivelinux.org
  • 推荐理由: AGL是Linux基金会的车载系统项目,包含了完整的车载软件栈。如果你想往车载方向发展,这个项目必须研究。我在外企做的就是车载项目,AGL的很多设计理念都有参考价值。
  • 技术栈: Yocto、Wayland、CAN总线
  • 难度: ⭐⭐⭐⭐⭐

工业控制系统(CODESYS)

  • 项目地址: github.com/beremiz/bere
  • 推荐理由: Beremiz是一个开源的PLC编程环境,支持IEC 61131-3标准。如果你想往工业控制方向发展,这个项目值得研究。我接过一些工控外包项目,就是用的这个工具。
  • 技术栈: PLC编程、实时控制、工业总线
  • 难度: ⭐⭐⭐⭐

5. 必刷经典面试题

这些年我面试过不少公司,也面试过不少候选人,总结了一些高频面试题。这些题目不是让你背答案,而是要真正理解背后的原理。

C语言基础

  1. 指针和引用的区别是什么?
  2. static关键字的作用有哪些?
  3. const关键字的作用,const int *p和int * const p有什么区别?
  4. volatile关键字的作用是什么?什么时候用?
  5. 宏定义和内联函数的区别?
  6. 结构体内存对齐的原则是什么?如何手动控制对齐?
  7. 大端和小端的区别?如何判断系统是大端还是小端?
  8. 如何实现一个不用第三个变量交换两个变量的值?
  9. 如何判断一个数是否是2的幂次方?
  10. 位操作实现加减乘除

数据结构与算法

  1. 单链表反转的实现
  2. 如何判断链表是否有环?如何找到环的入口?
  3. 两个有序链表如何合并?
  4. 二叉树的前序、中序、后序遍历(递归和非递归实现)
  5. 如何判断一棵树是否是二叉搜索树?
  6. 快速排序的实现原理和时间复杂度
  7. 堆排序的实现原理
  8. 如何在O(n)时间内找到数组中第K大的元素?
  9. LRU缓存算法的实现
  10. 字符串匹配算法(KMP)

操作系统

  1. 进程和线程的区别?
  2. 进程间通信的方式有哪些?各有什么优缺点?
  3. 什么是死锁?如何避免死锁?
  4. 虚拟内存的作用是什么?
  5. 用户态和内核态的区别?如何切换?
  6. 中断和异常的区别?
  7. 什么是上下文切换?开销在哪里?
  8. 如何实现一个生产者-消费者模型?
  9. 什么是内存泄漏?如何检测?
  10. 缓存一致性问题如何解决?

单片机开发

  1. STM32的启动流程是什么?
  2. 中断优先级如何配置?抢占优先级和响应优先级的区别?
  3. DMA的工作原理是什么?什么时候用DMA?
  4. 定时器的工作模式有哪些?
  5. SPI和I2C的区别?各适用于什么场景?
  6. UART通信如何保证数据可靠性?
  7. ADC的采样精度如何提高?
  8. PWM如何实现?占空比如何计算?
  9. 看门狗的作用是什么?如何使用?
  10. 低功耗模式有哪些?如何进入和退出?

RTOS

  1. FreeRTOS的任务调度算法是什么?
  2. 信号量和互斥锁的区别?
  3. 什么是优先级反转?如何解决?
  4. 消息队列和邮箱的区别?
  5. 如何实现任务间同步?
  6. 软件定时器和硬件定时器的区别?
  7. 临界区如何保护?
  8. 任务栈如何分配?如何确定栈大小?
  9. 空闲任务的作用是什么?
  10. 如何调试RTOS程序?

Linux系统编程

  1. fork()函数的返回值是什么?父子进程如何区分?
  2. 僵尸进程和孤儿进程是什么?如何避免?
  3. exec族函数的作用是什么?
  4. 信号的生命周期是什么?如何捕获信号?
  5. 守护进程如何创建?
  6. 线程同步的方式有哪些?
  7. 互斥锁和自旋锁的区别?
  8. 读写锁的使用场景是什么?
  9. 条件变量如何使用?
  10. 线程池如何实现?

Linux网络编程

  1. TCP和UDP的区别?
  2. TCP三次握手和四次挥手的过程?
  3. TIME_WAIT状态的作用是什么?
  4. 如何实现一个简单的TCP服务器?
  5. select、poll、epoll的区别?
  6. epoll的ET和LT模式有什么区别?
  7. 如何解决粘包问题?
  8. 如何实现心跳检测?
  9. 非阻塞IO如何实现?
  10. 如何优化网络性能?

Linux驱动开发

  1. 字符设备驱动的框架是什么?
  2. file_operations结构体的作用是什么?
  3. ioctl的作用是什么?如何使用?
  4. 如何在内核和用户空间传递数据?
  5. 内核模块的加载和卸载过程?
  6. 设备树的作用是什么?如何解析?
  7. 平台设备驱动的框架是什么?
  8. 中断如何申请和释放?
  9. 如何调试内核驱动?
  10. 内核同步机制有哪些?

嵌入式Linux系统

  1. U-Boot的启动流程是什么?
  2. 如何移植U-Boot到新的开发板?
  3. Linux内核的启动流程是什么?
  4. 如何裁剪Linux内核?
  5. 根文件系统的作用是什么?如何制作?
  6. Busybox是什么?如何配置?
  7. 交叉编译工具链如何生成?
  8. 如何调试嵌入式Linux系统?
  9. Buildroot和Yocto的区别?
  10. 如何优化嵌入式Linux系统的启动速度?

综合应用

  1. 如何设计一个智能家居系统?
  2. 如何实现一个实时视频传输系统?
  3. 如何设计一个低功耗的IoT设备?
  4. 如何实现OTA升级?
  5. 如何保证嵌入式系统的安全性?
  6. 如何进行性能优化?
  7. 如何处理内存碎片?
  8. 如何实现多核并行处理?
  9. 如何设计一个可靠的通信协议?
  10. 如何进行系统调试和问题定位?

6. 学习建议

最后聊聊学习方法,这是我这6年踩过的坑总结出来的。

不要贪多,要吃透

我见过太多人,今天学STM32,明天学树莓派,后天又去学Arduino,结果啥都没学会。

我的建议是:选一个方向,深挖下去。

比如你想做单片机开发,那就选STM32,把它吃透——GPIO、定时器、中断、通信接口、DMA,每个外设都要自己写代码验证。不要只看视频,一定要动手。

我在某马那会儿,用STM32做了半年项目,把常用外设都摸了个遍。后来换到外企,虽然用的是NXP的芯片,但上手很快,因为原理都是相通的。

理论和实践要结合

很多人学习有两个极端:要么只看书不动手,要么只做项目不看书。

正确的方式是:理论指导实践,实践验证理论。

比如学FreeRTOS,先看书理解任务调度、信号量、消息队列的原理,然后自己写代码验证。遇到问题再回头看书,这样印象最深。

我在外企做车载项目的时候,遇到过一个多任务死锁的问题。当时调试了两天,后来重新看《FreeRTOS内核实现》那本书,才发现是互斥锁使用不当。从那以后,我对RTOS的同步机制理解就特别深刻。

要有自己的项目

面试的时候,面试官最喜欢问:“你做过什么项目?”

如果你只是跟着教程做了几个demo,那没什么竞争力。你需要有一个完整的、能拿得出手的项目

我的建议是:选一个你感兴趣的方向,自己从零开始做一个项目。比如智能小车、无人机、智能家居,都可以。

关键是要完整——从需求分析、方案设计、硬件选型、软件开发、调试优化,整个流程走一遍。这样的项目,比你做十个教程demo都有价值。

我在某马那会儿,业余时间自己做了一个四旋翼飞控,从原理图设计到PCB打板,从姿态解算到PID调参,全部自己搞定。虽然最后没飞起来(笑),但这个项目让我对嵌入式开发有了全面的认识,后来面试的时候也成了加分项。

要学会看源码

很多人害怕看源码,觉得太难。但其实看源码是提升最快的方式

我的建议是:从简单的开始看,比如先看一些开源的字符设备驱动,理解框架后再看复杂的。

看源码的时候,不要一行一行看,要抓主线。先看整体流程,再看关键函数,最后再看细节。

我在外企做驱动开发的时候,经常需要参考内核源码。一开始看得很痛苦,后来掌握了方法,效率就高了。现在遇到问题,第一反应就是去看内核源码,往往能找到答案。

要学会提问

遇到问题,不要憋着,要学会提问。但提问也有技巧:

  1. 先自己尝试解决,Google、看文档、看源码,实在解决不了再问
  2. 描述问题要清楚,环境、现象、已尝试的方法,都要说清楚
  3. 选对平台,技术问题去Stack Overflow、CSDN、知乎,不要去微信群瞎问

我在写公众号的时候,经常有读者问我问题。有些人问得很好,我一看就知道他是认真思考过的;有些人就是伸手党,连错误信息都不贴,这种问题我一般不回。

要持续学习

嵌入式这行,技术更新很快。你不学习,很快就会被淘汰。

我的建议是:每天至少学习1小时。可以看书、看视频、写代码,形式不重要,重要的是坚持。

我从28岁开始写公众号,到现在3年了,每周至少写一篇技术文章。这个过程逼着我不断学习新东西,也让我对知识的理解更深刻。

而且持续学习还有一个好处:让你保持竞争力。我现在30岁,在嵌入式领域还算年轻,但如果我不学习,很快就会被95后、00后超越。

要学会总结

学完一个知识点,一定要总结。可以写博客、做笔记、画思维导图,形式不重要,重要的是把知识内化

我在外企那几年,每学一个新技术,都会写一篇技术文档。一开始是给自己看,后来发现写文档的过程,其实就是梳理思路的过程,对理解帮助很大。

后来我开始写公众号,把这些文档整理成文章发出来。没想到还有不少人看,这也成了我后来创业的基础。

最后说一句

嵌入式这行,说难也难,说简单也简单。难在知识面广,从硬件到软件,从底层到应用,都要懂;简单在只要你肯下功夫,一定能学会。

我一个学机械的,都能在这行混得还不错,你们肯定也可以。

关键是找对方法,坚持下去

加油,打工人!

更多编程学习资源

编辑于 2026-01-24 · 著作权归作者所有