努力成为嵌入式Linux开发的高手

时间:2021-11-12 08:33:12

原文地址:http://blog.csdn.net/cuijpus/article/details/4431815

1. 开场白

做手机开发进入第六个年头了,回头看看,有些正面和反面的应验总结一下,为新入者或者应验还不是很多的网友提供参考,有益的东西可以参考,不对的地方,可以从反面借鉴。

04年从南航研究生毕业后,到杭州一家手机软件公司,期间主要是在Qualcomm的平台上开发。进入这家公司和一位谭博士很有关系,我和谭博士很能谈得来,他人很好,很健谈,而且他很帮我,一直到现在我还是非常感激他对我的帮助!

由于刚进,肯定从最基本的做起:开发calendar相关的程序,这些手机的附件程序,不大,但是通过这个,可以对Qualcomm的平台熟悉起来。这期间受训了不少的东西:Qualcomm的扫盲;平台的资料;MontaVista Linux; 培训的过程很好,能吸收多少东西就不清楚了,现在我有很好的体会:我经常做嵌入式Linux方面的培训,想把东西讲的很彻底,就需要平时总结的很好,有很深入的理解,这样才能讲的很好。

期间由于项目组人员的变动,又中途接手了一个模块:Camera. 这个在当时看来是比较复杂的东西,而且在QualComm平台上面写程序,上层的application完全是重写的,这是Qualcomm平台的开发周期比较长的一个重要原因,和现在MTK的交钥匙方式相比。后来做集成时做了些Brew的移植,主要是过北京测试机构的测试关。

05年初 由于杭州的房价太离谱和家人的原因,我又回到了南京,直到现在…, 杭州很美丽,尤其是西湖…

期间做过TTPCOM平台的程序,除了短消息外,几乎所有的application都修改过:像phonebook、MP3 player,File Manager,Camera, Setting, Callog什么的,由于不是做原型机,而是迅速推向市场的手机产品,大部分application都是继承过来的,开发就是修改这些applications的bug. 在修改bug的过程中,肯定需要把程序的流程都摸得很清楚,然后才能改。有个体会:带着bug去分析掌握流程是很有效率的。

后来有机会研究了兄弟部门的TD-SCDMA的Arena平台. 这是大唐的平台,芯片用的是ADI, GUI用的是MiniGUI. 这个MiniGUI对于后来在Linux下面开发很有帮助。

从06年开始转向Linux手机平台了,这时业内手机操作系统还不是很热闹。MTK也没有闹的多狠。到07年11月时Android出来后,就比较热闹了。而且07年也是MTK取得长足进展的一年…

回头看看这几年的开发,不论哪个平台,基础都是最重要的。把平台的外衣脱掉,然后把平台肢解到最底层,发现都是谭浩强的C语言堆砌起来的东西。从在学校做课题时的软件水平,到企业里面正规的开发,中间有不少体会。下面写写,希望对新入者有帮助。

目前各个公司中大部分平台是商业化的东西,一般人得不到,对于想学嵌入式开发的,选择Linux是比较好的。

2. 树立一个能看见的目标

刚入门时很懵懂,也不去考虑几年后是什么样子。有个目标是很好的。下面是我从一个网站上看到的一个可以参考的目标:

n 软件系统架构高级工程师
任职要求:
1、7年以上该方面专心致志的经验;
2、带队开发过成功大量上市的LINUX高端智能手机或者高端MP4,并且自己还在一线从事编码工作,能够从事技术指导工作;
3、熟悉高端手机的整个研发流程,精通代码的规范、管理与控制,软件版本控制;
4、精通LINUX系统内核,对裁剪、编译环境建立、更新、调试等方面要有系统认识与方法;
5、精通C/C++/JAVE语言,对程序系统架构有极深的理解;

简单的几条要求,涵盖了很多的东西!要为此付出很多,积累很多!

3. 及早搭建自己的工作室

Why:前途(钱途)

嵌入式 Linux未来的前景看好,但是人才的缺乏已经成为当前制约嵌入式Linux发展的瓶颈。一方面,因为嵌入式人才领域门槛较高,从事嵌入式软件开发的工作人员不仅要熟练掌握c/c++,汇编语言等基础,而且对Linux底层驱动内核,甚至是硬件都要了熟于心。

另一方面,因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在如雨后春笋般的涌现(如ARM11处理器、嵌入式Linux操作系统、MPEG技术、无线通信协议、移动USB2.0高速传输等),目前国内乃至国际上能购掌握这些新技术的人才相当匮乏。

未来几年,市场对嵌入式Linux人才的需求旺盛。而目前熟练的Linux应用人才只有几千名。这意味着各大跨国公司及国内消费类电子巨头企业都面临着人才严重短缺的挑战。

