你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一些嵌入式学习方法和步骤

[复制链接]
gaosmile 发布时间:2020-8-4 22:23
最近,经常有机械自动化专业的学员,跑过来问我,说自己想毕业后转行嵌入式,具体要怎么学?如何找工作之类的问题。大部分都是刚毕业或者是即将毕业的学生,在校期间接触过C语言,也有不少自学过单片机、ARM,稍微好些的做过一些项目设计,但对嵌入式底层硬件,系统开发、Linux驱动硬件原理的知道得不多,虽然说有学习过,但是老师讲的大部分底层基础知识,很多内容都听不懂,学不会,自己也记不住。

在这里我想说,嵌入式专业是一门实践性非常强的学科,也是一门综合性、涉及知识面非常广的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。

微信图片_20200804222226.jpg

所以,对于初学者来说,即使独自去学习嵌入式,但面对那么多教程,课本,那么多知识点,往往不知道从何处下手;不知道哪些是重点,哪些不是重点,这些知识点之间有什么关联,一脸的茫然,然后东一榔头,西一棒子,折腾了几个月甚至大半年后,还是找不着学习嵌入式的方向,还徘徊在嵌入式开发的大门之外。

那么,如何从零开始学习嵌入式开发技术, 进入嵌入式开发大门呢,笔者根据自己的嵌入式学习经历和多年的嵌入式Linux教学经验,谈谈自己对嵌入式学习的一些想法和意见,希望对大家有所帮助。
01

练好基本功

嵌入式系统专业是综合了计算机硬件技术,计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理,单片机基础,C语言基础,操作系统,数据结构,编译原理,计算机控制,计算机网络等知识。

在真正学习嵌入式开发之前,对于C语言,至少能单独编写调试一个3 ~ 500行的程序,能够了解C语言的基本语法规则,基本语句的使用,理解指针概念并能灵活使用各种指针。
计算机组成原理要能理解组成一个计算机系统的几大部件,计算机系统的结构,理解系统总线,理解处理器和计算机外部设备的关系,处理器和计算机外设是如何协调工作完成某一项功能的,计算机软件和硬件是如何分工协作完成某一项任务的,理解软件是通过寄存器来控制硬件的。
数字电路,模拟电路要了解其基本原理个概念,能看懂简单模拟、数字电路原理图。理解数字电路中的寄存器,时序的概念,能看懂芯片手册和时序图。对于其他基础课程,重点要理解其中的一些基本概念,如何使用等等。

对于电子,自动化,通信,计算机类专业的学生,在大二、大三开设的专业基础或专业课程中基本包含了以上的大部分课程,其他专业如机械自动化设计的学员,也需要补充学习上述的课程内容。因为缺乏实践,可能学得不是很深入,但是一些基本的概念和基本知识应该还是有所了解,针对一些薄弱环节,自己稍微加强学习一下,基本上已经具备了学习嵌入式开发的基础。在嵌入式基本功学习阶段,最重要的是C语言和单片机基础,最好是能用C语言开发一个小的单片机程序,例如用C语言实现单片机和PC的串口通信,用C语言控制LED等显示,用C 语言控制数码管显示等小程序。在这个期间需要的学习工具就是单片机51学习开发板。

02

嵌入式Linux应用开发

嵌入式开发基础知识学习完后,这时候你已经有了一定的嵌入式开发基础了,可以进行基于单片机的嵌入式系统设计了。单片机编程本身也是属于嵌入式编程,但是在这里我们只是把单片机开发当作嵌入式系统开发的基础,不把单片机开发作为真正的嵌入式系统开发,在这里我们的嵌入式系统开发是指在带有操作系统的嵌入式平台上的应用和驱动开发,特别指在嵌入式Linux平台上的开发。

单片机开发在很早以前是非常热门的,现在在一些比较简单的系统上单片机也用的非常广泛,随着硬件的成本不断降低,在一些比较复杂的嵌入式设备一般都采用嵌入式Linux操作系统,在嵌入式Linux平台上进行开发,这样可以极大的提高嵌入式开发效率,提高系统的稳定性和可靠性,降低开发成本。

由于Linux是一个开源的操作系统,你可以通过阅读Linux内核来理解内核的实现机制,如果有需要,你甚至可以通过修改内核源码来提高系统的性能;同时,全球参与Linux开发的队伍非常庞大,网上有大量的嵌入式Linux开发资料和源代码,很多你需要实现的功能在网上基本都能找到相关源码,参考一下别人写的源码,这样可以极大的提高自己的工作效率和技术能力。

