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

(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、《数据压缩原理与应用》

<>C语言书籍推荐

* The C programming language 《C程序设计语言》
* Pointers on C 《C和指针》
* C traps and pitfalls 《C陷阱与缺陷》
* Expert C Lanuage 《专家C编程》
* Writing Clean Code
—–Microsoft Techiniques for Developing Bug-free C Programs
《编程精粹–Microsoft 编写优质无错C程序秘诀》
* Programming Embedded Systems in C and C++
《嵌入式系统编程》
7.《C语言嵌入式系统编程修炼》
8.《高质量C++/C编程指南》林锐
尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。
<>嵌入式软件工程师学习路线

1、打好嵌入式软件编程的基础
这一阶段重点打好嵌入式软件编程的基础,包括

* 学习Linux系统的基本应用
* Linux的常用命令
* C语言编程基础
* 常用的数据结构
特别是C语言中对指针的理解和应用。这一阶段的主要目的是学习编程语言、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。

2、学习ARM体系结构编程
这一阶段才是真正的嵌入式编程,首先我们要
选择一款嵌入式CPU和一款嵌入式开发平台,目前ARM 嵌入式CPU应用最广泛,这一阶段重点是
学习嵌入式CPU的裸机编程:

* 熟悉中断
* 定时器
* 串口
* NAND FLASH
* 网络控制器
* LCD屏、触摸屏
* I2C 设备
* SPI 设备

等常用嵌入式外围设备的硬件工作原理,以及如何使用C语言来编程、控制这些硬件。这一阶段除了要学习对硬件编程之外,还需要学习嵌入式硬件的知识,但是对于嵌入式软件工程师来讲,重点是学习硬件的工作原理,在掌握硬件工作原理的基础上,对硬件进行编程控制。这和硬件工程师学习的侧重点有所不同。
这一阶段对应的学校的课程主要包括模拟电路、数字电路、微机原理和单片机。这一阶段重点是要看CPU的芯片手册,大部分的参考书也是对芯片手册的翻译。
3、学习嵌入式系统的构建
这一阶段主要学习带有操作系统的嵌入式系统的构建,包括系统的
启动流程

* Bootloader的工作流程
* UBOOT的编译
* 裁剪与移植,嵌入式Linux内核的裁剪、移植与编译
* 嵌入式根文件系统的定制
* BootLoader、内核和根文件系统的烧写

这一阶段的主要目的是掌握带有操作系统的嵌入式系统的构建和烧写过程,以及对嵌入式系统软件的总体构成有个整体认识,为我们接下来学习嵌入式应用和驱动开发打下坚实的基础。
4、学习嵌入式Linux应用程序开发
这一阶段主要学习上层的嵌入式Linux应用程序开发,包括

* 基于Linux多进程
* 多线程网络
* 文件与目录
掌握嵌入式Linux环境下应用程序开发技术。
5、学习嵌入式Linux驱动程序开发
这一阶段主要学习底层嵌入式Linux设备驱动程序开发设计,包括

* 常用的字符设备驱动
* 块设备驱动
* LCD设备驱动
* 触摸屏设备驱动
以及驱动程序开发中的核心技术。
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,做的也基本上是应用级的事情,涉及不太深的技术,如果学历偏低但酷爱嵌入式行业的童鞋,可以把社会当成第二个学校,多多锻炼,只要技术牛总有出头之日。

我觉得身边能选择嵌入式行业的人,也心知肚明这水比较深,多少有些功夫和心气在里面。大多数人的工资基本上集中在8K
12K,例如:前几天在群里,大疆做摄像头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
函数开始的,没人天生就是大牛。当你决定在这个行业行走,当你走一段旅途觉得不适合自己,当你觉得这个行业陪你走过无数孤独的岁月是多么可贵,甚至你怨恨这个行业,我们寻求希望在它身上找到发财树,一辈子衣食无忧。可终究它是一个血汗的行业,耕种一份,收获一份。今天我学会一个小小的驱动程序,明天我为之披上一个名校研究生的外衣,无论如何,你做的所有的努力都是在丰富你的嵌入式道路,你也知道有些元素缺一不可,就像是我,研究生阶段也是不得不修学分,学没用的课,可我始终清晰自己的嵌入式道路。

互联网行业,可谓是“乱花渐欲迷人眼”,似乎鄙视链的一端是互联网人,一端是嵌入式人。稍微具备一点金融知识的人都清楚,互联网行业正处于通风口和转型时期,而这个时期需要巨大的能量和资金,基本上有眼力的金融家都来横插一脚。没有事情是永恒的,就像是支付宝的圣诞大红包,领着过瘾,可终究是昙花一现。大批量的互联网人,产品经理、程序员涌入,一旦泡沫拂去,谁在船上,谁在水里自然见分晓。万物在变,万变不离其宗的就是本心踏实宁静,多学多用,以期待少学多赚,终究是可替代性太强,太容易被淘汰。

认清自己,相信自己,风刮哪里就去哪里,终究是不入流啊。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信