嵌入式Linux+Android学习路线图

时间:2017-07-27 编辑:小静 手机版

  嵌入式Linux的特点是版权费免费,购买费用媒介成本技术支持全世界的自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持等。下面是小编整理的嵌入式Linux+Android学习路线图,希望大家喜欢!

  1. 程序员的三大方向

  程序员的方向,一般可以分为3类:专业领域、业务领域、操作系统领域。你了解它们后,按兴趣选择吧。

  对于专业领域,我提供不了建议。

  业务,也就是应用程序,它跟操作系统并不是截然分开的:

  ①开发实体产品时,应用程序写得好的人,有时候需要操作系统的知识,比如调度优先级的设置、知道某些函数可能会令进程休眠。

  ②写应用程序的人进阶为系统工程师时,他需要从上到下都了解,这时候就需要有操作系统领域的知识了,否则,你怎么设计整个系统的方案呢?

  ③做应用程序的人,需要了解行业的需求,理解业务的逻辑。所以,当领导的人,多是做应用的。一旦钻入了某个行业,很难换行业。

  ④而操作系统领域,做好了这是通杀各行业:他只负责底层系统,在上面开发什么业务跟他没关系。这行很多是技术宅,行业专家。

  ⑤操作系统和业务之间并没有一个界线。有操作系统经验,再去做应用,你会对系统知根知底,碰到问题时都有解决思路。有了业务经验,你再了解一下操作系统,很快就可以组成一个团队自立门户,至少做个CTO没问题。

  1.1 专业领域

  它又可以分为下面2类。

  1.1.1 学术研究

  比如语音、图像处理、人工智能,这类工作需要你有比较强的理论知识,我倾向于认为这类人是“科学家”,他们钻研多年,很多时候是在做学术研究。

  在嵌入式领域,需要把他们的成果用某种算法表达出来,针对某种芯片进行优化,这部分工作也许有专人来做。

  1.1.2 工程实现

  也有这样一类人,他们懂得这些专业领域的概念,但是没有深入钻研。可以使用各类开源资料实现某个目标,做出产品。比如图像处理,他懂得用opencv里几百个复杂函数来实现头像识别。有时候还可以根据具体芯片来优化这些函数。

  “专业领域”不是我的菜,如果你要做这一块,我想最好的入门方法是在学校学习研究生、博士课程。

  1.2 业务领域

  换句话说,就是应用程序,这又可以分为下面2类。

  1.2.1 界面显示

  做产品当然需要好的界面,但是,不是说它不重要,是没什么发展后劲。

  现在的热门词是Android APP和IOS APP开发。你不要被Android、IOS两个词骗了,它们跟以前的VC、VB是同一路货色,只是、仅仅是一套GUI控件的实现。

  希望没有冒犯到你,我有理由。

  一个程序需要有GUI界面,但是程序的内在逻辑才是核心。Android、IOS的开发工具给我们简化了GUI的开发,并提供了这些控件的交互机制,封装并提供了一些服务(比如网络传输)。

  但是程序内部的业务逻辑、对视频图像声音的处理等等,这才是核心。

  另外别忘了服务器那边的后台程序:怎样更安全地保存数据、保护客户的隐私,怎样处理成千上万上百万的并发访问,等等,这也是核心。

  但是,从Android、IOS APP入门入行,这很快!如果你是大四,急于找到一份工作,那么花上1、2个月去学习Android或IOS,应该容易找到工作,毕竟APP的需求永远是最大的,现在这两门技术还算热门。

  在2011、2012年左右,Android程序员的起薪挺高,然后开始下滑。Android APP的入门基本只要1个月,所以懂的人也越来越多。

  2013、2014年,IOS开发的工资明显比Android高了,于是各类IOS培训也火曝起来。中华大地向来不缺速成人才,估计再过一阵子IOS工程师也是白菜价了。

  会Android、IOS只是基本要求,不信去51job搜搜Android或IOS,职位要求里肯定其他要求。

  1.2.2 业务逻辑

  举个简单例子,做一个打卡软件,你需要考虑这些东西:

  ①正常流程是上班下班时都要打卡

  ②有人忘记了怎么办?作为异常记录在案,推送给管理员

  ③请假时怎么处理?

  ④加班怎么处理?

  对于更复杂的例子,视频会议系统里,各个模块怎么对接,各类协议怎么兼容,你不深入这个行业,你根本搞不清楚。

  应用开发的职位永远是最多的,入门门槛也低。基本上只要你会C语言,面试时表现比较得体,一般公司都会给你机会。因为:

  ①你进公司后,还需要重新培训你:熟悉它们的业务逻辑。

  ②你要做的,基本也就是一个个模块,框架都有人给你定好了,你去填代码就可以了。

  说点让你高兴的事:软件公司里,做领导的基本都是写应用程序的(当然还有做市场的)。写应用程序的人,对外可以研究市场接待客户,对内可以管理程序员完成开发,不让他做领导让谁做?

  如果你的志向是写应用程序,那么我建议你先练好基本功:数据结构、算法是必备,然后凭兴趣选择数据库、网络编程等等进行深入钻研。

  最后,选择你看好的、感兴趣的行业深耕个10年吧。做应用开发的人选择了某个行业,后面是很难换行业的,选行很重要!

  1.3 操作系统领域

  UCOS太简单,VxWorks太贵太专业,Windows不玩嵌入式了,IOS不开源,所以对于操作系统领域我们也只能玩Linux了。

  在嵌入式领域Linux一家独大!

  Android呢?Android跟QT一样,都是一套GUI系统。只是Google的实力太强了,现在Android无处不在,所以很多时候Linux+Android成了标配。注意,在这里我们关心的是Android的整个系统、里面的机制,而不是学习几个API然后开发界面程序。

  操作系统领域所包含的内容,简单地说,就是制作出一台装好系统的专用“电脑”,可以分为:

  ①为产品规划硬件:

  按需求、性能、成本选择主芯片,搭配周边外设,交由硬件开发人员设计。

  ②给单板制作、安装操作系统、编写驱动

  ③定制维护、升级等系统方案

  ④还可能要配置、安装Android等GUI系统:

  ⑤为应用开发人员配置开发环境

  ⑥从系统角度解决疑难问题

  这个领域,通常被称为“底层系统”或是“驱动开发”。

  先解决2个常见误区:

  ①这份工作是写驱动程序吗?

  看看上面罗列的6点,应该说,它包含驱动开发,但远远不只有驱动开发。

  ②我们还需要写驱动吗?不是有原厂吗?或者只需要改改就可以?

  经常有人说,芯片原厂都做好驱动了,拿过来改改就可以了。如果,你的硬件跟原厂的公板完全一样,原厂源码毫无BUG,不想优化性能、削减成本,不想做一些有特色的产品,那这话是正确的。

  但是在这个不创新就是找死的年代,可能吗?!原因有二:

  ①即使只是修改代码,能修改的前提是能理解;能理解的最好煅炼方法是从零写出若干驱动程序

  ②很多时候,需要你深度定制系统。

  以前做联发科手机只需要改改界面就可以出货了,现在山寨厂一批批倒下。大家都使用原厂的方案而不加修改时,最后只能拼成本。

  举个例子,深圳有2家做交通摄像头、监控摄像头的厂家,他们曾经找我做过4个项目:

  ①改进厂家给的SD卡驱动性能,使用DMA。

  ②换了Flash型号后,系统经常出问题,需要修改驱动BUG。

  ③触摸屏点击不准,找原因,后来发现是旁路电容导致的。

  ④裁减成本,把4片DDR换为2片DDR,需要改bootloader对DDR的初始化。

  这些项目都很急,搞不定就无法出货,这时候找原厂?除非你是中兴华为等大客户,否则谁理你?

  我在中兴公司上班时,写驱动的时间其实是很少的,大部分时间是调试:系统调优,上帮APP工程师、下帮硬件工程师查找问题。

  我们从厂家、网上得到的源码,很多都是标准的,当然可以直接用。但是在你的产品上也许优化一下更好。比如我们可以把摄像头驱动和DMA驱动揉合起来,让摄像头的数据直接通过DMA发到DSP去。

  我们可以在软件和硬件之间起桥梁作用,对于实体产品,有可能是软件出问题也可能是硬件出问题,一般是底层系统工程师比较容易找出问题。

  当硬件、软件应用出现问题,他们解决不了时,从底层软件角度给他们出主意,给他们提供工具。

  再比如方案选择:芯片性能能否达标、可用的BSP是否完善等等,这只能由负责整个方案的人来考虑,他必须懂底层。

  在操作系统领域,对知识的要求很多:

  ①懂硬件知识才能看懂电路图

  ②英文好会看芯片手册

  ③有编写、移植驱动程序的能力

  ④对操作系统本身有一定的理解,才能解决各类疑难问题

  ⑤理解Android内部机制

  ⑥懂汇编、C语言、C++、JAVA

  它绝对是一个大坑,没有兴趣、没有毅力的人慎选。

  ①这行的入门,绝对需要半年以上,即使全天学习也要半年。

  ②它的职位,绝对比APP的职位少

  ③并且你没有1、2年经验,招你到公司后一开始你做的还是APP。

  优点就是:

  ①学好后,行业通杀,想换行就换行;想自己做产品就自己做产品。

  ②相比做应用程序的人,不会被经常变动的需求搞得天天加班。

  ③门槛高,当然薪水相对就高。

  操作系统领域,我认为适合于这些人:

  ①硬件工程师想转软件工程师,从底层软件入门会比较好

  ②单片机工程师,想升级一下。会Linux底层的人肯定会单片机,会单片机的人不一定会Linux。

  ③时间充足的学生:如果你正读大二大三,那么花上半年学习嵌入式Linux底层多有益处。

  ④想掌握整个系统的人,比如你正在公司里写APP,但是想升为系统工程师,那么底层不得不学。

  ⑤想自己创业做实体产品的工程师,你有钱的话什么技术都不用学,但是如果没钱又想做产品,那么Linux底层不得不学。

  ⑥做Linux APP的人,没错,他们也要学习。

  这部分人不需要深入,了解个大概就可以:bootloader是用来启动内核,Linux的文件系统(第1个程序是什么、做什么、各目录干嘛用)、APP跟驱动程序的调用关系、工具链,有这些概念就可以了

  本文中,就把操作系统默认为Linux,讲讲怎么学习嵌入式Linux+Android系统。

  1.4 嵌入式Linux+Android系统包含哪些内容

  嵌入式Linux系统包含哪些东西?不要急,举一个例子你就知道了。

  ①电脑一开机,那些界面是谁显示的?

  是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。

  类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。

  ②启动windows的目的是什么?

  当然运行应用程序以便上网、聊天什么的了。

  这些上网程序、聊天程序在哪?

  在C盘、D盘上。

  所以,windows要先识别出C盘、D盘。在Linux下我们称之为根文件系统。

  ③windows能识别出C盘、D盘,那么肯定有读写硬盘的能力。

  这个能力我们称之为驱动程序。当然不仅仅是操作硬盘,还有网卡、USB等等其他硬件。

  嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。

  简单地说,嵌入式LINUX系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android。

  所以,嵌入式Linux+Android系统包含以下6部分内容:

  ①bootloader

  ②Linux内核

  ③驱动程序

  ④使用C/C++编写的应用程序

  ⑤Android系统本身

  ⑥Android应用程序

  Android跟Linux的联系实在太大了,它的应用是如此广泛,学习了Linux之后没有理由停下来不学习Android。在大多数智能设备中,运行的是Linux操作系统;它上面要么安装有Android,要么可以跟Android手机互联。现在,Linux+Android已成标配。

  2. 怎么学习嵌入式Linux操作系统

  本文假设您是零基础,以实用为主,用最快的时间让你入门;后面也会附上想深入学习时可以参考的资料。

  在实际工作中,我们从事的是“操作系统”周边的开发,并不会太深入学习、修改操作系统本身。

  ①操作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序

  ②学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程序后,也会加深对操作系统其他部分的理解

  ③Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成

  但是,要成为该领域的高手,一定要深入理解Linux操作系统本身,要去研读它的源代码。

  在忙完工作,闲暇之余,可以看看这些书:

  ①赵炯的《linux内核完全注释》,这本比较薄,推荐这本。他后来又出了《Linux 内核完全剖析》,太厚了,搞不好看了后面就忘记前面了。

  ②毛德操、胡希明的《LINUX核心源代码情景分析》,此书分上下册,巨厚无比。当作字典看即可:想深入理解某方面的知识,就去看某章节。

  ③其他好书还有很多,我没怎么看,没有更多建议

[嵌入式Linux+Android学习路线图]相关文章:

1.怎么学习嵌入式linux

2.嵌入式linux入门学习规划

3.学习嵌入式linux的步骤

4.嵌入式Linux详解

5.嵌入式Linux系统概述

6.2016年嵌入式项目中使用Linux的技巧

7.关于嵌入式Linux系统基础知识

8.Linux操作系统成为嵌入式操作系统的因素

9.嵌入式Linux必学文件处理命令

10.嵌入式Linux系统安全性问题的解决

嵌入式Linux+Android学习路线图相关推荐