关注、星标公众号,直达精彩内容

来源:知乎

作者:snowdream

刷知乎看到下面这个提问。

单片机6年想转嵌入式Linux ,不知如何下手?

现在挺尴尬,做的单片机产品总是感觉重复重复再重复,想学习点新东西,不知道如何转。

说实话,这个问题自己关注了很久。

今天就借题主这个问题,回顾一下自己的 MCU->Linux 的技术道路。

期间有过技术突破时候的快乐,也有面对技术难题时候的苦恼和彷徨乃至想要放弃。

站在今天回头看,自己对于技术的坚持才能支持自己一步一步走下来。

希望我的经历和建议,能够对题主和其他对嵌入式技术有兴趣爱好的朋友,有所帮助。

我是本科阶段就开始接触51单片机,也经历了电子大赛的考验。

硕士阶段也使用 MSP430 做出过一些产学研结合的嵌入式产品,也进行了小批量的实用。

虽然硕士阶段也有接触 Linux 嵌入式开发,但是回顾自己的硕士阶段,PLC+组态和 MSP430 MCU 的确是我的优势技术(毕业课题搞的 FPGA+Verilog 上不了台面,当时不知天高地厚去面试 FPGA 岗位,结果可想而知)。

入职华为后,虽然是 Linux、VxWorks的操作系统,但是其实接触最多的还是 MCU 以及 Linux 用户态下的应用编程。在大一点公司有过经历的人都知道,螺丝钉就是螺丝钉,你永远只能看到树木看不到森林。不过华为几年,我的编码能力的确有了大幅度质的提高。

当年离开华为,和题主的想法有些类似,每天都是面对基本相同的芯片,做的永远是自己最熟悉的模块,产品重复造轮子的现象也很严重。想去学习新的技能栈也没有任何时间和精力。

终于等到了乙方通信芯片供应商给出的 Linux 嵌入式开发的 offer,想着自己也曾经搞过Linux嵌入式,有些基础就欣然跳入了这个芯片巨头500强做通信协议栈的开发。

理想很丰满,现实很骨感。可以说嵌入式 Linux 和 MCU 的开发,有相同和相通,但是差别也是非常巨大的。但是,对于答主来说退无可退,而且答主也看好了 Linux 在技术壁垒上的优势。怎么办?只能拿出当年刚入职华为死啃C语言的劲头,干就完了。

当年没有知乎这样的知识问答平台,就找了新公司的老员工还有答主同届毕业搞 Linux 嵌入式开发的同学咨询经验和学习路线。在收到他们热心的回复和指导后,答主开始了又一轮的死啃 Linux 嵌入式技术旅程。

Linux 的嵌入式开发从大类来看,分为 BSP 和应用开发

答主为了应付新工作的挑战,先选择了嵌入式 Linux 应用开发的复习及进阶。后面等答主离开这家公司自主创业的时候,也因为成本问题也自己死啃了嵌入式Linux的BSP,这里咱先说应用。

1. Shell、VIM 及 Makefile

很多朋友可能说,这两个工具有必要学习么?我的建议是,非常有必要。如果你连基本的 shell 都不懂,怎么去捣鼓 Linux 的文件系统。

如果 VIM 用的不好,虽然 windows的文件夹可以和Linux系统映射,但是 windows 下的字符编码经常在 Linux 下引起莫名其妙的问题。你说VIM的文本编辑你要不要学习一下?

至于 Makefile,搞 MCU,DSP 的朋友可能都比较陌生。因为 MCU,DSP 的配套编码下载软件帮你搞定了 Makefile,你只需要在 UI 界面下配置一下就可以自动生成编译文件链。比如 Keil中,你告诉 Keil 编译文件在哪里,宏定义是啥就行了。可是当时答主编译 Linux,只能自己手动在 Maikfile 中告诉嵌入式编译器,编译什么文件,生成什么文件等等:

