Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57230
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-14 22:51
个人简介

DIY也是一种有趣的爱好....

文章存档

2013年(13)

我的朋友

分类: LINUX

2013-11-14 22:53:09

原文地址:怎样高效学习嵌入式 作者:yuchuan2008

1、学习linux

       根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。

       可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。

       看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:1、自己的基础差,这是最要害的。2、内核本身很难。3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。

       学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点要害在操作系统,假如没有把握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!

       字串5

       在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是假如你懂了这些东西学习更有效率。

        关于要不要学习内核的问题,我的回答如下:不一定。假如你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。假如你想从事嵌入式linux系统开发,最好对内核有所了解。假如仅仅是做应用开发没有必要。我打个比喻:c、c 、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。

        怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。

        先看《深》,那主要讲原理,似乎市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。假如没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。

        2、学习嵌入式linux

        学习嵌入式,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,非凡不是计算机专业的,推荐学习ucos。那是开源的,同时很小。学习很好。为什么选linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些!

        字串8

        至于怎么学习,这是他的特色地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。

        假如没有开发板,那是纸上谈兵。有人说,那要1000-2000亚,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖5元/月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿1- 2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满足,但是,我发现我很差,非凡是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理!

        3、 学习板和培训

        你可以不接受培训,但是不能不买开发板。假如你想学习嵌入式一定要买块学习板,最好买块arm9的,贵些也值。可以跑高级操作系统。这个不要什么品牌公司的,一般不会出什么问题,市场上的板子一般是三星的2410,基本上是抄的。假如是做产品那要注重些。一般的公司一般要2000,加lcd要3000甚至更多。我接触到有的板只要 1200,加lcd也就2000,差别比较大,我认为学习都够啦。 ARM开发论坛

        对于培训,假如有条件最好参加,主要是嵌入式相对别的不同,自己摸索很费时,假如有高手指点非常的好,进步快。非凡是熟悉做这些的朋友。我接受过培训,熟悉个朋友。在以后的工作中帮我很多,在这里谢谢他!我记得哈佛的一个MBA的学生这样说,大意是:在哈佛学到什么不重要,最重要的是这些未来各大公司的高级治理人员是我的同学!真是有远见!

        目前市场是培训比较贵,一个星期两三千,真正算起来也要,那些讲师待遇绝对不会低。但是有个致命的问题是连续上课,一连几天,效果不佳。我希望社会上多出些1000元左右,并且时间长些,如一个月,一周一到两次课。假如没人做,我来做,哈哈!

       没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习linux内核和看书的,真的很感动。他的为人我很钦佩。也想介绍毛德操的《嵌入式系统》那本书,对学习arm linux的很好,也想介绍实习和工作的东西,太长了,耽误大家时间。我也不想检查里面的错别字了,很多!就写到这里吧。

 

与一线Linux嵌入式开发工程师的对话

