搜索
bottom↓
回复: 32

学好嵌入式Linux系统和驱动开发需要一个循序渐进的过程!

  [复制链接]

出0入0汤圆

发表于 2016-10-24 09:55:12 | 显示全部楼层 |阅读模式
本帖最后由 andmain999 于 2016-10-24 10:04 编辑

嵌入式专业是一门实践性非常强的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。

现在很多同学也意识到了学校培养模式和社会需求脱节问题,有一部分同学也先行行动起来,开始注重培养自己的实际动手能力,培养自己实际分析问题,解决问题 的问题,培养自己在嵌入式专业实际编程和调试程序的能力。但是嵌入式专业不同于其他学科,嵌入式专业是一门综合性非常强,涉及知识面非常广的学科,对于初 学者来说,面对那么多教程、课本,那么多知识点,往往不知道从何处下手,不知道哪些是重点,哪些不是重点,这些知识点之间有什么关联,一脸的茫然,然后东 一榔头,西一棒子,折腾了几个月甚至大半年后,还是找不着学习嵌入式的方向,还徘徊在嵌入式开发的大门之外。

那么,如何从零开始学习嵌入式开发技术, 进入嵌入式开发大门呢,下面谈谈对嵌入式学习的一些想法和意见,希望对大家有所帮助。

一、练好基本功

嵌入式系统专业是综合了计算机硬件技术,计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理,单片机基础,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系统的使用,什么 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机或服务器 的应用程序开发,嵌入式开发的应用程序是要烧写到嵌入式板卡或开发板上运行的,所以首先你要给自己购买一块开发板。

有了开发板后,先后开始学习嵌入式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各部分的实现机制和原理,以及可能存在的问题。你 只有在深入理解现有代码和实现机制的基础上,才能提出更好的改进方案。如果你能达到这个境界,那你已经是高手中的高手,可以笑傲群雄了。

万丈高楼平地起,心动不如行动,有志从事嵌入式开发的同学不要再犹豫了,赶紧拿出实际行动,好好学习,为实现自己的伟大梦想而努力奋斗吧!

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-10-24 10:29:47 | 显示全部楼层
上边提到的两个误区我都进过。。
还有一个误区,在没有做过应用层编程的时候,就开始啃bootloader。。


弄的现在还在写单片机代码。。



出0入0汤圆

发表于 2016-10-24 11:03:56 | 显示全部楼层
买了开发板,但还没开始,文章可以作为指导

出0入0汤圆

发表于 2016-10-24 11:43:24 | 显示全部楼层
谢谢LZ分享这篇长文,辛苦了

觉得按照文中所提供的开发步骤,应用开发->系统及驱动开发这个idea蛮不错的。

受教了...

出0入0汤圆

发表于 2016-10-24 12:36:14 | 显示全部楼层
一针见血!如茫茫大海上的一盏明灯!受教了...

出0入0汤圆

发表于 2016-10-24 12:54:38 | 显示全部楼层
谢谢分享~
关于开发板,楼主推荐哪款?

出0入0汤圆

发表于 2016-10-24 13:37:50 | 显示全部楼层
几年前年就买了块2440开发板,一直吃灰中,到现在开发环境都没搭过。。。又想学,又没动力

出0入8汤圆

发表于 2016-10-24 13:41:25 | 显示全部楼层
syj0925 发表于 2016-10-24 13:37
几年前年就买了块2440开发板,一直吃灰中,到现在开发环境都没搭过。。。又想学,又没动力 ...

我买的的几块开发板,都在吃灰,
学这些东西,跟着公司的项目走,这才是最有效的学习方法。

出0入0汤圆

发表于 2016-10-24 14:48:46 | 显示全部楼层
我来提一点,学好嵌入式软件,也得学好操作系统、算法和数据结构,把这3个学好了,学其它软件什么的都进展神速

出0入0汤圆

发表于 2016-10-24 15:00:08 | 显示全部楼层
security 发表于 2016-10-24 13:41
我买的的几块开发板,都在吃灰,
学这些东西,跟着公司的项目走,这才是最有效的学习方法。 ...

确实,要有项目的话,进步会很快

出130入20汤圆

发表于 2016-10-24 15:22:05 | 显示全部楼层
然后全都学完了,特么才发现这么多精力去学JAVA 安卓 IOS应用开发 前端 什么的早就发了

出0入0汤圆

发表于 2016-10-24 15:25:46 | 显示全部楼层
shuiluo2 发表于 2016-10-24 15:22
然后全都学完了,特么才发现这么多精力去学JAVA 安卓 IOS应用开发 前端 什么的早就发了 ...

是的 又不赚钱,还花这么多精力,傻不傻。

出0入0汤圆

