(1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9)
(2)必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)
(3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
(1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。
(2)这方面的企业数量要远少于企业计算类企业。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。
(4)平台依托强,换平台比较辛苦。
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、《数据压缩原理与应用》
1、打好嵌入式软件编程的基础
这一阶段重点打好嵌入式软件编程的基础,包括
特别是C语言中对指针的理解和应用。这一阶段的主要目的是学习编程语言、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。
2、学习ARM体系结构编程
这一阶段才是真正的嵌入式编程,首先我们要
选择一款嵌入式CPU和一款嵌入式开发平台,目前ARM 嵌入式CPU应用最广泛,这一阶段重点是
学习嵌入式CPU的裸机编程:
3、学习嵌入式系统的构建
这一阶段主要学习带有操作系统的嵌入式系统的构建,包括系统的
启动流程
4、学习嵌入式Linux应用程序开发
这一阶段主要学习上层的嵌入式Linux应用程序开发,包括
5、学习嵌入式Linux驱动程序开发
这一阶段主要学习底层嵌入式Linux设备驱动程序开发设计,包括
6、完成一个综合项目
嵌入式技术关键在于理论和实践的结合,要能够学以致用,完成了以上的所有阶段的知识点学习后,到底有没有学会,会不会用,能不能应用所学知识来解决实际开发中的问题,我们需要来完成一个综合的嵌入式实训项目,例如: 基于嵌入式Linux平台实现的飞行器、 基于嵌入式Linux平台实现的智能机器人等,这些项目都综合应用了嵌入式开发当中的应用,驱动和QT开发技术。
嵌入式驱动工程师目前有两个走向。(主要说上操作系统的,片上的暂且不讨论)
第一,一线IC厂商,诸如德州仪器,三星,还有ADI之类的。你可能说ADI这种做模拟数字芯片的公司怎么可能要到嵌入式驱动的,你可以翻开Linux内核对driver目录下有个staging下的iio的adc或者dac的目录,看到ADI型号的芯片,打开c文件看到ADI的版权信息,没错,这就是ADI公司的AE提供的对应他们芯片的Linux驱动。在这里不得不夸一下ADI公司,驱动支持的相当好,ADC,DAC,频率源那是一个齐全,(ADI公司的AE相当有水平,看他们写的驱动,有种醍醐灌顶的感觉,是一手好的学习资料)。
像TI,三星,赛灵思公司更不用说了,他们有ARM的业务,尤其各种千奇百怪的异构多核平台,例如OMAPL,Davinci,赛灵思的ZYNQ,这些都需要适配Linux且要处理好多核通信,他们的AE开发驱动和维护需求是相当的多也需要相当的水平。对于用户,多核通信我们能用好已经算是大牛了,就别说开发和设计了。而且这些一线IC厂商另辟蹊径,为了达到一条龙服务,从芯片出厂到应用,甚至玩起解决方案一对一设计,少不了嵌入式驱动开发人员。AE这条路无疑是艰难的,工作量也是巨大的,要求也是相当高的,但是公司内部分工明确,有组织有纪律。很少的人能进入到一线开发,这的确是一个有挑战的工作,如果你有兴趣,可以去应聘这些公司的数字类应用工程师。
第二,是应用型公司,可以说IC厂商的客户,消费者类的小米,华为手机业务,大疆,工业级的艾默生等等,还有各种创业公司,这一部分很具备国内风格,“全能”,应用加驱动加平台加软件,按公司项目工程走,只要能解决问题,就是好同志。干这个任务就杂了,只要跟嵌入式是相关的,都是你的duty,好处就是你可以不限制平台选择,TI的ARM能解决还省钱,就用TI的,三星的能解决,就用三星的,玩的是嵌入式开发的套路,坏在也是不限制平台,你需要掌握流行的ARM平台,记住特性,虽说大同小异,但差距还是有的。大多数嵌入式工程师走的是这条道路。目前这种情况,大部分底层驱动IC厂商开发出来了,涉及底层驱动的,会修改移植就保你丰衣足食,要求相对一线AE没那么高,但相比于互联网的程序员,工作量和学习量就有点大了。
最关心的是入职工资。
多跑几个招聘网站,多接触一下行业内的人,深圳的价位,刚开始一般嵌入式工程师5K-15K,有人说5K才这么少。工资多少当然和工作属性和你的属性息息相关了,深圳创业公司,不太注重学历这些,基本上都会给你个工作机会,这也是深圳的好处,但工资不会高,一般大专高职HR会定位到4K~5K,做的也基本上是应用级的事情,涉及不太深的技术,如果学历偏低但酷爱嵌入式行业的童鞋,可以把社会当成第二个学校,多多锻炼,只要技术牛总有出头之日。
我觉得身边能选择嵌入式行业的人,也心知肚明这水比较深,多少有些功夫和心气在里面。大多数人的工资基本上集中在8K12K,例如:前几天在群里,大疆做摄像头Linux驱动的的给的价格就是8K12K;还有一个中型的安防公司,给的价格是1W;(应用级公司基本上了)
下一个档次,基本上是一线IC厂商,有基友(纯基友)在英特尔制造部1.78W(Linux岗位),第二个基友,ADI的AE(Linux岗位),拿到2.5W的月薪(13个月);德州仪器AE(汽车电子Linux的AE,工作两年),入职小于2W,两年内给到平均4W一月的月薪,共同点就是主动加班(真心心甘情愿的)没23点前下班过的。
实际上看看分布,基本上是合理的,高薪就高要求,低薪就低要求。能力,学历,可塑造力,社会多方面考察人才,钱是真心的不好赚。不是谁轻而易举的能拿到很多的钱,沉甸甸的,得能负的起的。
一线具备着高工资,这基本上处于技术金字塔尖的人了,技术牛逼又多金,很多人当然都想跃跃欲试。说下一线IC厂商,众所周知,一般IC厂商都是欧美企业了,当然多少受欧美外资企业风气影响,它们注重自己培养,谈软能力谈的比较多,比如演讲水平,影响力,eager to learn之类的情怀,你可能fuck了,我是纯技术啊,这些不行呢,可外企风格就是这样,他们要找的是值得培养的人,而不是拿过来就能用的人。我们还开那些冠冕堂皇的玩笑“面试怎么才能看出有影响力啊?说话声音大,就有影响力啊。”,所以,在外人看来,它名校情结严重,筛选严苛,有些人自信满满等结果,却不知道怎么就掉了,有些人觉得没戏了,反而还进去了,很诡异。
注意我这里没有说社招,都是校招。外企的社招可以说难于上青天,可遇不可求。德州仪器HR的原话:“无论你们在学校多厉害,拿过多少奖,写过多少专利论文,TI不在乎,进入TI,一切从零开始”。基本上一线IC厂商进入后去总部轮岗,导师制,例如德州仪器,他们的AE轮岗0.5-2年去达拉斯总部,费用有新人培养启动基金,轮岗后,有导师老工程师带你,所以这里有一段时间的培养周期你才能唯它所用,所以可以看到欧美企业对于技术人才是储备,而不是现缺现招。对于你来说,这段日子,绝对是塑造自己的过程,当然这时候的工资虽然不高,但过了培养阶段,正式进入岗位,可以想想能赚多少,同时也要过着一个多变态压力多大的生活。
入职以后,完全凭自己的摸爬滚打求富贵,有人被逼着转行退出嵌入式行业,有人能求得一席之地多个公司蹲着墙角高薪抢着要,有人成绩平平过的不温不火。每个人都有自己的可能性,但大家都是从C语言键入printf 函数开始的,没人天生就是大牛。当你决定在这个行业行走,当你走一段旅途觉得不适合自己,当你觉得这个行业陪你走过无数孤独的岁月是多么可贵,甚至你怨恨这个行业,我们寻求希望在它身上找到发财树,一辈子衣食无忧。可终究它是一个血汗的行业,耕种一份,收获一份。今天我学会一个小小的驱动程序,明天我为之披上一个名校研究生的外衣,无论如何,你做的所有的努力都是在丰富你的嵌入式道路,你也知道有些元素缺一不可,就像是我,研究生阶段也是不得不修学分,学没用的课,可我始终清晰自己的嵌入式道路。
互联网行业,可谓是“乱花渐欲迷人眼”,似乎鄙视链的一端是互联网人,一端是嵌入式人。稍微具备一点金融知识的人都清楚,互联网行业正处于通风口和转型时期,而这个时期需要巨大的能量和资金,基本上有眼力的金融家都来横插一脚。没有事情是永恒的,就像是支付宝的圣诞大红包,领着过瘾,可终究是昙花一现。大批量的互联网人,产品经理、程序员涌入,一旦泡沫拂去,谁在船上,谁在水里自然见分晓。万物在变,万变不离其宗的就是本心踏实宁静,多学多用,以期待少学多赚,终究是可替代性太强,太容易被淘汰。
认清自己,相信自己,风刮哪里就去哪里,终究是不入流啊。