热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

原文地址:http:blog.csdn.netcuijpusarticledetails44318151.开场白做手机开发进入第六个年头了,回头看看,有些正面和反面的应验总结一下,为新

原文地址: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 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


推荐阅读
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • CentOS7系统目录LINUX有四种基本文件系统类型普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
小白吃丸子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有