最近常常有用人单位给我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们说他们单位急需求懂得在嵌入式linux环境下的软件开发人员,我回答说,现在每年结业的大学生那么多,还招不到适宜的软件开发人员吗?他跟我说,结业大学生尽管多,但大部分都才干不行,不能到达他们的作业的要求。
该公司HR的一句话说出来咱们现在的大学教育和大学生作业的现状:一方面每年那么多大学生结业找不到适宜的作业,另一方面许多用人单位和企业又找不到适宜的人才。形成这种现象最根本的原因是校园教育和社会需求的严峻脱节。其他的专业和职业我不清楚,可是关于嵌入式专业和嵌入式软件职业来说,经过与多所高校的教师和在校高年级本科生,研讨生沟通,我仍是有所了解的,高校的嵌入式专业的教育现状我在前一篇文章里仔细剖析过,形成许多嵌入式专业的学生在结业后,仍是很难到达用人单位的要求最主要的原因在于高校在嵌入式教育方面重理论和轻实践,许多嵌入式专业的教师也没有实践的作业阅历,这样培育出的学生或许让他讲起来头头是道,可是让他去真实编写,调试一个运用程序就傻眼了,不知道从何下手,由于他们在校园的学习或许从来就没有教师带着他们实践调试过嵌入式程序,也没有时机让你去调试嵌入式运用程序,那些看起来十分不错的嵌入式试验箱大部分时刻都躺在试验室睡大觉,只要在上试验课的时分搬出来让咱们看2眼,摸2下,还没有弄了解怎样回事,又要收到试验室睡大觉去了。这样的教育形式,怎样能培育出一名合格的嵌入式工程师呢?呈现企业找不到适宜的人,大学结业生找不到适宜的作业也就不奇怪了。
嵌入式专业是一门实践性十分强的学科,只要多着手,多实践,多编程,多调试,多看书,多考虑才干真实把握好嵌入式开发技能。
现在许多同学也认识到了校园培育形式和社会需求脱节问题,有一部分同学也先行举动起来,开端重视培育自己的实践着手才干,培育自己实践剖析问题,解决问题的问题,培育自己在嵌入式专业实践编程,和调试程序的才干。可是嵌入式专业不同于其他学科,嵌入式专业是一门归纳性十分强,触及常识面十分广的学科,关于初学者来说,面临那么多教程,讲义,那么多常识点,往往不知道从何处下手,不知道哪些是要点,哪些不是要点,这些常识点之间有什么相关,一脸的茫然,然后东一榔头,西一棒子,折腾了几个月乃至多半年后,仍是找不着学习嵌入式的方向,还徜徉在嵌入式开发的大门之外。
那么,怎样从零开端学习嵌入式开发技能, 进入嵌入式开发大门呢,笔者依据自己的嵌入式学习阅历和多年的嵌入式linux教育阅历,谈谈自己对嵌入式学习的一些主意和定见,期望对咱们有所协助。
一、练好根本功
嵌入式体系专业是归纳了计算机硬件技能,计算机软件技能以及电子电路技能的一门归纳学科,所触及的内在和常识十分广泛,包含:数字电路,模仿电路,计算机组成原理,单片机根底,C言语根底,操作体系,数据结构,编译原理,计算机操控,计算机网络等常识。
在真实学习嵌入式开发之前,首要要打好根底。其间最重要的是C言语根底、数字电路、计算机组成原理三门课程。关于C言语,至少能独自编写调试一个3 ~ 500行的程序,能够了解C言语的根本语法规矩,根本句子的运用,了解指针概念并能灵敏运用各种指针。
计算机组成原理要能了解组成一个计算机体系的几大部件,计算机体系的结构,了解体系总线,了解处理器和计算机外部设备的联络,处理器和计算机外设是怎样和谐作业完结某一项功用的,计算机软件和硬件是怎样分工协作完结某一项使命的,了解软件是经过寄存器来操控硬件的。
数字电路,模仿电路要了解其根本原理个概念,能看懂简略模仿、数字电路原理图。了解数字电路中的寄存器,时序的概念,能看懂芯片手册和时序图。关于其他根底课程,要点要了解其间的一些根本概念,怎样运用等等。
关于电子,自动化,通讯,计算机类专业的学生,在大二、大三开设的专业根底或专业课程中根本包含了以上的大部分课程。由于缺少实践,或许学得不是很深化,可是一些根本的概念和根本常识应该仍是有所了解,针对一些薄弱环节,自己略微加强学习一下,根本上现已具有了学习嵌入式开发的根底。在嵌入式根本功学习阶段,最重要的是C言语和单片机根底,最好是能用C言语开发一个小的单片机程序,例如用C言语完结单片机和PC的串口通讯,用C言语操控LED等显现,用C言语操控数码管显现等小程序。在这个期间需求的学习东西便是单片机51学习开发板。
二、嵌入式Linux运用开发
嵌入式开发根底常识学习完后,这时分你现已有了必定的嵌入式开发根底了,能够进行依据单片机的嵌入式体系规划了。单片机编程自身也是归于嵌入式编程,可是在这里咱们仅仅把单片机开发当作嵌入式体系开发的根底,不把单片机开发作为真实的嵌入式体系开发,在这里咱们的嵌入式体系开发是指在带有操作体系的嵌入式渠道上的运用和驱动开发,特别指在嵌入式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学习办法。
误区一、全身投入学习桌面或服务器版别linux体系
许多想学嵌入式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地利刻学习根本就能够把握了。
误区二、直接阅览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体系和驱动开发。
三、嵌入式Linux体系和驱动开发
有了嵌入式linux渠道上开发运用程序的根底,你现已对linux的功用、linux对运用程序供给的接口和体系调用有了必定的了解,知道怎样运用linux供给的功用来进行运用程序开发,知道怎样来运用设备驱动来进行运用程序规划,有了这些常识后,你就能够更深化的去学习Linux体系原理和依据Linux驱动的开发,Linux内核的裁剪,文件体系构,bootloader等等底层的常识了。
想要更深化学习嵌入式Linux体系和驱动开发,要学的内容十分多包含计算机软件、硬件、操作体系常识。这时分你能够参照以下的学习思路,由于嵌入式Linux体系和驱动的开发,和底层硬件联络十分严密,所以首要咱们从学习了解嵌入式硬件开端,包含:ARM体系架构、S3C2440微处理器接口规划、时钟体系、LCD屏接口、存储操控器及体系的存储空间分配、NAND FLASH接口和NOR FLASH接口等。对嵌入式体系硬件有了必定的了解后,接下来就能够开端学习bootloader了,了解bootloader的概念,功用,和原理,要点把握U-BOOT的运用和移植。接下来就开端学习嵌入式linux内核机制,剖析嵌入式Linux源码组成、内核的模块机制、内核进程办理、内存办理机制、linux的中止体系、Linux内核的移植等。有了内核的根底,就能够学习嵌入式Linux设备驱动开发了,要点把握字符设备驱动开发,LCD屏设备驱动开发、触摸屏设备驱动开发、USB设备驱动开发,网卡设备驱动开发。学完这些常识点并经过相关试验验证后,嵌入式Linux体系和驱动的开发就算把握了差不多了,能够担任绝大部分依据linux渠道的驱动开发作业了。学完这些常识点,依据学员的不同状况,一般需求花三个月到半年时刻。经过这一阶段的学习,你在嵌入式Linux开发范畴现已算是有了必定的功底,现已不再被人称为菜鸟了,现已进入嵌入式linux开发高手行列了。
四、更上一层楼
深化了解了嵌入式内核和驱动开发,这时分写个什么驱动对你现已没有什么问题了,开发进程中一些根本问题都难不倒你了。这是你或许想优化一下体系的功用,比方实时性,进步体系的发动速度,或许优化体系的内存办理机制,要到达修正内核中心机制的境地,你就需求去深化去研读linux内核源码了,参阅《linux源码深度剖析》、《linux情形剖析等》等linux源码剖析的书本,深化了解linux各部分的完结机制和原理,以及或许存在的问题。你只要在深化了解现有代码和完结机制的根底上,才干提出更好的改善计划。假如你能到达这个境地,那你现已是高手中的高手,能够笑傲群雄了。
以上是笔者结合自己的嵌入式学习阅历和嵌入式训练阅历总结的一些嵌入式学习办法和过程,这仅仅笔者对嵌入式学习的一些观点,期望对那些有爱好学习嵌入式linux又不知道从哪开端学的同学们有所协助。当然,每个人,每个同学的根底,各方面的状况都不相同,每个人都有自己合适的学习方法,本文章总结的一些学习办法和思路仅供参阅,期望咱们能找到合适自己的学习嵌入式开发的方法,提前进入嵌入式开发大门。
万丈高楼平地起,心动不如举动,有志从事嵌入式开发的同学不要再犹疑了,赶忙拿出实践举动,好好学习,为完结自己的巨大愿望而努力奋斗吧。