嵌入式专业是一门实践性很是强的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。那么,如何从零开始学习嵌入式开发技术, 进入嵌入式开发大门呢,笔者根据本身的嵌入式学习经历和多年的嵌入式linux教学经验,谈谈本身对嵌入式学习的一些想法和意见,但愿对你们有所帮助。linux
嵌入式系统专业是综合了计算机硬件技术,计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识很是普遍,包括:数字电路,模拟电路,计算机组成原理,单片机基础,C语言基础,操做系统,数据结构,编译原理,计算机控制,计算机网络等知识。
对于C语言,至少能单独编写调试一个3 ~ 500行的程序,可以了解C语言的基本语法规则,基本语句的使用,理解指针概念并能灵活使用各类指针。
计算机组成原理要能理解组成一个计算机系统的几大部件,计算机系统的结构,理解系统总线,理解处理器和计算机外部设备的关系,处理器和计算机外设是如何协调工做完成某一项功能的,计算机软件和硬件是如何分工协做完成某一项任务的,理解软件是经过寄存器来控制硬件的。
数字电路,模拟电路要了解其基本原理个概念,能看懂简单模拟、数字电路原理图。理解数字电路中的寄存器,时序的概念,能看懂芯片手册和时序图。对于其余基础课程,重点要理解其中的一些基本概念,如何使用等等。
对 于电子,自动化,通讯,计算机类专业的学生,在大2、大三开设的专业基础或专业课程中基本包含了以上的大部分课程。由于缺少实践,可能学得不是很深刻,但 是一些基本的概念和基本知识应该仍是有所了解,针对一些薄弱环节,本身稍微增强学习一下,基本上已经具有了学习嵌入式开发的基础。在嵌入式基本功学习阶 段,最重要的是C语言和单片机基础,最好是能用C语言开发一个小的单片机程序,例如用C语言实现单片机和PC的串口通讯,用C语言控制LED等显示,用C 语言控制数码管显示等小程序。在这个期间须要的学习工具就是单片机51学习开发板。数据库
嵌 入式开发基础知识学习完后,这时候你已经有了必定的嵌入式开发基础了,能够进行基于单片机的嵌入式系统设计了。单片机编程自己也是属于嵌入式编程,可是在 这里咱们只是把单片机开发看成嵌入式系统开发的基础,不把单片机开发做为真正的嵌入式系统开发,在这里咱们的嵌入式系统开发是指在带有操做系统的嵌入式平 台上的应用和驱动开发,特别指在嵌入式linux平台上的开发。
单片机开发在很早之前是很是热门的,如今在一些比较简单的系统上单片机也用的很是 普遍,随着硬件的成本不断下降,在一些比较复杂的嵌入式设备通常都采用嵌入式linux操做系统,在嵌入式linux平台上进行开发,这样能够极大的提升 嵌入式开发效率,提升系统的稳定性和可靠性,下降开发成本。因为linux是一个开源的操做系统,你能够经过阅读linux内核来理解内核的实现机制,如 果有须要,你甚至能够经过修改内核源码来提升系统的性能;同时,全球参与linux开发的队伍很是庞大,网上有大量的嵌入式linux开发资料和源代码, 不少你须要实现的功能在网上基本都能找到相关源码,参考一下别人写的源码,这样能够极大的提升本身的工做效率和技术能力,近几年,随着参与linux开发 的人愈来愈多,linux系统的稳定性、实时性有了很大的提升,linux系统不管在服务器上仍是嵌入式设备平台上都应用愈来愈普遍,如今包括华为、中 兴、朗讯的各大通讯巨头都开始把本身设备的底层平台从vxworks操做系统迁移到linux系统,能够说嵌入式linux是嵌入式技术发展一个方向,是 嵌入式技术的一面旗帜。基于以上缘由,个人建议是学嵌入式开发,就学嵌入式linux开发,相对于wince等其余的嵌入式平台,你能够真正学到更多的东 西,学到嵌入式技术的精髓,同时他又符合嵌入式产业发展的方向,不容易被突飞猛进的技术发展所淘汰。
有了嵌入式开发的基础,又知道了咱们为何要学习嵌入式linux开发,那咱们就要开始动手开始学习了,那如何开始学习嵌入式linux开发,从哪里开始着手呢?
很 多同窗这时候就开始买linux书籍,从图书馆借了一大堆关于linux的书:什么《linux使用基础教程》、《linux源码深度分析》、 《linux情景分析等》、 《linux高级使用指南》等等。结果抱着这些图书看了10天半个月仍是不知所云,当初学习的激情慢慢就消退了,最后不了了之,终究没有进入嵌入式开发大 门。究其缘由,是由于没有找到合适学习嵌入式开发的方法,作任何事情都有方法可循,找对了学习方法每每就能事半功倍;不然就多是事倍功半,甚至劳而无 功。接下来我先分析一下同窗们的几种常见的嵌入式linux学习误区,而后提出一种比较合适的嵌入式linux学习方法。编程
误区1、全身投入学习桌面或服务器版本linux系统。ubuntu
很 多想学嵌入式linux 的同窗常常问我,我不会linux系统,怎么学习嵌入式linux开发,因而他们就花费了大量的精力和时间去研究学习桌面版本linux系统的使用,什么 redhat 、federo,、ubuntu等等都用过,如何配置linux,linux的各类使用命令都背的倒背如流,linux各类服务器的配置,还原备份各类操 做很是熟悉,觉得这样就学会了嵌入式linux开发。其实这是一个学习嵌入式Linux开发的误区。Linux桌面环境只是嵌入式linux的一 个开发工具,开发环境而已。咱们的目标不是学习linux服务器的配置和使用,linux服务器的高级配置和使用那是另一个领域,不属于嵌入式 linux讨论的范畴。咱们进行嵌入式linux开发,只是把linux桌面环境看成一个工具,在linux桌面环境下运行嵌入式linux开发工具,例 如gcc 编译器,make工具来开发咱们的嵌入式linux应用程序而已,对于嵌入式开发工程师来讲,没有必要花费那么多的精力和时间去研究linux桌面版和服 务器的应用,只要能了解最基本的操做便可。如今的桌面linux系统的图形化界面作的也至关好,跟window具备相同的易用性能,例如ubuntu不少 操做均可以在图形界面下完成,就没有必要去记每一个linux命令了。熟悉linux桌面系统的使用和基本操做命令,安排1~2天时间学习基本就能够掌握 了。小程序
误区2、直接阅读linux内核源代码服务器
不少想学linux,在连linux是什么东西,一点都还不会使用的状况下去就阅读linux内核源代码,花了大量时间去阅读《linux源码深度分 析》、《linux情景分析等》等书。这样的结果极可能就是看的头昏眼花,不知所云,最后只能放弃了。这也是同窗们学习嵌入式linux的一个误区,在有 必定嵌入式linux开发基础后,带着必定的目的去阅读linux源代码,这样能够极大的提升你的技术能力,可是你在没有任何基础,对linux一点都不 了解的状况下就去阅读linux内核源代码,无异于以卵击石,最后只能是撞个头破血流。
以上分析了同窗们学习嵌入式linux 开发的2个误区,那么如何正确的嵌入式linux开发呢?网络
学习嵌入式linux也同样。在学习嵌入式linux开发比较适合的切入点是从嵌入式linux应用程序开发开始,即暂时先不去关心嵌入式硬件平台,不去关心linux的底层驱动,先把 精力集中在现有的嵌入式linux平台上进行嵌入式linux应用程序设计开发。学习嵌入式linux开发毫不是看看书就能够学好的,须要多实践,编程调 试;由于嵌入式开发不一样于普通的基于PC机或服务器的应用程序开发,嵌入式开发的应用程序是要烧写到嵌入式板卡或开发板上运行的,因此首先你要给本身购买 一块开发板,如今广泛流行的嵌入式开发板都是基于三星的ARM9 CPU S3C2440,性价比极高,在这里我推荐使用飞凌公司FL-2440 高性价比ARM9学习开发板,开发板资源丰富,稳定,同时配有大量的实验源码,视频教程和实验指导书。
有了开发板后 前后开始学习嵌入式linux开发环境搭建、嵌入式linux开发模型、linux内核移植和文件系统、嵌入式linux应用程序移植、嵌入式linux 多进程,多线程应用程序设计、嵌入式linux网络编程,若是对嵌入式数据库或图形软件开发有兴趣的,能够进一步学习嵌入式linux数据库开发或基于 QT的嵌入式linux图形应用软件设计。每学一章节都要经过相关实验来来验证你从书上学到的东西,同时提升本身编写代码,调试程序的能力。这个过程根据 不一样学员的基础不一样,大概要花上1 ~ 2个月时间。学完这些课程后,你就有了在现有的嵌入式linux平台上进行应用程序设计开发的能力,到一些嵌入式软件公司去,可以胜任在现有的嵌入式 linux平台上进行上层的应用程序开发工做。可是目前你还不能进行嵌入式linux系统和驱动的开发,也就是说,你如今只能在一个已经构建好的嵌入式 linux平台上进行应用程序开发,而本身尚未能力根据实际须要去从新构建一个嵌入式linux平台。要让本身有能力根据实际须要从新构建一个嵌入式 linux软硬件平台,这时候就须要进行下一阶段的学习了,即嵌入式linux系统和驱动开发。数据结构
3、嵌入式Linux系统和驱动开发多线程
有 了嵌入式linux平台上开发应用程序的基础,你已经对linux的功能、linux对应用程序提供的接口和系统调用有了必定的了解,知道如何利用 linux提供的功能来进行应用程序开发,知道如何来使用设备驱动来进行应用程序设计,有了这些知识后,你就能够更深刻的去学习Linux系统原理和基于 Linux驱动的开发,Linux内核的裁剪,文件系统构,bootloader等等底层的知识了。
想要更深刻学习嵌入式Linux系统和驱动开发,要学的内容很是多包括计算机软件、硬件、操做系统知识。这时候你能够参照如下的学习思路,包括:ARM体系架构、S3C2440微处理器接口设计、时钟系统、LCD屏接口、存储控制器及系统的存储空间分配、NAND FLASH接口和NOR FLASH接口等。 学完这些知识点并经过相关实验验证后,嵌入式Linux系统和驱动的开发就算掌握了差很少了,可以胜任绝大部分基于linux平台的驱动开发工做了。学完 这些知识点,根据学员的不一样状况,通常须要花三个月到半年时间。经过这一阶段的学习,你在嵌入式Linux开发领域已经算是有了必定的功底,已经再也不被人 称为菜鸟了,已经进入嵌入式linux开发高手行列了。架构
4、更上一层楼
深刻理解了嵌入式内核和驱动开发,这时候写个什么驱动对你已经没有什么问题了,开发过程当中一些基本问题都难不倒你了。这是你可能想优化一下系统的性能,比 如实时性,提升系统的启动速度,或者优化系统的内存管理机制,要达到修改内核核心机制的境界,你就须要去深刻去研读linux内核源码了,参考 《linux源码深度分析》、《linux情景分析等》等linux源码分析的书籍,深刻理解linux各部分的实现机制和原理,以及可能存在的问题。你 只有在深刻理解现有代码和实现机制的基础上,才能提出更好的改进方案。若是你能达到这个境界,那你已是高手中的高手,能够笑傲群雄了。以 上是笔者结合本身的嵌入式学习经历和嵌入式培训经验总结的一些嵌入式学习方法和步骤,这只是笔者对嵌入式学习的一些见解,但愿对那些有兴趣学习嵌入式 linux又不知道从哪开始学的同窗们有所帮助。固然,每一个人,每一个同窗的基础,各方面的状况都不同,每一个人都有本身适合的学习方式,本文章总结的一些 学习方法和思路仅供参考,但愿你们能找到适合本身的学习嵌入式开发的方式,早日进入嵌入式开发大门。万丈高楼平地起,心动不如行动,有志从事嵌入式开发的同窗不要再犹豫了,赶忙拿出实际行动,好好学习,为实现本身的伟大梦想而努力奋斗吧