以服务于中国广大创业者为己任,立志于做最好的创业网站。

标签云创业博客联系我们

导航菜单

单片机嵌入式创业,嵌入式以后创业的方向

  

  刷知乎看到下面的问题。   

  

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

  

  现在,这相当尴尬。我总觉得自己在不断重复。我想学点新东西,但不知道怎么转。   

  

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

  

  今天我就基于这个问题来回顾一下MCU-Linux的技术之路。   

  

  这期间有技术突破的喜悦,也有面对技术问题的苦恼和彷徨,甚至有放弃的欲望。   

  

  回顾今天,只有坚持技术,才能一步一步养活自己。   

  

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

  

     

  

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

  

  硕士阶段还用MSP430做了一些产学研用的嵌入式产品,也是小批量使用。   

  

  虽然我在硕士阶段也有接触Linux嵌入式开发的机会,但是回顾我自己的硕士阶段,PLC配置和MSP430 MCU确实是我的优势技术(毕业设计做到了)   

  

  Verilog上不了台面。当时不知道面试FPGA岗位有多大,结果可想而知)。   

  

  加入华为后,虽然是Linux和VxWorks的操作系统,但其实在Linux用户模式下的MCU和应用编程是最暴露的。   

  

  在大一点公司有过经历的人都知道,螺丝钉就是螺丝钉,你永远只能看到树木看不到森林.但是这几年,华为对我的编码能力进行了实质性的质的提升。   

  

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

  

  最后,到了乙方通信芯片供应商给出的嵌入式开发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,从事单片机和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

  

开发的技能栈领域。

  

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