基于iTOP-4412开发板的嵌入式学习步骤
本节结合迅为的 iTOP-4412 开发板来介绍一下嵌入式技术的学习步骤。
大家都知道,嵌入式技术的知识面非常广,学起来往往不知道如何下手,我们通过这一小节给大家阐述一下嵌入式技术应该从哪里开始学起,以及按照什么样的步骤深入下去,最后顺利入门,成为一个合格的嵌入式工程师。
这节的教程很重要,希望通过这次的讲解能起到提纲挈领的作用,让大家能够在大量的学习资料中有一个比较清晰的学习脉络。
前面已经介绍过,嵌入式系统的学习方法,首先要掌握架构,那么什么是架构呢,这里再强调一遍,那就是要搞清楚几个概念:弄明白什么是 BootLoadre 引导程序,什么是 Linux 操作系统内核 Kernel,什么是文件系统。这个很重要,如果搞不明白,直接去学其他的内容,学起来就比较迷糊,实际上是在走弯路,这里推荐大家首先要看一篇文章,也就是迅为用户QQ 群的一个聊天记录:《澄清几个基本概念-迅为 QQ 群聊天记录》,这个文件在迅为 QQ群的共享里有,在网盘里也有提供,大家可以去研读一下。
相信大家看了这个对话以后,就应该明白 u-boot、Kernel 和文件系统这几个文件的作用和意义。接下来大多数工作都是围绕这几个文件展开的,比如编译环境的搭建, 源代码的编译和烧写, 应用程序和驱动程序的编程等等,就是说这几个文件是贯穿我们整个嵌入式学习的始终的。把这几个文件搞明白了,后面的学习也就有了目标,所以说搞明白这几个文件的含义非常重要。
接下来需要我们做的是搭建编译环境,在教程里建议大家安装 64 位的 WIN7 系统,并且在 WIN7 或者 WIN10 系统上安装虚拟机,然后在虚拟机上再安装 ubuntu。这里需要说明的是,大家在初学的时候要尽量按照教程里的方法一步步的来,这样学习的效率比较高,如果你使用 XP 系统或者 WIN8 系统不是说不行,但是在安装和编译过程可能遇到很多别人没有遇到的问题,解决起来就比较麻烦,所以在可能的情况下一定要按照手册的要求来做,尤其是初学者;当然大家熟练以后可以去做下创新,做不同的尝试。
安装编译环境是个很费事的过程,虽然说没有太多的技术含量,但是在这个过程中也要客服很多困难,开源系统就是这样,时常会遇到一些这样那样的问题,很多时候是不可预测的,或许大家会觉得安装系统是浪费时间很困惑,其实这个过程也是很重要的,中间要学习很多的知识,只要大家不怕折腾,这些过程当中的困难都是可以克服的,迅为公司为了让大家少走弯路,已经把安装步骤做了很大程度的简化,比如已经做好了虚拟机的 ubuntu 镜像,直接拷贝进去就可以使用了。
开发环境搭建起来以后,这个时候可以学习一下对源码进行编译,同时也可以学习一下烧写,一步步按照教程去做就可以了。再次强调一下,所有这些工作都是围绕我们前面所讲的那三个文件进行的,也就是 Uboot, Kernel 和文件系统。
系统的编译和烧写都是依赖于这个开发环境的,也就是必须在虚拟机上安装好 ubuntu,
并且把源代码从光盘中拷贝到 ubuntu 的环境下面,只要按照教程的提示往下做就可以了。
在熟练掌握系统的编译和烧写以后,就可以进一步开始嵌入式开发了,那么这个时候建议先学习一下 Linux 应用程序的设计,也就是按照教程开始逐步深入。
这个时候要按照网盘里的‘iTOP-4412 开发板视频教程及其相关’里的‘嵌入式 linux 视
频’进行学习。
大家在初学的时候,还是要按照这个实验的顺序来走一遍,这里强调两个方面,来帮助大家理解:
一、第一个实验也就是第 0 个,是制作 linux 的最小系统,那么什么是最小系统呢,就是Linux 运行的时候能跑的起来的最小系统,也就是说我们在文件系统当中把图形系统的内容从这个文件系统里面砍掉了;在很多设备里面,比如说路由器,或者一些通讯类或者控制类的产品中是不需要图形界面的,这样我们就可以做一个简化的 Linux 文件系统,这时候最小系统的设计就排上用场了。
二、这些实验都是通过烧写文件系统的方式来测试的,其实有一种比较简单和实用的方
法,那就是通过网络文件系统来进行(NFS),至于什么是 NFS,以及如何搭建,大家一定要
学习一下,具体可以参考第 12 个试验,就是‘实验 12’,因为将来我们调试应用程序或者驱动都是要通过这个手段来进行的,它是公认的比较好用的调试办法。也就是说我们这些实验回过头来,都是可以通过 NFS 来进行调试的,这时候就不用每次烧写,整个调试工作变得更容易,在实际的 Linux 调试中,多数是通过这种方式来进行的。
所以说大家一定要学会 NFS 的调试方法。
学完 Linux 的应用程序设计,接着应该学习一下 Linux 驱动方面的编程了。Linux 驱动程序全部掌握是非常困难的,但是要明确我们的目标是能利用 Linux 这个操作系统来开发产品。大家都知道,Linux 的驱动分为网络设备驱动、块设备驱动以及字符类设备驱动,如前面所述,我们只需要把字符类设备的驱动掌握好就可以了。
因为在开发产品的时候,网络设备以及块设备驱动在开发套件里都是做好的,直接用就可以了,几乎没有人从头去做,就算开发不同的网络接口驱动,也是直接把现成写好的驱动拿来直接调试一下。所以说块设备和网络设备不需要我们去太多关注,但是对于字符类设备驱动就需要我们仔细研究并且完全掌握了,那么最基本的字符类驱动就是针对 GPIO 的驱动设计,这个是一定要掌握的。比如我们的产品增加一个步进电机,驱动几个开关、继电器、采集电流电压模拟量、扩展并对外部 RAM 内存数据的读取等等,都是基本的字符类的驱动,至于RFID、GPS 模块、GPRS 模块、CAN 总线等等实际都是利用 Linux 本身已经做好的驱动,归根到底是使用串口、I2C 以及 SPI 等来实现的,很多开发并不需要我们做什么。对于网络设备,只需要在上层做个应用程序,用 SOCKET 来实现数据通讯就可以了。
那么在学习这部分内容之前呢,建议大家读一下另一个聊天记录:‘Linux 驱动初探_精
英版 QQ 群聊天记录.doc’,这个文档会对大家理解驱动的架构很有好处。
那么我们前面说到了,应用程序的调试要通过 NFS 来进行,驱动也是这样的,而且要学会用模块的方法来调试驱动。
我们在 Android 的视频中比较详细的介绍了 Linux 的底层如何构建 LED 的驱动程序。除此之外呢,我们会在补充文档里面跟大家说明如何使用模块,也就是 module 的方法来调试驱动程序。掌握这些方法是很重要的。也就是说大家一定要掌握通过 module 的方法动态加载和卸载驱动来调试驱动程序。
当大家熟练学会了以上强调的 Linux 系统的开发技术,我想大家对 Linux 的体系有了基本的了解,这个时候其实已经算是入门了,也就是说可以尝试去做一些产品,并不是说我们对Linux 的源码分析一遍才能真正做事情,不是那样的,我们的目标是做产品,学会利用 Linux这个操作系统,开发出目标产品!