陈工程师一直做Linux的嵌入式开发,作为在开发一线的工程师,他对很多问题的看法可能更切合实际需求,于是,通过邮件,就嵌入式开发方面的问题,请他谈了一下自己的看法:

       问:关于嵌入式开发,我们准备给同学们讲解一些入门知识,从你一线开发经验来说,给我们一些建议:

         陈工回答:

        对于嵌入式Linux入门,如果有一定基础,可以从驱动开始;如果没有基础,我个人建议还是从应用程序开始。因为从应用程序开始是最容易的,也是 最直观的。而驱动程序运行在内核态,驱动本身的结构就比较复杂,如果要彻底弄明白驱动的运行机制,必定牵涉内核,对于高年级的学生恐怕问题会少一些,而 对于低年级的学生,问题估计较多。我曾经遇到过一些初学者,就是一入门就栽了,失去了信心,当然这只是少数。不过,如果在遇到问题之后,能够得到即时、 正确的点化,那就是好事了。

       既然您决定讲驱动,那就从内核模块开始。在PC上就可以进行的虚拟设备实验,如基于内存的内核模块。可以考虑从模块的结构、编译、插入、卸载等方 面进行阐述。

        驱动模块无非分字符驱动、块设备驱动和网络驱动三大类。但是一定要让学生知道,任何一个系统,特别是嵌入式系统,并且在目前的嵌入式Linux产品 开发中,最简单、最重要、最多、最复杂的也是字符设备驱动,从IO驱动到串口驱动、到USB驱动等等,广义上都是字符驱动。让学生最好专注于字符设备驱 动,因为一个嵌入式设备,网卡一般一块,FLASH一般也是一块(也包括几块组成的FLASH组),但是这两方面,基本都有完善的驱动,如网卡驱动有很 多,块设备驱动,硬件层已经有通用接口,不管是NOR FLASH还是NAND FLASH,文件系统层更是有了非常多、非常成熟的文件系统,如 JFFS2、YAFFS、YAFFS2、EXT2、EXT3、ROMFS、CRAMFS等等,无需我们再去研究,学会应用即可。而除此之外的其它设备, 如AD、DA、CAN、RS485等等,都是需要根据应用来进行设计的,这才是一个产品区别于其它产品的重点,更是市场价值增值点。

      另外呢,也是前一点引申为而来的,学习Linux,准备做产品的话,不要把Linux当成了终极目标(当然,这是对应用而言的),要有只是把 Linux当成一个平台的思想。更重要的还在各种产品所需求的专业技术,如通信方面像CAN、RS485、GPRS等等,或者工业控制方面,IO控制、 实时特性等等。Linxu博大精深,研究起来永无止境,但是在产品中,只要到了一个产品够用就可以了(当然,多一些更好,要视人而定)。

       问:嵌入式应用程序的开发,应用场景较多的是图形界面还是字符界面,如果是图形界面,开发环境QT和Minigui哪一种更合适,哪种类型的应用程序在嵌入式系统中应用比较多?

       陈工回答:

       对于嵌入式Linux的应用,大多数的应用并不需要图形界面,比如交换机、路由器、嵌入式网关以及服务器等等。图形界面呢,主要应用在多媒体、手机等手持设备和一些需要图形界面的人机交互系统。

       嵌入式Linux可选图形界面很多,上网找找的话,可以发现远非我们常说的QT、MiniGUI等。包括Tiny-X,matchbox、OPIE、GPE等等。不同GUI有自己的特色,有自己的特殊应用场合,对于产品开发,根据需要选择合适的GUI。对于学习,自然是选择容易得到、容易开发的GUI。QT是一个不错的选择,由于QT有一个PC上的模拟器,可以在没有实际液晶LCD的情况下,甚至在没有任何硬件的情况下都可以在PC上进行模拟开发。QT是收费的,当然,有免费版可用。MiniGUI呢,纯粹国产的,支持国货,可以考虑选择MiniGUI。这是一个轻量级的嵌入式GUI,可以跨平台,学习版也才100多块。MiniGUI可以用于工业控制场合,QT在这方面的应用目前还没有遇到,主要用在手持设备。

       我们在开发中采用Tiny-X,这也是一个可以用于工业控制的GUI,基本兼容X-Window,体积小,占用资源少,速度快,稳定。

       对于Linux的应用程序开发,除了GUI程序之外,最基本的应用程序有:

     (1)串口编程。无论是在Windows下还是Linux下,串口编程都是极为复杂的,但是非常锻炼一个人的编程水平和能力。

     (2)网络编程以及WEB相关编程。网络编程的tcp、udp、tcp/ip等。至于WEB编程,主要是在系统开启一个WEB服务器,制作一些网页,通过远程登录能够对整个系统进行配置甚至升级等功能。比如我们的路由器配置网页。这种应用在以后会越来越广泛。

      (3)另外一个就是Shell编程了。Shell的作用我想,*NIX世界的人都很清楚。在很多应用里面,通过一些非常富有技巧性的Shell脚本,实现了非常复杂的功能,包括远程系统升级等。

       以上我提到的这3方面,非常易于实验,在没有硬件,只有PC的情况都可以做。

       学生电脑安装ubuntu,那以后配置嵌入式Linux开发环境可能遇到的问题会多一点。不过没关系,能够解决的。在我个人看来ubuntu适合于家用、办公,但要用于开发,配置难度稍微大一点。不过没有办法,现在电脑硬件太新,最适合的RedHat 9.0无法安装。

 

 

