构建嵌入式android系统
1. 嵌入式app 和开发式app的区别是什么
嵌入式app 和开发式app的区别是什么
【千夏软体】认为手机android app开发那个不叫嵌入式,android app只需要用java在上层进行应用开发就好
嵌入式涉及的知识太庞大,硬体部分需要对逻辑电路非常熟悉,需要做很多周边的电路设计,软体部分需要学习系统程式设计和底层驱动开发的知识,我们在arm开发的时候做的非常非常底层 verilog设计电路,针对硬体写驱动。
以android手机系统为例,嵌入式应用开发是底层开发的系统及电脑晶片里的控制程式,而android应用软体开发的是我们看得到的手机系统视窗里显示、使用的这些手机软体。两种开发使用语言不同、收入也区别很大,底层开发虽然不简单,但可以做的人很多,android应用程式开发因为目前安卓太火爆,而且这类软体盈利点多,人才需求大。如果你是选学习方向的,肯定是选择android更有前途,至少10年内是没问题的,智慧手机、平板、电视、汽车、家电、楼宇等等都需要android应用软体。
数码嵌入式技术与嵌入式软体开发的区别是什么?
数码嵌入式技术主要面向于DSP研发,嵌入式软体开发是个广义的方面,它主要是从事嵌入式研发软体程式设计方面的,因为嵌入式研发即包括硬体电路设计研发,也包括软体程式开发,同时还有作业系统研发。
什么叫做嵌入式开发,嵌入式开发和普通开发的区别?
嵌入式开发就是指在嵌入式作业系统下进行开发,一般常用的系统有WinCE,Palm,现在又多了Symbian等,其实只要会C++,在哪里都差不多,都有相应的SDK开发包。用微控制器汇编开发也算是嵌入式,用高阶一点的处理器,arm7,arm9,powerpc什么的开发起来,不过要加作业系统而已,也属于嵌入式的开发
嵌入式框架和框架的区别是什么?
嵌入式框架与框架网页类似,不同之处在于嵌入式框架及其内容嵌入在现有网页中。任何可以放入普通网页的内容都可以放到嵌入式框架中。可以像处理普通框架一样自定义嵌入式框架,还可以在此框架中启用滚动条。使用嵌入式框架而不是框架的好处之一是:制作嵌入内容时不需要单独建立框架网页。 嵌入式框架的用处很多: 可以插入合同让网站访问者填写。 可以给出其他网页外观的示例。 可以用作表单容器。 可以用作显示产品和价格的滚动框
嵌入式和微控制器的区别是什么
嵌入式,一般都是带系统的。把一个作业系统移植进微控制器里面,例如linux之类的系统。移植进微控制器后,程式设计的时候会有很多不一样的地方。
微控制器的话,就是一块整合块。不带系统的程式设计。
什么是嵌入式开发?嵌入式开发是什么?
本文为新手小白解释什么是嵌入式开发,希望对你们有所帮助。
首先来看一下什么是嵌入式:嵌入式技术是以应用为中心,以计算机技术为基础,并且软硬体可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统技术。它最初起源于微控制器技术, 是各类数字化的电子、机电产品的核心,主要用于实现对硬体装置的控制、监视或管理等功能。进入21世纪计算机应用的各行各业中90%左右的开发将涉及到嵌入式开发。全球嵌入式软体市场年增长率超过12.5%,嵌入式系统带来的工业年产值达一万亿美无,中国未来三年嵌入式软体产业将保持40%以上的年复合增长率。
另外,做软体实际上有高下之分,开发语言从机器语言、汇编到C、C++,再到红透半边天的Java、C#等,该学哪种呢?为什么有些开发者工资低,而有些开发者千金难求?为什么3年的Java高阶程式设计师薪水仅仅8k-10k,而一个Linux底层C语言程式设计师两年经验就敢要10k的薪水?
原因归根结底是门槛。比如月薪15k的Linux嵌入式开发职位,门槛就有 Linux系统、Shell程式设计、Linux开发环境、C语言、ARM硬体平台、资料结构、Linux核心、驱动程式等,粗略数数就有8道关口,他需要非常熟悉整个的计算机体系,能做出实际的产品,而Java的开发者却仅仅是会使用名叫Java的语言工具,始终高高飘在众多层次之上,开发专案非常快,甚至可以不知道OSI模型,很可能自始至终都是软体蓝领。华清远见-星创客培训完的应届毕业生,月薪可达到10k,帮你越过这些门槛。
嵌入式开发本身也有高下之分,至少包含嵌入式应用程式工程师和底层的驱动核心工程师两种。前者同样是使用现成工具进行简单劳动,比如使用J2ME开发小游戏或者进行一些接口开发,而后者是根据晶片具体情况把作业系统(如Linux)移植到上面,同时编写必要的驱动程式,改写相应的核心程式码。很显然后者是一个公司真正的技术核心。而技术核心的工资很可能是其他开发者的数倍。
嵌入式开发课程突出强制和专案,学习不仅仅是学习几项技术,而是构建你的知识体系。比如学习嵌入式开发,就要从基础Linux,C语言,资料结构开始,到ARM,汇编,Linux核心、驱动等,更重要的是更多的专案练习,设计至少5个专案,多达10000行强制核心程式码的编写可以让你真正获得知识。英语课程或者日语课程的学习,为进入外企或者出国做准备。
以上就是关于什么是嵌入式开发所讲述的内容,希望对你们有帮助。
嵌入式开发、嵌入式系统开发、嵌入式作业系统开发的区别
嵌入式开发 这个概念太大了 笼统的可以包括太多 我是没法给你说完的,笼统的说就是比如打篮球的姚明对你说他是个运动员,而不给你说他是篮球运动员一样。
嵌入式系统开发我理解的是可包括偏软体的系统开发和偏硬体的系统开发俩个“门派”,偏软体系统开发比如做linux的,需要学好C语言和C++,有扎实的程式设计基础,但是也需要了解一定的硬体知识,因为比如做bootloader的时候你得首先了解硬体再使bootloader能够在其成功执行并能引导系统和完成各种初始化工作。另外还得学好资料结构,编译原理,作业系统。 偏硬体的话就得学好电子硬体各类知识,比如做arm9的话要学会使用其datasheet手册,要会组合语言,有一定的程式设计能力。总之嵌入式系统这行的门槛比较高,一般都需要软硬兼懂。
作业系统开发的话我理解的话,比如linux,你要知道如何编写应用程式,如何编译bootloader,如何配置裁剪和移植核心,如何制作档案系统,如何编写和向硬体新增各硬体或者I0接口的驱动和QT图形化接口的制作。这类都是PC上开发程式设计,然后将编译调试出的比如.bin档案烧写到嵌入式平台上再执行,即所谓的交叉编译。 总之这类工作就是上面我认为的偏软的嵌入式系统开发。
总之如果要学嵌入式,无论做哪个方向,门槛都是比较高的,软硬兼吃。至于你说的三者的关系总结,我以为就是A>B>C。
单板电脑与嵌入式开发板的区别是什么
单板计算机基于单一电路板而构建的完整计算机,包括微处理器、记忆体、乙太网、I/O、视讯和音讯输出。设计的核心架构是微处理器。第一台真正的单板计算机可能是基于 Intel 8080 CPU 构建的 MYCRO-1。 单板计算机具有类似其他插入卡的构型,专门应用于底板中。某些架构完全视单板计算机而定,如 PICMG、ISA、PCI、Compact PCI、VME 等架构。
嵌入式硬体和软体的区别是什么?
嵌入式系统是由软体和硬体组成的整体。
硬体部分可以分成嵌入式处理器和外部装置。
处理器是整个系统的核心,负责处理所有的软体程式以及外部装置的讯号。
外部装置在不同的系统中有不同的选择。
比如在汽车上,外部装置主要是感测器,用于采集资料;
而在一部手机上,外部装置可以是键盘、液晶萤幕等。
软体部分可以分成两层,最靠近硬体的是嵌入式作业系统。
作业系统是软硬体的接口,负责管理系统的所有软体和硬体资源。
作业系统还可以通过驱动程式与外部装置打交道。
最上层的是应用软体,应用软体利用作业系统提供的功能开发出针对某个需求的程式,供使用者使用。
使用者最终是和应用软体打交道,例如在手机上编写一条简讯,使用者看到的是简讯编写软体的接口,而看不到里面的作业系统以及嵌入式处理器等硬体。
一般来说,嵌入式硬体指逻辑电路、嵌入式处理器、微控制器、储存系统和硬体设计技巧等。
嵌入式硬体开发工程师主要编写嵌入式系统硬体总体方案和详细方案,要求理解嵌入式系统架构,有一定的C语言基础,熟悉ARM、PROTEL设计软体,有四层板开发经验。
国内通常所说的嵌入式硬体指利用处理器开发外部装置方面。
嵌入式软体就是嵌入在硬体中的作业系统和开发工具软体,它在产业中的关联关系体现为:晶片设计制造→嵌入式系统软体→嵌入式电子装置开发、制造。
嵌入式软体就是基于嵌入式系统设计的软体,它也是计算机软体的一种,同样由程式及其文件组成,可细分成系统软体、支撑软体、应用软体三类,是嵌入式系统的重要组成部分。
但国内通常所说的嵌入式软体主要指最靠近硬体的系统软体与支撑软体部分。
嵌入式开发是3G嵌入式开吗?有何关联区别?
嵌入式就是嵌入式,嵌入式里面分,软体开发和硬体开发 3G 是指
JAVA+安卓 3G就是软体开发,没有硬体
2. 为什么Android系统属于嵌入式操作系统
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。
3. Android是嵌入式操作系统吗
除了PC外,其他的几乎都是嵌入式操作系统(Win8平板除外)。
嵌入式操作系统是指用于嵌入式系统的操作系统。嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前在嵌入式领域广泛使用的操作系统有:嵌入式实时操作系统µC/OS-II、嵌入式Linux、Windows Embedded、VxWorks等,以及应用在智能手机和平板电脑的Android、iOS等。
4. 试用嵌入式系统的概念分析android和app之间关系
1、android和app都是软件,android一般用c或c++编写,android上安装相应的语言解释器,app就可以使用相应的语言编写,比如java、js等。
2、android是直接操作硬件,包括了硬件的驱动程序,内存的管理等
3、app是在android操作系统上运行的一个程序,app无法直接操作硬件,只能通过android提供的接口间接的操作硬件。
举例说明:app要实现拍照功能,app只要调用android提供给app打开摄像头,获取图像数据的接口,关于摄像头芯片的时序呀、寄存器配置呀、怎么获得图像数据,甚至怎么打开闪光灯都是android考虑的事情。
5. 嵌入式linux和嵌入式android系统有什么区别和联系
嵌入式linux系统是在嵌入式设备中运行linux系统。 嵌入式android系统是在嵌入式设备中运行android系统。 其区别就是android系统和linux系统的区别。 android系统的底层是linux的内核,上面跑的是android的java虚拟机
6. 如何自学嵌入式
原文链接:网页链接
嵌入式Linux学习路线图
我是1999年上的大学,物理专业。在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么。你当下的经历、当下的学习,在未来的一天肯定会影响到你。毕业后我们也各自找到了自己的职业:出国深造转行做金融、留校任教做科研、设计芯片、写程序、创办公司等等,这一切都离不开在校时学到的基础技能(数学、IT、电子电路)、受过煅炼的自学能力。
所以,各位正在迷茫的在校生,各位正在尝试转行的程序员,未来一定有你的位置,是好是坏取决于你当下的努力与积累。
我不能预言几年后什么行业会热门,也不能保证你照着本文学习可以发财。我只是一个有十几年经验的程序员,给对编程有兴趣的你,提供一些建议。
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核心源代码情景分析》,此书分上下册,巨厚无比。当作字典看即可:想深入理解某方面的知识,就去看某章节。
③其他好书还有很多,我没怎么看,没有更多建议
基于快速入门,上手工作的目的,您先不用看上面的书,先按本文学习。
2.1 入门路线图
假设您是零基础,我们规划了如下入门路线图。前面的知识,是后面知识的基础,建议按顺序学习。每一部分,不一定需要学得很深入透彻,下面分章节描述。
2.2 学习驱动程序之前的基础知识
2.2.1 C语言
只要是理工科专业的,似乎都会教C语言。我见过很多C语言考试90、100分的,一上机就傻了,我怀疑他们都没在电脑上写过程序。
理论再好,没有实践不能干活的话,公司招你去干嘛?
反过来,实践出真知,学习C语言,必须练练练、写写写!
当你掌握基本语法后,就可以在电脑上练习一些C语言习题了;
当你写过几个C程序后,就可以进入下一阶段的裸机开发了。
①不需要太深入
作为快速入门,只要你会编写“Hello, world!”,会写冒泡排序,会一些基础的语法操作,暂时就够了。
指针操作是重点,多练习;
不需要去学习过多的数据结构知识,只需要掌握链表操作,其他不用学习,比如:队列、二叉树等等都不用学;不需要去学习任何的函数使用,比如文件操作、多线程编程、网络编程等等;这些知识,在编写Linux应用程序时会用,但是在操作系统特别是驱动学习时,用不着!
永往直前吧,以后碰到不懂的C语言问题,我们再回过头来学习。
在后续的“裸机开发”中,会让你继续练习C语言,那会更实战化。
C语言是在写代码中精进的。
②可以在Visual Studio下学习,也可以在Linux下学习,后者需要掌握一些编译命令,我们暂时没有提供C语言的教程,找一本C语言书,网上找找免费的C语言视频(主要看怎么搭建环境),就可以自学了。
2.2.2 PC Linux基本操作:
对于PC Linux,我们推荐使用Ubuntu,在它上面安装软件非常简便。
我们的工作模式通常是这样:在Windows下阅读、编写代码,然后把代码上传到PC Linux去编译。实际上,Ubuntu的桌面系统已经很好用了,我们拿到各种智能机可以很快上手,相信Ubuntu的桌面系统也可以让你很快上手。为了提高工作效率,我们通常使用命令行来操作Ubuntu。
不用担心,你前期只需要掌握这几条命令就可以了,它们是如此简单,我干脆列出它们:
①cd : Change Directory(改变目录)
cd 目录名 // 进入某个目录cd .. // cd “两个点”:返回上一级目录cd - // cd “短横”:返回上一次所在目录
②pwd : Print Work Directory(打印当前目录 显示出当前工作目录的绝对路径)
③mkdir : Make Directory(创建目录)
mkdir abc // 创建文件夹abcmkdir -p a/b/c // 创建文件夹a,再a下创建文件夹b,再在b下创建文件夹c
④rm : Remove(删除目录或文件)
rm file // 删除名为file的文件rm -rf dir // 删除名为dir的目录
⑤ls : List(列出目录内容)
⑥mount : 挂载
mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mntmount -t yaffs /dev/mtdblock3 /mnt
⑦chown : Change owner(改变文件的属主,即拥有者)
chown book:book /work -R //对/work目录及其下所有内容,属主改为book用户,组改为book
⑧chmod : Change mode(改变权限),下面的例子很简单粗暴
chmod 777 /work -R // 对/work目录及其下所有内容,权限改为可读、可写、可执行
⑨vi : Linux下最常用的编辑命令,使用稍微复杂,请自己搜索用法。
要练习这些命令,你可以进入Ubuntu桌面系统后,打开终端输入那些命令;或是用SecureCRT、putty等工具远程登录Ubuntu后练习。
2.2.3 硬件知识
我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。
对于正统的方法,你应该这样学习:
①学习《微机原理》,理解一个计算机的组成及各个部件的交互原理。
②学习《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。
③《模拟电路》?好吧,这个不用学,至少我在工作中基本用不到它,现在全忘光了。
就我个人经验来说,这些课程是有用的,但是:
①原理有用,实战性不强。
比如《微机原理》是基于x86系统,跟ARM板子有很大差别,当然原理相通。
我是在接触嵌入式编程后,才理解了这些课程。
②每本书都那么厚,内容都很多,学习时间过长,自学有难度。
针对这些校园教材的不足,并结合实际开发过程中要用到的知识点,我们推出了《学前班_怎么看原理图》的系列视频:
学前班第1课第1节___怎么看原理图之GPIO和门电路.wmv
学前班第1课第2.1节_怎么看原理图之协议类接口之UART.wmv
学前班第1课第2.2节_怎么看原理图之协议类接口之I2C.wmv
学前班第1课第2.3节_怎么看原理图之协议类接口之SPI.wmv
学前班第1课第2.4节_怎么看原理图之协议类接口之NAND Flash.wmv
学前班第1课第2.5节_怎么看原理图之协议类接口之LCD.wmv
学前班第1课第3节___怎么看原理图之内存类接口.wmv
学前班第1课第4.1节_怎么看原理图之分析S3C2410开发板.wmv
学前班第1课第4.2节_怎么看原理图之分析S3C2440开发板.wmv
学前班第1课第4.3节_怎么看原理图之分析S3C6410开发板.wmv
即使你只具备初中物理课的电路知识,我也希望能通过这些视频,让你可以看懂原理图,理解一些常见的通信协议;如果你想掌握更多的硬件知识,这些视频也可以起个索引作用,让你知道缺乏什么知识。
这些视频所讲到的硬件知识,将在《裸板开发》系列视频中用到,到时可以相互对照着看,加深理解。
2.2.4 要不要专门学习Windows下的单片机开发
很多学校都开通了单片机的课程,很多人都是从51单片机、AVR单片机,现在比较新的STM32单片机开始接触嵌入式领域,并且使用Windows下的开发软件,比如keil、MDK等。
问题来了,要不要专门学习Windows下的单片机开发?
①如果这是你们专业的必修课,那就学吧
②如果你的专业跟单片机密切相关,比如机械控制等,那就学吧
③如果你只是想从单片机入门,然后学习更广阔的嵌入式Linux,那么放弃在Windows下学习单片机吧!
理由如下:
①Windows下的单片机学习,深度不够
Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。
它们封装了很多技术细节,比如:
你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;
你可以编写中断处理函数,但是却不知道它是怎么被调用的;
你不知道程序怎么从Flash上被读入内存;
也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪;
当你想裁剪程序降低对Flash、内存的使用时,你无从下手;
当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂;
等等等。
②基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。
在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。
一切从零编写代码、管理代码,可以让我们学习到更多知识:
你需要了解芯片的上电启动过程,知道第1条代码如何运行;
你需要掌握怎么把程序从Flash上读入内存;
需要理解内存怎么规划使用,比如栈在哪,堆在哪;
需要理解代码重定位;
需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;
你会知道,main函数不是我们编写的第1个函数;
你会知道,芯片从上电开始,程序是怎么被搬运执行的;
你会知道,函数调用过程中,参数是如何传递的;
你会知道,中断发生时,每一个寄存器的值都要小心对待;
等等等。
你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。
驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作,我们可以从简单的裸机开发入手,先掌握硬件操作,并且还可以:
①掌握如何在PC Linux下编译程序、把程序烧录到板子上并运行它
②为学习bootloader打基础:掌握了各种硬件操作后,后面一组合就是一个bootloader
2.2.5 为什么选择ARM9 S3C2440开发板,而不是其他性能更好的?
有一个错误的概念:S3C2440过时了、ARM9过时了。
这是不对的,如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。
一款芯片,上面有CPU,还有众多的片上设备(比如UART、USB、LCD控制器)。我们写程序时,并不涉及CPU,只是去操作那些片上设备。
所以:差别在于片上设备,不在于CPU核;差别在于寄存器操作不一样。
因为我们写驱动并不涉及CPU的核心,只是操作CPU之外的设备,只是读写这些设备的寄存器。
之所以推荐S3C2440,是因为它的Linux学习资料最丰富,并有配套的第1、2期视频。
2.2.6 怎么学习ARM+Linux的裸机开发
学习裸机开发的目的有两个:
①掌握裸机程序的结构,为后续的u-boot作准备
②练习硬件知识,即:怎么看原理图、芯片手册,怎么写代码来操作硬件
后面的u-boot可以认为是裸机程序的集合,我们在裸机开发中逐个掌握各个部件,再集合起来就可以得到一个u-boot了。
后续的驱动开发,也涉及硬件操作,你可以在裸机开发中学习硬件知识。
注意:如果你并不关心裸机的程序结构,不关心bootloader的实现,这部分是可以先略过的。在后面的驱动视频中,我们也会重新讲解所涉及的硬件知识。
推荐两本书:杜春蕾的《ARM体系结构与编程》,韦东山的《嵌入式Linux应用开发完全手册》。后者也许是国内第1本涉及在PC Linux环境下开发的ARM裸机程序的书,如果我说错了,请原谅我书读得少。
对于裸机开发,我们提供有2部分视频:
①环境搭建
第0课第1节_刚接触开发板之接口接线.wmv
第0课第2节_刚接触开发板之烧写裸板程序.wmv
第0课第3节_刚接触开发板之重烧整个系统.wmv
第0课第4节_刚接触开发板之使用vmwae和预先做好的ubuntu.wmv
第0课第5节_刚接触开发板之u-boot打补丁编译使用及建sourceinsight工程.wmv
第0课第6节_刚接触开发板之内核u-boot打补丁编译使用及建sourceinsight工程.wmv
第0课第7节_刚接触开发板之制作根文件系统及初试驱动.wmv
第0课第8节_在TQ2440,MINI2440上搭建视频所用系统.wmv
第0课第9节_win7下不能使用dnw烧写的替代方法.wmv
.................未完
原文链接:网页链接
7. Android嵌入式系统主要用于什么方面发展前景如何
目前国内的Android开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到Android Market或者其他App Market销售)以及游戏开发(放到Android Market或者其他App Market销售)。第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google的移动广告(AdMob)通过广告点击分成。移动互联网行业目前还在热门阶段。有兴趣可深入了解。
8. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗
嵌入式实时操作系统其主要特点如下:
●实时性。由于对嵌人式实时操作系统的共同要求是系统能快速响应事件,具有较强的实时性,所以嵌入式实时操作系统的内核都是可抢占的。
●可裁剪性。嵌入式操作系统运行的硬件平台多种多样,其宿主对象更是五花八门,所以要求嵌入式操作系统中提供的各个功能模块可以让用户根据需要选择使用,即要求它具有良好的可裁剪性。
●高可靠性。嵌入式系统广泛应用于军事武器、航空航天、交通运输、重要的生产设各领域,所以要求嵌人式操作系统必须有极高的可靠性,对关键、要害的应用还要提供必要的容错和防错措施,以进一步提高系统的可靠性。
●易移植性。为了适应多种多样的硬件平台,嵌人式操作系统应可在不做大量修改的情况下能稳定地运行于不同的平台。
Android 操作系统用的内核是linux,而linux内核不属于实时操作系统范畴。 所以Android不是实时操作系统。
9. android系统的系统架构
架构详解
Linux Kernel
Android基于Linux kernel 提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。 如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAccess Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。
Android Runtime
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以将 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。 Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。
Library
Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、MP3、 AAC、AMR、JPG、 PNG界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图SGL——基本的2D图形引擎3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅FreeType——位图和矢量字体渲染SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎
Application Framework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括:视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能
Application
Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆叠(Software Stack),或称为“软件叠层架构”,叠层主要分成三层:操作系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。
10. 什么是android嵌入式开发
android嵌入式开发
移动是IT发展未来 !嵌入式底层就是移动的发展未来 !如何在这个风云际会的时代,让自己积极的参与其中,作为程序员 ,嵌入式是无可避免的选择 !Android嵌入式底层课程继续以Sundy独有的分享方式 ,
基本信息
中文名称
android嵌入式开发
发布时间
2012年
时 长
300小时+
语 种
中文
目录
1简介
2基本信息
3目录
折叠编辑本段简介
移动是IT发展未来 !嵌入式底层就是移动的发展未来 !如何在这个风云际会的时代,让自己积极的参与其中,作为程序员 ,嵌入式是无可避免的选择 !Android嵌入式底层课程继续以Sundy独有的分享方式 ,深入浅出,不仅仅讲解技术,更多的关注大家的职业生涯和发展,关注企业规模化工作中的模式。
折叠编辑本段基本信息
名称:android嵌入式底层开发
时长:300小时+
语种:中文
发布时间:2012年
作者:sundy(张凌华)
折叠编辑本段目录
折叠第一阶段
Linux基础及操作系统框架概述
Linux常用命令及vi
Linux系统设置
C语言重点难点讲解
Linux Shell编程
折叠第二阶段
GNU开发环境基础
GNU Makefile
Linux嵌入式系统开发环境搭建
Linux应用系统开发基础
Linux文件I/O编程
Linux进程控制
Linux进程间通讯
Linux多线程编程
Linux网络编程
折叠第三阶段
嵌入式系统及微处理器概述
嵌入式电路图基础
ARM处理器系统结构
ARM总线方式及存储器结构层次
ARM指令集及寻址方式,Thumb指令
ARM开发环境ADS应用
ARM汇编及混合编程
Bootloader介绍及Uboot结构讲解
Uboot全方位(移植,修改,编译,生成,烧写)
ARM硬件接口开发
裸板驱动开发
折叠第四阶段
嵌入式Linux系统开发及移植
Linux内核原理概要
Linux内核配置与裁减
Linux内核编程
Linux驱动开发基础
Linux驱动开发深入
折叠第五阶段
Android系统驱动开发差异化
Android特定驱动开发
Android系统移植概述
Android RIL开发基础
Webkit在Android上的移植
课程总结:未来是移动的未来
折叠项目
:Android从底层驱动一直到上层的修改,移植 ,通过编写一个上层的Application来操作底层硬件;:
车载通讯多媒体系统(网络通信协议应用,包括蓝牙,NFC,FM)遵循Delphi组织欧洲车载Android标准规范;
物联网家居控制模块儿(家庭视频采集及传输模块,实现远程监控);
Android电磁原理手机无线充电改装(以Sundy的Galaxy Nexus为例,改装手机无线充电功能并且扩展外设-包括底座及手机);