另外:学会搭建交叉编译环境,也是一个嵌入式 Linux 开发人员必须的技能。这个东西没啥技术可言,理解大概原理半个小时搞定。

以上这些,不建议拿出大块时间进行学习和操练。工作之余,安装个虚拟机环境和Linux 系统,买本基本的 Shell 教程,捣鼓几天基本 Shell 和 VIM 就差不多了。

至于Makefile,推荐网上自行寻找一下《跟我一起学Makefile》这篇古老的文档。

2. Linux 常用 API

学习既然题主和当年答主一样,都是从 MCU 过来的。C语言肯定没有问题。如果题主接触过 RTOS 那理解 Linux,也会快很多。

即使没有 RTOS 的经验,也没有关系。从头开始学,反而少受到以前知识和理解的影响。

其实常用的 Linux 应用态编码,主要用到的就那么几个库和 API:多线程,多进程,阻塞非阻塞等理论互斥机制:读写锁,自旋锁等线程通信机制和信号网络通信 Socket 其他你工作可能涉及到的。

跟着一本书,从头看下来,边看边用工作实践,边用你上面装好的虚拟机+Linux系统进行编码验证。有基础的情况下,还是很容易入门和上手的。

如果没有 RTOS 的概念和基础,也真的不用担心,你理解 MCU 的 RTOS 无非就是能让学习 Linux 线程和进程更快一些,不理解那就学的慢点而已。这里推荐我用过的教材,不一定多高赞,但是个人感觉足够用:

至于 UI 开发是否要学习,就看题主的工作情况。

3. Debug 技术

耐心复习完前面两个阶段的知识,并配合以工作和自己虚拟机环境的编码练习。基本上一个项目边学边干下来,题主完全可以摸到嵌入式 Linux 的门道。

不过,但凡程序总会 有bug。以前 MCU 的 IDE 可以帮助我们提供一些Debug信息,断点调试等手段。在 Linux 下,我们只能依靠 GDB 这个强大的工具,帮助我们在 Linux 的世界里,寻找 Bug 的蛛丝马迹。

关于 GDB 的学习,网络上有很多资料。策略依然是边学,边干,边总结。积累多了,GDB 自然就会用了。这里就不再多说。答主经过了死啃阶段,在项目过程中,慢慢实现了Linux应用开发的转变。答主编写的通信芯片底层协议的代码,没准都用在各位朋友的电脑和手机芯片上,哈哈。

这个过程虽然很艰辛,但是对于追求技术进阶的人来说,学习新技术和新技能,永远是快乐的。

其实,Linux Bsp 也是嵌入式 Linux 开发的另一个大头。答主在后期合伙创业中,也是通过死啃的方式,掌握了基本的Linux Bsp 技能栈。过程和路线因为今天篇幅有点长了,写的太多了。后续如果有朋友感兴趣或者需要,答主再来继续往下写怎么从 Linux 的应用开发,扩展到Linux Bsp 开发的技能栈领域。

以上,仅代表个人经历和观点,仅供参考。另外,如果里面有技术说的不准确乃至错误的地方,还请各位批评指正。

作者:snowdream

来源:知乎

-END-

猜你喜欢(点击下划线阅读)

用单片机控制导弹?

你眼中的嵌入式是什么样?

为什么很多电器设备都要使用单片机?

最 后

若觉得文章不错,转发分享,也是我们继续更新的动力。

5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等

点击下方卡片,在公众号内回复「更多资源」,即可免费获取。