新手学堂:嵌入式Linux操作系统学习规划

ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:

      (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)

      (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)

      (3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。

      从事嵌入式软件开发的好处是:

      (1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。

      (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。

      (3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。

      (4)兴趣所在,这是最主要的。

      从事嵌入式软件开发的缺点是:

      (1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。

      (2)这方面的企业数量要远少于企业计算类企业。

      (3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。

      (4)平台依托强,换平台比较辛苦。

      兴趣的由来:

      1、成功观念不同,不虚度此生,就是我的成功。

      2、喜欢思考,挑战逻辑思维。

      3、喜欢C

      C是一种能发挥思维极限的语言。关于C的精神的一些方面可以被概述成短句如下:

      相信程序员。

      不要阻止程序员做那些需要去做的。

      保持语言短小精干。

      一种方法做一个操作。

      使得它运行的够快,尽管它并不能保证将是可移植的。

      4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。

      5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。

      方法步骤:

      1、基础知识:

      目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。

      科目:数字电路、计算机组成原理、嵌入式微处理器结构。

      汇编语言、C/C++、编译原理、离散数学。

      数据结构和算法、操作系统、软件工程、网络、数据库。

      方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。

      主攻书籍:the c++ programming language(一直没时间读)、数据结构-C2。


      2、学习linux:

      目的:深入掌握linux系统。

      方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看深,那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。


      主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。


      3、学习嵌入式linux:

      目的:掌握嵌入式处理器其及系统。

      方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。

      (2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。

      (3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。

      主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。


      4、深入学习:

      A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。

      B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。

      C、网络与信息安全技术:如加密技术,数字证书CA等。

      D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法。


      说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。


      注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。

      不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的!

      技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。

      嵌入式书籍推荐


      Linux基础

      1、《Linux与Unix Shell 编程指南》

      C语言基础

      1、《C Primer Plus,5th Edition》【美】Stephen Prata着

      2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)着

      3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)

      4、《嵌入式Linux应用程序开发详解》

      Linux内核

      1、《深入理解Linux内核》(第三版)

      2、《Linux内核源代码情景分析》毛德操 胡希明着

      研发方向

      1、《UNIX Network Programming》(UNP)

      2、《TCP/IP详解》

      3、《Linux内核编程》

      4、《Linux设备驱动开发》(LDD)

      硬件基础

      1、《ARM体系结构与编程》杜春雷着

      2、S3C2410 Datasheet

      英语基础

      1、《计算机与通信专业英语》

      系统教程

      1、《嵌入式系统――体系结构、编程与设计》

      2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明着

      3、《Building Embedded Linux Systems》

      理论基础

      1、《算法导论》

      2、《数据结构(C语言版)》

      3、《计算机组织与体系结构?性能分析》

      4、《深入理解计算机系统》【美】Randal E. Bryant David O'Hallaron着

      5、《操作系统:精髓与设计原理》

      6、《编译原理》

      7、《数据通信与计算机网络》

      8、《数据压缩原理与应用》


      C语言书籍推荐


      1. The C programming language

《C程序设计语言》

      2. Pointers on C

《C和指针》

      3. C traps and pitfalls

《C陷阱与缺陷》

      4. Expert C Lanuage

《专家C编程》

      5. Writing Clean Code

-----Microsoft Techiniques for Developing Bug-free C Programs

      《编程精粹--Microsoft 编写优质无错C程序秘诀》

      6. Programming Embedded Systems in C and C++

      《嵌入式系统编程》

      7.《C语言嵌入式系统编程修炼》

      8.《高质量C++/C编程指南》林锐


      尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。

       

 

2008-2009年中国嵌入式开发从业人员调查揭晓

据估计,全球目前嵌入式软件市场的规模超过1000亿美元,而且每年以超过30%的速度在增长。在中国,嵌入式市场规模已超过500多亿元,预计未来三年中国嵌入式软件产业仍将有高达40%左右的年增长率,而到2010年中国嵌入式软件市场规模将达到1000亿元。诱人的市场使得全球IT巨头纷纷进军嵌入式市场,国家政策也对嵌入式软件行业实行“增值税优惠”的政策倾斜。嵌入式已经形成了一个充满商机的巨大产业,并且成为整个软件业的发展支柱!
       技术以人为本,嵌入式行业正以其“应用领域广、人才需求大、就业薪资高、行业前景好”等众多优势,获得越来越多IT开发人员的关注,无数研发工程师开始转入嵌入式这一行业。为了让更多想从事和即将从事嵌入式的朋友更好地了解这一领域,华清远见嵌入式培训中心联合多家业内媒体开展了“2008-2009年中国嵌入式开发从业人员大调查”,今后每年进行一次,力争打造出中国嵌入式领域最具广泛性、权威性和实用性的产业调查。今年的产业调查以了解嵌入式开发从业人员状况为主,华清远见希望通过此项调查帮助大家更好地认识和定位自我,规划职业发展。
         本次调查问卷内容经过了严格的设计筛选,共有4000多名嵌入式工程师参与了调查,最终有效问卷为3205份,其中包括1000名抽样华清远见2004至2008年已结业培训学员,在此我们向所有参与本次调查的工程师表示衷心的感谢。下面我们和大家分享一下此次调查的统计信息,也希望和大家一起探讨数据背后所呈现的意义。 

       
总结报告
  一、嵌入式工程师个人基本情况

  本次问卷取消了工作所在地、性别以及年龄等没有悬念的问题,只对工作经验、学历、薪资等关键信息进行调查。

  1、工作经验

  来自华清远见的调查数据显示,目前从事嵌入式开发“不到1年”和“1-2年”的工程师所占的比例最大,分别是37%和22%,占总参与调研人数的绝大部分(接近60%),而具备多年开发经验的嵌入式工程师相对来说较少。嵌入式产业作为软件产业的一个热门领域,正吸引着越来越多的工程师投身到这一行业中,企业人才需求还远未饱和,具备多年经验的嵌入式工程师尤其匮乏。人才瓶颈如能得到解决,势必将带动整个嵌入式行业的高速发展!

  2、学历要求

  调查数据显示,嵌入式开发从业人员学历以本科(53%)和硕士(30%)居多,占所有参与调查人员的83%,这是一个相当大的比率。大专学历占12%,而大专学历以下、博士和博士以上学历均分别仅占2%。嵌入式开发目前属于高端研发领域,对学历要求较高,嵌入式从业人员至少应具备大专学历基础(计算机相关专业),本科以及硕士则是这一领域从业人员的主体。从另外一个角度来讲,这里的数据同样也可以向我们展示企业在招聘嵌入式开发工程师时的基本学历要求。

  3、薪资分布

  调查数据显示,月薪在“3000-5000元”和“5000-8000元”的工程师所占的比例最大,分别是40%和34%,占总参与调研人数的绝大部分(74%),月薪“5000-8000元”的占11%,其它高薪以及低薪所占比例均较小。可以看出,嵌入式从业人员薪资待遇相比其他行业高些,一般从刚入行到工作一两年左右,薪资就可以达到3000-8000元/月之间,而具备多年工作经验的嵌入式开发工程师月薪则可达到8000-20000元/月,嵌入式从业人员薪资增长空间较大。

  二、嵌入式行业公司的基本状况

  本部分调查主要从“公司产品所属领域、人员规模、软件开发平台、软硬件人员安排、软件开发语言、人才需求”等方面展开,调查统计数据如下。

  1、所属行业分布情况

  嵌入式应用领域极为广泛,调查数据显示,嵌入式产品应用最多的三大领域是“消费电子、通信设备、工业控制”,所占比例分别是24%、21%和13%,三大领域所占比例之和接近60%,特别是消费电子领域,随着3G时代的来临,智能手机软件开发这一领域的发展前景更是被看好。

  2、公司规模

  调查数据显示, 100人以下的企业(包含“50人以下”和“50-100人”)所占比例超过一半。总体来讲,国内嵌入式企业规模比较小,资金有限,但数量庞大,总体技术水平与国际技术水平有一定差距。要想推动嵌入式软件更快更好地发展,可从以下两点入手:1.国家提供必要的政策支持,降低中小企业发展的成本,加大研发费用的投入和研发人员的培养力度;2.寻求愿意与企业共同发展的战略合作伙伴,或形成产业链。

  3、软件开发平台的选择

  在软件开发平台的选择上,嵌入式linux占据了明显的优势(51%),Linux以其开源成本低的优势受到中小企业的欢迎,排名二三的Windows CE和Symbian,所占比例分别是16%和10%

  4、软件开发语言的使用

  在软件开发语言的使用上,C语言作为嵌入式开发最经常使用的语言的地位也是无容置疑的,所占比例高达73%,C++所占比例为15%,位居第二,其他开发语言均占据了较少的比例。

  5、软硬件人员的安排

  本项调查数据显示,在大部分从事嵌入式产品研发的企业中,基本都是采用软硬件人员分工合作完成产品的开发(60%多),由此我们可以看到企业最需要的还是擅长某一方向的专才,招聘网站的搜索数据也体现了这一点,目前嵌入式软件开发人才的需求量远远大于硬件开发人才,当然从求职的角度来讲,同时具备软硬件开发能力的工程师,在求职过程中拥有更多的选择机会。

  6、企业人才需求现状

  调查数据显示,嵌入式人才需求目前仍然是供不应求,接近80%参与调查的工程师都表示,自己公司目前都急缺嵌入式开发方面的人才,如此巨大的人才缺口,表明了在嵌入式技术高速发展的今天,专业的嵌入式开发人才已成为整个行业发展的一个瓶颈,如何培养适合企业需求的嵌入式开发人才也成为整个行业急需解决的问题。

  三、嵌入式工程师对职业生涯的看法

  本部分调查主要从“对行业前景的看法、对工作薪资的满意度、对公司所给予你的成长空间、是否经常加班、公司人才需求、工作成就感以及对未来职业人生的规划“等方面展开,希望能从整体上展现嵌入式工程师对目前工作状态的的满意度状况。

  1、对行业前景的认可度

  调查结果显示,绝大部分嵌入式工程师都认为嵌入式是非常有发展前途的行业(94%),而在这94%参与调查的工程师当中,48%的工程师充满信心,准备施展才华,另有46%的工程师虽然对嵌入式行业前景表示认可,但有时也会觉得迷茫。嵌入式行业无疑是目前非常有发展前途的行业,它以其众多优势吸引越来越多的工程师投入到这一领域,但在这一过程中,嵌入式企业以及从业人员也需要端正心态,戒骄戒躁,不要急于求成,只有脚踏实地才能真正在某一领域有所作为。

  2、对工作薪资的满意度

  薪资满意度调查结果显示,50%的嵌入式工程师对目前的薪资待遇比较满意,40%的嵌入式工程师表示不满意,而非常满意和非常不满意均占较小比例,分别为4%和6%左右。

  3、未来一年薪资涨幅

  对于未来一年薪资涨幅的调查中,54%参与调查的工程师表示涨幅在0-20%之间,认为薪资涨幅在21%-40%之间的为21%,而选择“有可能不涨反降”的为13%,其他涨幅较高的选项仅有很少一部分工程师选择。2008年年终的经济危机对此选项的调查产生了或多或少的影响,但是相对来讲,还是比较乐观的。

  4、对公司所给予的发展空间的满意度

  在对公司所给予的成长空间的调查中,接近60%的工程师表示基本满意,27%的工程师表示不满意,非常满意和非常不满意则均占10%和4%左右。从这组数据可以看到,在嵌入式行业内,公司对嵌入式工程师给予了比较多的关注,关心他们的成长,尽量降低他们的流动率,这可能也与目前嵌入式工程师比较紧缺有关系。

  5、是否经常加班

  在问到是否需要经常加班时,56%的工程师选择“是”,而回答“否”的则占44%左右。对于整个IT行业从业者来说,加班文化已被无数媒体多次提及。从企业长远发展来看,人性化的管理制度其实更有利于帮助企业留住人才,而对于个人来说,提高个人生活质量与提高工作质量同样重要。

  6、工作带来的成就感

  此次调查显示,80%以上的调查人员表示生活中的快乐和成就感主要来源于工作,并且热爱自己目前从事的工作,而仅有18%参与调查的工程师表示自己生活中的成就感较少取决于工作。由此可见,工作在每个人的自我价值实现中扮演着越来越重要的角色,更多的工程师希望能从工作中获得更多的成就感。

  7、未来职业人生的规划

  在对未来职业人生的规划调查中,70%的工程师给予了肯定的评价,其中46%的工程师表示想提升自己的层次,希望目前所在公司能给自己更大的成长空间,24%的工程师表示喜欢自己现在的公司以及工作职位,短时间内应该不会有较大的改变。考虑跳槽的工程师所占比例为17%,打算自己创业的为9%,其他选项均占较小比例。

  通过以上7个选项的调查,我们大致可以了解到嵌入式工程师对目前工作状态的的满意度状况:虽然存在着加班以及部分工程师对薪资/成长空间存在不满,但整个行业的从业者体现的仍然是一种积极向上的心态,他们对行业前景充满信心,希望能从工作中获得更多的成就感,也希望自己能在目前的公司获得更多的成长空间而不是通过跳槽来实现更好的职业发展。在嵌入式这样一个人才远未饱和的市场,企业求才若渴,人才竞争压力并不大,从而工作满意度更大部分取决于个人的能力,只要不断提升自己的能力,就拥有足够大的可以选择的提升空间,实现更接近于自己理想的工作满意度,这样的现状对于积极进取擅长抓住机遇的工程师是相当有利的。

  四、嵌入式工程师对参加培训的看法

  嵌入式人才需求的紧缺已引起了多方关注,高校的人才培养模式已远远无法满足目前企业人才需求的现状。在政府和企业大力呼吁人才培养的紧迫性时,职业技能培训慢慢的被认可并成为解决这一人才难题的首选。本次问卷特意设置了针对职业培训方面的几个调查选项,希望能为更多想迈入此行业的朋友提供有意义的参考。

  1、如何看待培训

  在谈到如何看待培训这一话题时,接近70%参与调查的嵌入式从业人员,对参加培训都表示了较大程度的认可,19%的工程师表示在需要的时候可能会考虑,仅有10%的工程师表示希望通过自学来实现职业上的提升。

  2、公司内部是否组织过培训

  调查数据显示,接近60%的公司从未组织过嵌入式相关方面的培训,34%的公司组织过由公司资深老员工负责讲授的培训,而10%的公司邀请过外部专业培训机构来进行系统的培训。通过调研华清远见04-09年的企业内训客户数据信息,我们看到,绝大部分企业内训客户均为大型外企(包括三星、摩托罗拉、阿尔卡特、西门子等),这反应了外企在员工个人技能提升方面比较重视,每年在员工培训方面均有固定的资金投入,而国内企业在这方面相对预算较小,对员工技能提升方面重视不够。希望国内的嵌入式企业在得到发展壮大的同时可以去关注一下员工个人职业生涯的发展,将公司业务与员工个人成长结合起来,只有这样企业才能更长久的留住人才。

  3、公司是否支持员工参加培训

  在问到公司是否支持员工参加外部培训时,绝大部分公司(接近80%)表示支持员工参加外部培训来提高个人技能。

  通过以上三个选项的调查,我们可以看到,绝大部分工程师都对培训的价值表示认可,虽然大部分公司从未组织过嵌入式相关方面的培训,但绝大部分公司都对员工参加外部培训表示支持。嵌入式属于高端研发领域,入行门槛相对较高,专业的培训机构拥有强大的师资团队以及完善的课程体系,可以提供较为系统的学习方案,帮助初学者在短期内掌握迈入该行业所需的基本技能,这也是职业技能培训的优势。在自学与培训的选择中,个人可以综合时间、金钱以及自学能力等多方面因素考虑,选择最适合自己的学习方法。

  五、嵌入式工程师获取信息的途径

  嵌入式行业,技术的更新是非常快的,每一位工程师都需要在工作中不断的更新自己的知识,掌握技术动态或者解决自己工作中遇到的问题,而网络则成为必不可少的工具之一。第五部分主要是调查工程师在使用网络方面的一些偏好,比如“经常光顾的网站、获取专业知识的途径、首选的搜索引擎”等,希望通过此部分的调查让更多的人了解绝大多数嵌入式工程师如何利用网络来学习。

  1、经常关顾的网站

  由图表中可以看出, 在嵌入式工程师经常关顾的网站中,CSDN和21IC所占的比例最大,均为18%,而嵌入式在线、电子工程专辑、电子产品世界、EDN、IT实验室所占比例均为10%左右。

  2、获取专业知识的途径

  此项调查数据显示,“技术图书、专业论坛、业内门户网站、搜索引擎”是嵌入式工程师获取知识的主要途径(接近70%),其中各项所占比例分别为21%、17%、15%、14%,网络已经成为工程师获取专业知识的主要途径。除了以上4大途径外,部分工程师也会通过培训、厂商网站、博客/群组、杂志/期刊/报纸、行业展会/技术研讨会以及电子邮件订阅等途径获取信息。华清远见提供的免费电子图书、视频教程等资料每年下载次数已达到十多万。

  3、首选搜索引擎

  在对搜索引擎的使用调查中,百度虽然占据国内搜索引擎市场绝大部分的市场份额,但超过60%以上的嵌入式工程师们却明显偏爱于使用google,造成这一结果的原因是,工程师们可以从国外的网站获取更多技术资料以及学习资料。同时我们也可以得出这样一个结论:在嵌入式这一高端领域的学习中,因为很多技术资料都是英文的,所以要及时了解技术发展、学习相关的技术,开发者具备一定的英文阅读能力是非常有必要的。
 
 
 
学习指导:关于Linux内核学习的误区
来源:中国自学编程网   发布日期:2008-07-12  

    先说句正经的:其实我没资格写这篇文章,因为自己也就一两个月以来才开始有所领悟的。因此,这里与其说是关于Linux内核学习的经验,不如说是自己的教训吧,希望不要扔鸡蛋砸我^_^

    常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux. 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:

    1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统总线、内存的关系(很粗略即可),等等。

    2, 关于C语言。不需要已经很精通C语言,只要能熟练编写C程序,能看懂链表、散列表等数据结构的C实现,用过gcc编译器,就可以了。当然,如果已经精通C语言显然是大占便宜的。

    3, 关于CPU的知识。这块儿可以在学习内核过程中补,但这样的话你就需要看讲解很详细的书,比方后面将会提到的《情景分析》。你是否熟悉Intel 80386 CPU?尝试着回答这几个问题来判断一下:1)说出80386的中断门和陷阱门的区别;2)说出保护模式与实模式的区别;3)多处理器机器上,普通的读-改-写回一块内存这样的动作,为什么需要特殊的手段来保护。等等。讲解基于其它CPU的Linux内核的书,目前好象只有一本《IA64Linux内核:设计与实现》──也还是Intel的,其它都是讲解基于IA32的。

    以上算是知识方面吧,如果还要再补充一条,我想就是:动手编译过内核。

    好了,我们接下来走。好多人装上Linux之后,第一件事找到内核源码所在的路径,打开一个C程序文件,开始哗哗哗翻页,看看大名鼎鼎的Linux内核代码到底长啥模样──然后关闭。这是可理解的,但却不是学习的方法。刚开始,必须从读书入手。至少要对内核有一个Overview之后,才有可能带着问题去试图阅读源代码本身。 下面就讲一下我读过的几本书:

    1, 《Linux内核设计与实现》,英文名Linux Kernel Development(所以有人叫它LKD),机械工业出版社,¥35, 美国Robert Love著,陈莉君译者。 评说:此书是当今首屈一指的入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是给出了整个Linux操作系统2.6内核的概观,使你能通过阅读迅速获得一个overview.而且对内核中较为混乱的部分(如下半部),它的讲解是最透彻的。对没怎么深入内核的人来说,这是强烈推荐的一本书。

    翻译:翻译水平、负责任程度都不错,但是印刷存在一些错误。买了此书的朋友可以参考我在Linux高级应用版的《Linux内核设计与实现中文版勘误》:?t=541234另外,此书2005年有了第二版,目前尚无中译本面世。我就是对照着2nd-en勘误1st-cn的。

    2, 《Linux内核源代码情景分析》上、下。毛德操、胡希明著,浙江大学出版社,上册¥80,下册¥70.   评说:本书是基于2.4.0内核的,比较早,也没听说会出第二版。上册讲解内存管理、中断、异常与系统调用、进程控制、文件系统与传统Unix IPC;下册讲解socket、设备驱动、SMP和引导。关于这套书的评价褒贬不一,我个人认为其深度是同类著作中最优秀的。本书基于Intel IA32体系,由于厚度大,很多体系上的知识都捎带讲解了,所以如果你想深入了解内核的工作机制而又不非常熟悉Intel  CPU的体系构造,本书是最合适的。缺点是:版本较老,没有TCP/IP栈部分(它讲的socket只是Unix域的),图表太少,不适合初学者入门。还有就是对学生朋友来说,可能书价偏高,这样的话可以考虑先买上册,因为上册是核心部分,下册一大部分都在讲具体PCI/ISA/USB设备的驱动。

    翻译:没什么翻译,作者是国人,而且行文流畅。本人书桌上诸多计算机经典图书当中,这套是唯一又经典又无阅读障碍的。

    forum.net">内核版好多朋友已经把这书读到六七遍了,我很惭愧,上册差不多读熟了,下册就SMP部分还看过──但这就花费了整整1年的时间,还有好多弄不懂的。这里顺便说明另外一个研究内核常见的误区:目标太庞大。要知道Linux内核(最新的2.6.13)bzip2压缩之后37M,解压缩之后244M,根本不是哪个人能够吃透的。即使是内核的核心开发团队中,恐怕也只Linus Torvalds、Alan Cox、David Miller、Ingo Molnar寥寥数人会有比较全面的了解,其它人都是做自己专门的部分。 我自己来说,目前已经决定放弃内存管理的全部(slab层、LRU、rbtree等)、文件系统部分、外设驱动部分,暂时也没打算弄IA32以外的其它体系的部分。

    3, 《深入理解Linux内核》第二版。中国电力出版社。也是陈莉君译。此书是Linux内核黑客在推荐图书时的首选。 评说:此书C版的converse兄送了我一本第一版,因此就没买第二版,比较后悔。因此只就第一版说一说,第一版基于2.2,第二版2.4 .我见O'Reilly官方主页上说第三版的英文版将于2005年11月出版,也不知咱们何时才能见到。此书图表很多,形象地给出了关键数据结构的定义,与《情景分析》相比,本书内容紧凑,不会一个问题讲解动辄上百页,有提纲挈领的功用,但是深度上要逊于《情景分析》。

    4, 其它的几本书。市面上能见到的其它的Linux内核的图书,象《Linux设备驱动程序》、《Linux内核源代码完全注释》以及新出的《Linux内核分析及编程》等。

    《Linux设备驱动程序》第二版是基于2.4的,中文翻译不错,中国电力出版。这书强调动手实践,但它是讲解“设备驱动”的,不是最核心的东西,而且有些东西没硬件的话无法实践,可能更适合驱动开发的程序员吧,不太适合那些For fun and profit的人。此书有第三版英文版,东南大学出版社影印,讲解2.6的,行文流畅,讲解的面也比第二版更广泛,我读过其中关于同步与互斥、内存分配的部分,感觉很不错。

    《Linux内核源代码完全注释》(机械工业出版社)是同济大学的博士生赵炯的著作,讲解0.1Linux内核,我没买也没看,有看过的朋友说一说。

    《Linux内核分析及编程》(电子工业出版社)是刚刚出版的,国人写的,讲解2.6.11 .很多人说好,但有人说不够系统,我没买,不敢评说。

    还有一本清华出的《Linux内核编程指南(第三版)》,原书应该是好书,但是翻译、排版十分糟烂,脱字跳行,根本没法看,我买了一本又扔掉了。

    5, 其它资源。 TLDP(The Linux Documentation Project)有大量文档,其中不少是关于内核的,有些是在国外出版过的,象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等,作者都是亲身参加开发的人,著作较为可信。

    中国Linux论坛的内核版。该版是研究内核的中文Linux社区中水平最高的,有很多专家级别的牛人,强烈推荐去学习一下(但建议不要问太过分简单的问题,人家脾气再好也会烦的^_^),它的置顶贴简直是一个包罗万象的FAQ,精华区也有很多资料。只可惜太过曲高和寡,人气不是很旺。

    6, 一本不是讲解Linux的书:《现代体系结构上的Unix系统:内核程序员的SMP和Caching技术》,人民邮电出版社2003版,定价¥39. 本书虽然不是讲解Linux,但是对所有Unix内核都是适用的,适合对SMP和CPU的Cache这些组成原理知识不是很熟的朋友,而且是很多国外牛人推荐的书。中文版翻译非常负责。

    还有个很重要的问题:怎样浏览内核源代码。有的朋友喜欢在上工作,用Source Insight;有的在Linux,用Source Navigator;还有专门浏览源代码的软件,象lxr(Linux Cross Reference);还有用ctags/ectags/cscope等,这些都是很优秀的软件。我个人用Vim + ctags浏览(参考了内核版wheelz大侠的文档,)。

    此外,前边已经提到的一个重要的问题是:你研究内核的目的是什么, 开发? 乐趣?如果是开发,而且是国内做开发,把kernel API熟悉一下就差不太多了(你也知道国内的水平有多差),比方说copy_from_user()、kmalloc()函数等,kernel API在Internet上找得到,编译内核时也可以用DocBook生成(具体请参考内核源代码包下的README文件);如果是研究,那就差别很大了,需要下很大的苦功:会用kmalloc()绝不说明你懂得Linux内核的虚存管理子系统,正如同会讲汉语不说明你懂中国文化一样。

阅读(905) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~