Linux内核和驱动开发工程师的发展前景如何?
从事嵌入式开发是目前的热门领域。在进行职业规划时,很明显有三条路可走:
C1,嵌入式软件开发工程师
C2。嵌入式硬件开发工程师
C3。嵌入式驱动开发工程师。
在…之中
C1对于计算机专业的学生来说是一个选择,因为他们学的课程比较软,平时PC上的程序也比较多,所以做软件开发会相对容易一些。
C2被学习电子电路的学生认为是。他们熟悉模拟电路,能够设计高质量的电路板。
C3难度更大,需要同时熟悉软件和硬件,真正做到软硬件结合,搭建软硬件之间的桥梁。当然,行业内的待遇还是比较高的。
我们可以去一些招聘网站查看相关企业的岗位要求,这样在学习的时候就可以有一个明确的目标。今天看到一位学长的博文,讲的是如何成为一名优秀的驱动开发工程师。我很受鼓舞,愿意和大家分享。
什么是优秀的驱动开发工程师?
首先要明确我认为一个优秀的驱动开发工程师应该具备什么样的能力。下面是一个由易到难的需求列表。我个人认为应该有几个要求:
能够独立完成被驱动的功能开发任务。
能够分析和优化驱动程序的性能,针对具体硬件扬长避短。
能够充分了解模块的相关软硬件能力和发展方向,协助应用工程师最大化利用硬件能力。
可以辅助硬件工程师规划硬件设计,预防问题,寻求功能模块的最佳方案。
可以帮助定义系统架构,合理规划软硬件,寻求产品实现的最佳方案。
作为一名驱动工程师,我往往不会从零开始开发一个完整的子系统,而是针对特定的硬件和平台移植驱动,增加功能,解决bug等。如果我看一下这方面的外部表现:
解决这个问题,大概会有几个阶段:
我不知道窃听器在哪里。
我不知道如何解决这个问题
知道如何解决bug
知道如何找到bug
知道如何设计bug
知道如何发现bug(而不是撞见bug)其实并不简单。你需要对系统有足够的了解,以便能够发现可能的问题。
规划bug的难度更大,需要对问题的优先级做出准确的判断。没有完美的世界,只有适当的取舍、回避和防范。
从解决问题的过程来看,我认为可以分为几个阶段:
BUG发生-& gt;很多跟踪调试代码->;终于找到并解决了这个BUG
BUG发生-& gt;对可能原因的理论推测->;快速定位并解决bug
读码->;预测可能BUG-& gt;验证并解决错误
应该具备哪些素质?
那么你需要具备和发展什么样的品质和能力才能达到最佳的感染力呢?
首先,足够的硬件知识
能够读懂一个简单的原理图,能够分析硬件异常的可能原因,能够使用常用的硬件调试工具,我认为这是一个优秀的驱动工程师区别于其他软件工程师的必然和必要的职业素质。当然要看你的具体工作,这方面的要求是不一样的。
对于驱动开发者来说,如果不了解所开发的驱动外设的硬件原理和相关背景知识,很多情况下或许可以完成一些移植和修复的任务,但这就好比无源之水,无本之木,我相信是很难走远的。
第二,操作系统知识越多越好
做驱动开发,尤其是纯外设驱动移植,刚开始的时候,可能不需要太了解操作系统本身(比如内存管理,进程调度,锁,各种内核子系统的原理框架等。),并且可以顺利完成手头的一些工作。
但如果驱动需要优化,软件框架需要改进,或者需要跟踪解决疑难问题,那么对操作系统和内核本身的了解就会体现出它的价值。
对于Linux内核驱动开发者来说尤其如此。首先,代码是完全开源的,你有条件了解背后的运行机制。其次,Linux内核及其子系统始终处于快速进化和发展之中,你有必要跟上时代的步伐。
第三,强烈的好奇心和执着的热情
如果驱动开发不仅是你的爱好,也是你养家糊口的方式,我想,很多时候,你大概不会有机会专注于你最有经验的一两个模块的开发和维护。随着能力的增长,会要求你接触和掌握越来越多的各种驱动模块的开发。
对于这件事,包括我自己,有时候大概会有以下反应:
哇,原来的工作太长太无聊了。我很高兴做一份不同的工作。
啊?要不要再做其他模块?我手头的工作太多了!
这个模块很无聊,我不想做。
我相信大多数有志青年都是第一个表现出热情的。但是,有时候,我发现很多人的热情其实并不持久。一个新模块没做很久之后,他们又厌倦了。完成了吗?不一定,可能只是他们修改了几个bug就不无聊了。很多时候,我在面试前来应聘的工程师时,发现简历上写着我做过这个,做过那个,但是一旦被问到我解决过什么问题,做过什么驱动,框架,流程,原理,我就懵了。
我觉得如果我的目标是优秀,那么最低标准应该是具体驱动模块相关的子系统的整体工作流程和框架,并且要有足够的好奇心去了解和学习,而不仅仅是为了完成任务而工作,否则很难积累扎实的经验和技术。
第四,清晰的逻辑思维能力
也许一个软件开发者应该有这一点。但是作为一个驱动开发工程师,有时候,大多数情况下,工作的硬件环境并不完善。遇到问题时,需要分析判断错误原因是硬件问题还是驱动程序Bug。这个时候,清晰的逻辑思维能力就显得尤为重要。
五、良好的工作习惯
大多数人都不是天才。成为一名优秀的开发工程师,一是需要不断的努力,二是需要时间积累经验。在这个过程中,良好的工作习惯非常重要。比如注意设计文档的维护,记录工作中遇到的问题,及时记录过去的经验,合适的软件开发流程等等。很多人可能不愿意做的文档工作,真的很费时间。但是,唉。。。老了,好记性不如烂文笔。
。当然,其实设计文档更多的是给你提供一个思考的机会,过去经验的总结也可以服务于和你交流技术,共同进步的目的。
六、英语
这个也是必须的,没有办法,邮件列表,技术文档,社区,精通英语绝对是很大的优势,尤其是对于开源项目。阅读各种Spec标准文档的速度还是很重要的。阅读的可及性是一回事,能够像母语一样快速阅读令人耳目一新。唉,人生苦短高效!光是看文件,你不知道要比外国人多花多少时间。