近几年,随着参与Linux开发的人越来越多,Linux系统的稳定性、实时性有了很大的提高,Linux系统无论在服务器上还是嵌入式设备平台上都应用越来越广泛,现在包括华为、中兴、朗讯的各大通信巨头都开始把自己设备的底层平台从vxworks操作系统迁移到Linux系统,可以说嵌入式Linux是嵌入式技术发展一个方向,是嵌入式技术的一面旗帜。基于以上原因,我的建议是学嵌入式开发,就学嵌入式Linux开发,相对于wince等其他的嵌入式平台,你可以真正学到更多的东西,学到嵌入式技术的精髓,同时他又符合嵌入式产业发展的方向,不容易被日新月异的技术发展所淘汰。

有了嵌入式开发的基础,又知道了我们为什么要学习嵌入式Linux开发,那我们就要开始动手开始学习了,那如何开始学习嵌入式Linux开发,从哪里开始着手呢?

03

学习嵌入式Linux常见误区


很多同学这时候就开始买Linux书籍,从图书馆借了一大堆关于Linux的书:什么《Linux使用基础教程》、《Linux源码深度分析》、 《Linux情景分析等》、 《Linux高级使用指南》等等。结果抱着这些图书看了10天半个月还是不知所云,当初学习的激情慢慢就消退了,最后不了了之,终究没有进入嵌入式开发大门。究其原因,是因为没有找到合适学习嵌入式开发的方法,做任何事情都有方法可循,找对了学习方法往往就能事半功倍;否则就可能是事倍功半,甚至劳而无功。接下来我先分析一下同学们的几种常见的嵌入式Linux学习误区,然后提出一种比较合适的嵌入式Linux学习方法。

微信图片_20200804222231.png

误区一、全身投入学习桌面或服务器版本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内核源代码,无异于以卵击石,最后只能是撞个头破血流。

04

如何正确学习嵌入式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系统和驱动开发。

05

嵌入式Linux系统和驱动开发

有了嵌入式Linux平台上开发应用程序的基础,你已经对Linux的功能、Linux对应用程序提供的接口和系统调用有了一定的了解,知道如何利用Linux提供的功能来进行应用程序开发,知道如何来使用设备驱动来进行应用程序设计,有了这些知识后,你就可以更深入的去学习Linux系统原理和基于 Linux驱动的开发,Linux内核的裁剪,文件系统构,bootloader等等底层的知识了。
想要更深入学习嵌入式Linux系统和驱动开发,要学的内容非常多包括计算机软件、硬件、操作系统知识。这时候你可以参照以下的学习思路,包括:ARM体系架构、S3C2440微处理器接口设计、时钟系统、LCD屏接口、存储控制器及系统的存储空间分配、NAND FLASH接口和NOR FLASH接口等。学完这些知识点并通过相关实验验证后,嵌入式Linux系统和驱动的开发就算掌握了差不多了,能够胜任绝大部分基于Linux平台的驱动开发工作了。学完这些知识点,根据学员的不同情况,一般需要花三个月到半年时间。通过这一阶段的学习,你在嵌入式Linux开发领域已经算是有了一定的功底,已经不再被人称为菜鸟了,已经进入嵌入式Linux开发高手行列了。

06

更上一层楼

深入理解了嵌入式内核和驱动开发,这时候写个什么驱动对你已经没有什么问题了,开发过程中一些基本问题都难不倒你了。这是你可能想优化一下系统的性能,比如实时性,提高系统的启动速度,或者优化系统的内存管理机制,要达到修改内核核心机制的境界,你就需要去深入去研读Linux内核源码了,参考 《Linux源码深度分析》、《Linux情景分析等》等Linux源码分析的书籍,深入理解Linux各部分的实现机制和原理,以及可能存在的问题。你只有在深入理解现有代码和实现机制的基础上,才能提出更好的改进方案。如果你能达到这个境界,那你已经是高手中的高手,可以笑傲群雄了。

以上是笔者结合自己的嵌入式学习经历和嵌入式培训经验总结的一些嵌入式学习方法和步骤,这只是笔者对嵌入式学习的一些看法,希望对那些有兴趣学习嵌入式 Linux又不知道从哪开始学的同学们有所帮助。当然,每个人、每个同学的基础,各方面的情况都不一样,每个人都有自己适合的学习方式,本文章总结的一些学习方法和思路仅供参考,希望大家能找到适合自己的学习嵌入式开发的方式,早日进入嵌入式开发大门。
收藏 评论0 发布时间:2020-8-4 22:23

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版