单片机6年想转嵌入式Linux ,不知如何下手?相关推荐

  1. 从单片机工程师的角度看嵌入式Linux

    前言 这篇文章简单我们来一起梳理嵌入式Linux的一些知识,方便于一些想跟我一样想要由单片机进阶到嵌入式Linux的朋友做一些参考学习. 现在随着嵌入式Linux的教程不断增多,相信应该有不少学单片机 ...

  2. 单片机转嵌入式Linux的思考

    一.你真的决定要转嵌入式Linux吗? 要不要从单片机转嵌入式Linux是一个影响到职业发展的严肃决策,火哥不能帮你拿主意,只能帮你列出利弊,你需要根据自身的各种环境(比如所在城市Linux嵌入式相关 ...

  3. 是否要从单片机转为嵌入式Linux

    最近很多童鞋投票并咨询如何从单片机转为嵌入式Linux开发.看来读者圈中做单片机,RTOS的不少.尽管小编目前从事Linux/Android方面的嵌入式开发工作,但是读书的时候也有5年左右单片机裸机和 ...

  4. 通俗易懂,嵌入式Linux驱动基础

    前言 上一篇分享的:<从单片机工程师的角度看嵌入式Linux>中有简单提到Linux的三大类驱动: 我们学习编程的时候都会从hello程序开始.同样的,学习Linux驱动我们也从最简单的h ...

  5. 【正点原子Linux连载】第一章 应用编程概念-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  6. 学习嵌入式linux与ARM开发板入门方法(一)

    嵌入式开发板(Embedded development board)就是半导体行业分工合作的载体之一,它为开发产品的厂商提供基本的底层硬件.系统和驱动等资源,使得用户不需要再投入人力和时间来完成这些底 ...

  7. 如何学习嵌入式linux[转]

    嵌入式时代已经来临,你还在等什么?   ---循序渐进学习嵌入式开发技术 最近经常有用人单位给 我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们说他们单位急需要懂得在嵌入式linux环境下 ...

  8. 嵌入式linux,老手给新手的建议

    嵌入式时代已经来临,你还在等什么?  ---循序渐进学习嵌入式开发技术 最近经常有用人单位给 我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们说他们单位急需要懂得在嵌入式linux环境下的 ...

  9. 嵌入式linux sd卡读写,嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(二)...

    嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 一.开发环境 主  机:VMWa ...

最新文章

  1. 很多优秀的软件公司和开发者为什么愿意开源和共享?
  2. 别瞎学了,这几门语言要被淘汰了!
  3. linux 单引号,双引号,反引号
  4. 如何根据ABAP类的一个方法名称,反查出这个类的名称
  5. 针对新手的Java EE7和Maven项目–第8部分
  6. 【树莓派】做一个备份镜像
  7. python动态心形代码_Python实现酷炫的动态交互式数据可视化,附代码!
  8. 【android高级编程】简答题汇总
  9. WEB2.0 XHTML代码规范
  10. BP神经网络预测实例(matlab代码,神经网络工具箱)
  11. VHDL——74LS138译码器
  12. maven环境setting配置文件详解
  13. Excel VBA 高级编程-出入库系统
  14. 思辨与立场阅读笔记-02 成为你自己思维的批判家
  15. 如何给计算机c盘加内存,电脑C盘内存太小_这个方法教你扩大C盘空间 - 驱动管家...
  16. waitpid status参数介绍
  17. 数据分析必备 | 逻辑思维分析方法
  18. 【Multisim仿真】74LS194组成的8个led流水灯
  19. Python黑马头条推荐系统第五天 头条排序模型进阶-神经网络
  20. 爬取QQ音乐周杰伦歌曲的歌词

热门文章

  1. CL_BSP_WD_VIEW_MANAGER-MANIPULATE_RESPONSE
  2. 100行JavaScript代码实现JavaScript
  3. 推荐一个在线图片处理神奇,图片处理绝大多数需求,都能在浏览器里搞定
  4. 在SAP云平台ABAP编程环境里使用CAP模型创建Fiori应用
  5. 使用Excel导入数据到SAP Cloud for Customer系统
  6. SAP Fiori refreshSecurityToken
  7. where and when is Angular scope initialized
  8. Document builder customizing
  9. COM_ASET check in CRM Middleware inbound scenario
  10. ABAP runtime error CALL_FUNCTION_ILL_DECFLOAT_LEN