由于嵌入式Linux开发人才的缺乏也带来了这个行业可观的薪酬待遇,嵌入式Linux的从业者薪酬比其他IT业同行大约高出50%,初入门的开发人员平均月薪一般都能达到5000元,有三年以上经验的人员年薪都在10万元以上,有10年工作经验的高级嵌入式软件工程师年薪在30万元左右。尽管待遇可观,可是相关企业还是很难招到合适的员工。

3.1: 准备开发版

对于在嵌入式Linux下面开发,如果你手头不准备一个开发板,很多东西你不能验证、掌握。

在公司里面,大部分时间在开发:coding+doc. 很少会给你留整块的时间去系统的掌握嵌入式Linux开发的上上下下的东西。所以及早给自己准备一套开发环境还是比较值得,虽然可能会花掉2000¥多块钱,但是与未来挣的相比,是很值得的。

培训:有经济能力就参加。自己摸索很费事,如果有高手指点非常的好,进步快。

不培训,自己啃也有乐趣。我基本上是自己啃,公司的外派培训,我也会去参加一两次,回来给新入者培训。

市场上比较常见的是三星的S3C44B0(ARM7), S3C2440(ARM9).

推荐的开发板子:见后。

3.2 准备PC:

在家里也要有台PC, 开发用的PC现在的价格4000,甚至3000千块就基本上可以了。这一点投资对于对于能力的提高是很有帮助的,能为你带来很多。很多人在学校就有电脑了,虽然旧点,做开发足够了。

3.3:书籍

学习嵌入式Linux开发,我推荐大家从简单入手。不要一上来就啃Linux内核。04年我在杭州时,一时冲动买了本毛德操的<<Linux内核情景分析>>上册,开始啃Linux内核,每天下班后,到小饭馆吃过饭后,看看新闻,然后开始啃Linux kernel,很痛苦:当时没有明确的目标,就像迷失在大森林里的人,在找出去的路。啃了半年没有肯出个所以然。

推荐的书籍:

4. 文档的功夫

文档的能力是一个工程师的名片。很多人不注意文档质量,认为只要把代码写好就好了,管什么文档呢?这绝对是个误解。文档是为了传承和理清楚思路。

拿到一个项目,首先要看文档、设计文档,如果文档都搞得一塌糊涂,后面的代码你可能就是天天修补了,很痛苦的。

能写很规范、专业文档的工程师,肯定是很牛的人,因为一般人写不出来。但是一般人都能coding.所以文档能力也要有个规划,提高。

5. 合作

做application与driver没有什么贵贱之分,不要认为driver比application好,做application是没有前途的。这都是误解。能把application做好很不容易,而且做application也很有前途(钱途)。

任何一个部分只要做到前列,都有市场。

另外,在公司中,很多项目都是合作完成的,合作是基础。你再牛,如果项目失败,你都无法成为牛人;你再“普通”,只要项目一个接着一个的成功,都会把你“捎带”成为牛人!

6. 看将来

现在高校毕业的学生越来越多,很多没有找到工作。其中有一部分是中国高等教育的问题,另外一方面也是靠学生自己了。

据教育部统计,截至7月1日全国611万高校毕业生中已有415万人落实去向,与去年同期相比就业人数增加44万人;高校毕业生就业率达到68%,同比基本持平。

这个就业率很低,和6、7年前的95%相比,差很多了。就是很多就业的学生,工资1、2千的很多,除去房租、伙食费,所剩无几。甚至连通讯费都要仔细算计:哪些电话可以接,哪些不要打。 想想上大学花了好几万块,到头来成为一个勉强就业的月光族! 是很心酸的!

不要悲观,要动态的看问题,每一年你的能力都得到提高,进而收入会水涨船高。嵌入式Linux开发,是个不错的选择,而且会随着经验的增长,一切都会好。好好做个规划,努力成为一个嵌入式开发的“高手”。

我的邮件是cuijpus@yahoo.com, 大家有空可以聊聊。

推荐书籍:

ARM嵌入式Linux系统开发从入门到精通

http://www.amazon.cn/mn/detailApp?qid=1249910263&ref=SR&sr=13-1&uid=476-9729326-1133757&prodid=bkbk750230

嵌入式设计及Linux驱动开发指南(基于ARM9处理器)

http://www.amazon.cn/mn/detailApp?qid=1249910422&ref=SR&sr=13-28&uid=476-9729326-1133757&prodid=zjbk209513

LINUX内核源代码情景分析(上册)

http://www.amazon.cn/mn/detailApp?ref=DT_TS&uid=476-9729326-1133757&prodid=bkbk839390

Linux内核完全注释

http://www.amazon.cn/mn/detailApp?ref=DT_TS&uid=476-9729326-1133757&prodid=zjbk446409

Android(Linux手机系统)开发入门与实战

http://www.amazon.cn/mn/detailApp?qid=1249910827&ref=SR&sr=13-1&uid=476-9729326-1133757&prodid=bkbk961360