发表于 2016-10-27 09:36:04 | 显示全部楼层
正在踏入 嵌入式Linux系统和驱动开发

感觉很困恼,在已有的平台上做应用开发还好,要自己来搭建这个平台的时候,时不时就烦躁,看来我还有一段很长的路

出0入0汤圆

发表于 2016-10-27 13:20:43 | 显示全部楼层
shuiluo2 发表于 2016-10-24 15:22
然后全都学完了,特么才发现这么多精力去学JAVA 安卓 IOS应用开发 前端 什么的早就发了 ...

果断顶你了

出0入0汤圆

发表于 2016-10-27 14:57:03 | 显示全部楼层
感谢楼主分享经验

出0入0汤圆

发表于 2016-10-27 15:04:51 | 显示全部楼层
受教了,谢谢

出0入0汤圆

发表于 2016-10-27 18:29:38 来自手机 | 显示全部楼层
我就在啃内核,现在看的x86的保护模式,虽然晕晕乎乎,我觉得也是必要的。一直写单片机的,看这个不止是为了linux,也希望在系统底层,编译原理上有所了解,linux是个系统工程,不是在开发板上移植几个应用或者做几个实验就行了,如果那么做,那只是当做高级点的单片机开发而已,对原理不了解,拿网上的代码,开发出来的产品可想而知了

出0入0汤圆

发表于 2016-10-27 19:06:49 | 显示全部楼层
懂了这些呢,然并卵。。。什么年代了。。。还linux呢。。。
我来说一句,统统都是一坨。。。
有这闲时间,搞搞android。。。




出0入0汤圆

发表于 2016-10-27 21:06:07 | 显示全部楼层
踏遍所有误区!

出0入0汤圆

发表于 2016-10-28 08:47:41 来自手机 | 显示全部楼层
感觉linux会成为物联网的设备端的标准操作系统

出0入0汤圆

发表于 2016-10-28 09:05:25 | 显示全部楼层
谢谢楼主分享经验!

出0入0汤圆

发表于 2016-10-28 16:53:21 | 显示全部楼层
顺其自然好了,但是需要多学,绕弯是不可避免,如果能遇到一个帮助的人或者师傅之类的最好,我自身也是做嵌入式,到最后也学习各种语言,C# ,JAVA,python,基本上就是工作有什么需求,不会的话就学什么

出0入0汤圆

发表于 2016-10-31 15:01:49 | 显示全部楼层
说得很好啊,找准目标努力学

出0入0汤圆

发表于 2016-11-15 08:54:56 | 显示全部楼层
linux的钱景真的这么不乐观吗?大家都来说说看。

出0入0汤圆

发表于 2016-11-15 10:55:27 | 显示全部楼层
shuiluo2 发表于 2016-10-24 15:22
然后全都学完了,特么才发现这么多精力去学JAVA 安卓 IOS应用开发 前端 什么的早就发了 ...

顶这个,除非是自己喜欢,还是做上层的比较好;

在国外,做APP的要比写驱动的挣的多。。。

有人提议驱动应该给做硬件的人去写,可见硬件工程师的地位了;

出0入0汤圆

发表于 2016-11-15 11:25:29 | 显示全部楼层
硬件工程师为什么就这么不受待见?

出0入0汤圆

发表于 2016-11-15 12:25:06 | 显示全部楼层
jm2011 发表于 2016-11-15 10:55
顶这个,除非是自己喜欢,还是做上层的比较好;

在国外,做APP的要比写驱动的挣的多。。。

国内恐怕也是做APP的挣的多。

出0入0汤圆

发表于 2016-11-15 17:01:41 | 显示全部楼层
sml009 发表于 2016-11-15 11:25
硬件工程师为什么就这么不受待见?

想说点什么,但是不知道说什么,我只能说我我是硬件菜鸟攻城狮,我为硬件攻城狮带盐

出0入59汤圆

发表于 2016-11-15 17:08:47 | 显示全部楼层
啃linux内核    ==  门诊科的大夫去研究 DNA 结构

出0入0汤圆

发表于 2016-11-16 08:14:16 | 显示全部楼层
sml009 发表于 2016-11-15 11:25
硬件工程师为什么就这么不受待见?

我也不知道啊,我是学软件的,和身边做硬件的聊起来才发现做硬件的工资那么低。。。

不知道只有我们单位是这样的还是普遍现象;


出0入0汤圆

发表于 2017-2-15 15:29:39 | 显示全部楼层
还是菜鸟,多谢分享继续学习中。

出50入10汤圆

发表于 2017-8-25 08:26:00 | 显示全部楼层
现堵在搭建开发环境的路上。
买了开发板和资料,按照配套资料搭建不顺利。
网上也搜了不少资料,不得要领。
能介绍个搭建步骤和点个灯的资料就好了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 00:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表