打印

循序渐进学习嵌入式Linux开发

[复制链接]
8920|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嵌入式时代已经来临,你还在等什么?





                    ---循序渐进学习嵌入式开发技术

最近经常有用人单位给我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们

说他们单位急需要懂得在嵌入式linux环境下的软件开发人员,我回答说,现在每年毕

业的大学生那么多,还招不到合适的软件开发人员吗?他跟我说,毕业大学生虽然多,

但大部分都能力不够,不能达到他们的工作的要求。
该公司HR的一句话说出来我们现在的大学教学和大学生就业的现状:一方面每年那么多

大学生毕业找不到合适的工作,另一方面很多用人单位和企业又找不到合适的人才。造

成这种现象最基本的原因是学校教育和社会需求的严重脱节。其他的专业和行业我不清

楚,但是对于嵌入式专业和嵌入式软件行业来说,通过与多所高校的老师和在校高年级

本科生,研究生交流,我还是有所了解的,高校的嵌入式专业的教学现状我在前一篇文

章里仔细分析过,造成很多嵌入式专业的学生在毕业后,还是很难达到用人单位的要求

最主要的原因在于高校在嵌入式教学方面重理论和轻实践,很多嵌入式专业的老师也没

有实际的工作经验,这样培养出的学生可能让他讲起来头头是道,但是让他去真正编写

,调试一个应用程序就傻眼了,不知道从何下手,因为他们在学校的学习可能从来就没

有老师带着他们实际调试过嵌入式程序,也没有机会让你去调试嵌入式应用程序,那些

看起来非常不错的嵌入式实验箱大部分时间都躺在实验室睡大觉,只有在上实验课的时

候搬出来让大家看2眼,摸2下,还没有弄明白怎么回事,又要收到实验室睡大觉去了。

这样的教学模式,如何能培养出一名合格的嵌入式工程师呢?出现企业找不到合适的人

,大学毕业生找不到合适的工作也就不奇怪了。
嵌入式专业是一门实践性非常强的学科,只有多动手,多实践,多编程,多调试,多看

书,多思考才能真正掌握好嵌入式开发技术。
现在很多同学也意识到了学校培养模式和社会需求脱节问题,有一部分同学也先行行动

起来,开始注重培养自己的实际动手能力,培养自己实际分析问题,解决问题的问题,

培养自己在嵌入式专业实际编程,和调试程序的能力。但是嵌入式专业不同于其他学科

,嵌入式专业是一门综合性非常强,涉及知识面非常广的学科,对于初学者来说,面对

那么多教程,课本,那么多知识点,往往不知道从何处下手,不知道哪些是重点,哪些

不是重点,这些知识点之间有什么关联,一脸的茫然,然后东一榔头,西一棒子,折腾

了几个月甚至大半年后,还是找不着学习嵌入式的方向,还徘徊在嵌入式开发的大门之

外。
那么,如何从零开始学习嵌入式开发技术, 进入嵌入式开发大门呢,笔者根据自己的嵌

入式学习经历和多年的嵌入式linux教学经验,谈谈自己对嵌入式学习的一些想法和意

见,希望对大家有所帮助。
一、        练好基本功
嵌入式系统专业是综合了计算机硬件技术,计算机软件技术以及电子电路技术的一门综

合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理

,单片机基础,C语言基础,操作系统,数据结构,编译原理,计算机控制,计算机网

络等知识。
在真正学习嵌入式开发之前,首先要打好基础。其中最重要的是C语言基础、数字电路

、计算机组成原理三门课程。对于C语言,至少能单独编写调试一个3 ~ 500行的程序,

能够了解C语言的基本语法规则,基本语句的使用,理解指针概念并能灵活使用各种指

针。
计算机组成原理要能理解组成一个计算机系统的几大部件,计算机系统的结构,理解系

统总线,理解处理器和计算机外部设备的关系,处理器和计算机外设是如何协调工作完

成某一项功能的,计算机软件和硬件是如何分工协作完成某一项任务的,理解软件是通

过寄存器来控制硬件的。
数字电路,模拟电路要了解其基本原理个概念,能看懂简单模拟、数字电路原理图。理

解数字电路中的寄存器,时序的概念,能看懂芯片手册和时序图。对于其他基础课程,

重点要理解其中的一些基本概念,如何使用等等。
对于电子,自动化,通信,计算机类专业的学生,在大二、大三开设的专业基础或专业

课程中基本包含了以上的大部分课程。因为缺乏实践,可能学得不是很深入,但是一些

基本的概念和基本知识应该还是有所了解,针对一些薄弱环节,自己稍微加强学习一下

,基本上已经具备了学习嵌入式开发的基础。在嵌入式基本**习阶段,最重要的是C

语言和单片机基础,最好是能用C语言开发一个小的单片机程序,例如用C语言实现单片

机和PC的串口通信,用C语言控制LED等显示,用C语言控制数码管显示等小程序。在这

个期间需要的学习工具就是单片机51学习开发板。推荐飞凌的OK-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又不

知道从哪开始学的同学们有所帮助。当然,每个人,每个同学的基础,各方面的情况都

不一样,每个人都有自己适合的学习方式,本**总结的一些学习方法和思路仅供参考

,希望大家能找到适合自己的学习嵌入式开发的方式,早日进入嵌入式开发大门。

深圳信盈达开设多个精品课程:

1.嵌入式:arm+linux、linux  、arm、cortex系列课程

2.单片机:51、pic 、AVR

3.电子设计班:电子(数电+模电)、pcb

4.综合班:单片综合班:电子+画板+51+pic

嵌入式综合班:嵌入式c+arm+linux+us/oc+3g+安卓

更多资讯:QQ:1924786560

上课时间:全日制、周末班、晚班

安老师:13926586805

qq:1924786560

多开发平台实操,多项目+资深项目经理,工程师授课:
项目案例解析+在公司研发中心真正零距离接触产品开发过程
    根据个人基础量身定制课程、班主任全程跟踪教学进度
       拥有完全知识产品课程体系,教学大纲紧跟企业需求
            信息产业部、劳动部权威职业认证体系





[此贴子已经被作者于2013-1-2 11:00:12编辑过]

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

384

主题

384

帖子

0

粉丝