1、毕 业 设 计(论 文)学生姓名:学 号:所在系部:专业班级:指导教师:李国伟日 期:二 年 月基于嵌入式的多路工业温度检测系统的实现(软件)Base on the embedded mutiplex temperature detection systemBy ()June 2012学位论文原创性声明本人郑重声明:所呈交的学位论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 作者签名: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学院有关保管、使
2、用学位论文的规定,同意学院保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于 1、保密 ,在 年解密后适用本授权书。 2、不保密 。 (请在以上相应方框内打“”) 作者签名: 年 月 日 导师签名: 年 月 日37摘 要测量是人们认识自然界的一种科学方法。通过各种测量,人们能够从数量上来描述周围的物质世界,揭示自然界存在的规律,推动科学技术的不断前进。人们的日常生活、工农业生产和科学实验等许多方面都与温度测
3、量有着十分密切的关系,温度作为一个重要的物理量,是工业生产过程中最普遍、最重要的工艺参数之一。随着计算机技术、网络技术和微电子技术的深入发展,嵌入式系统的应用无处不在。而要进行嵌入式开发之前首先必须先搭建好嵌入式开发环境。本文首先介绍嵌入式开发流程和组合方案的分析与设计,然后实现交叉编译环境的构建方法和技巧,包括操作系统以及连接器、编译器、调试器在内的软件开发工具搭建方法。最后通过一个具体的例子来测试搭建的开发环境可行性以及未来的展望。选择 Linux 作为本系统的嵌入式操作系统,进行 Linux 内核的移植,并实现各驱动程序。根据温度检测系统的硬件结构,规划出该系统应用程序的流程。主要负责温
4、度数据的采集,以及存储管理,然后将数据经通信模块发送至上位机。应用 Visual Basic 设计和编写上位机软件,上位机软件主要负责接受下位机发送来的数据,然后将数据转换成温度值并进行显示和存入数据库。研究了基于ARM9的嵌入式linux系统在温度监测系统的应用,介绍了系统在硬件结构和软件实现的过程,讨论了如何在主控制器端口驱动能力不足时的解决方法,以及如何在嵌入式linux下实现总线协议的问题。与传统的单片机控制相比,系统具有测精度高,扩展性强,可靠性高等特点,为中规模温度监测应用提供一个良好的解决方案。AbstractMeasurement of peoples understandin
5、g of nature is a kind of scientific method. Through a variety of measurement, we can from the quantity to describe the physical world around, revealing the nature law, promote the improvement of science and technology. many other aspects of temperature measurement has a very close relationship, temp
6、erature is an important physical quantity, is the process of industrial production, the most common one of the most important technical parameters.Along with the computer technology, network technology and microelectronics technology development, application of the embedded system is ubiquitous. In
7、order to realize embedded development must be built before the first embedded development environment. This article first introduced the embedded development process and combination scheme analysis and design, and then realize the cross compile environment construction methods and techniques, includ
8、ing operating system, compiler, debugger, and connector software development tools and building method thereof. Finally through a concrete example to test the feasibility of building the development environment and the future prospect.Select Linux as the system of embedded operating system, Linux ke
9、rnel transplantation, and implementation of the driver. According to the temperature detection system hardware structure, planning out the system application process. the data is sent to the host computer via the communication module. Application of Visual Basic to design and write PC software, PC s
10、oftware, mainly responsible for receiving client to send data, and then the data is converted into temperature value and displayed and stored in the database.Based on ARM9 embedded Linux system in temperature monitoring system, introduces the system hardware structure and software realization proces
11、s, discusses how the main controller port low driving ability when the solution, as well as how based on Embedded Linux bus protocol issues. Compared with traditional single-chip control, system has high measuring precision, strong expansibility, high reliability, as in the scale of temperature moni
12、toring applications to provide a good solution.目 录摘 要iAbstractii绪 论11.1 课题背景与意义11.2 国内外温度检测技术概述11.2.1 温度检测技术简介11.2.2 温度检测技术的发展31.3 本文的主要研究内容32嵌入式系统与LINUX的发展历史与现状42.1 嵌入式系统概述42.2 嵌入式系统组成52.3 linux的前世与今生73 配置基于LINUX的嵌入式开发环境93.1主机上虚拟机的设置93.2建立交叉编译环境93.3 SHELL的使用113.3.1 Shell的含义113.3.3 用户的环境变量的设置124 .基于
13、LINUX内核的移植134.1 BootLoader 的移植134.1.1 BOOTLOADER 概述134.1.2 BOOTLOADER分析与移植134.2 Linux 内核的配置和编译144.2.1 Linux 内核结构144.2.1 配置内核选项164.2.3 内核编译185 LINUX的接口驱动程序215.1 LINUX驱动程序概述215.1.1 设备驱动程序的分类215.1.2 驱动程序的加载方式225.1.3 设备驱动开发中的基本函数225.1.4 设备驱动程序的开发流程235.2 串口应用编程245.2.1 串口程序操作需要的头文件245.2.2 打开串口245.2.3 设置串口
14、256 温度检测系统应用程序的设计306.1 主程序流程306.2 串口通信部分315.3 数据采集部分375.3.1 ADS7842 驱动376.3.2 数据采集程序436.4 数据存储部分44结 论46致 谢47参考文献48绪 论1.1 课题背景与意义温度检测技术在工业生产中获得了广泛的应用,尤其在石油、化工、电力、等重要工业领域中担负着很重要的任务。温度检测在工农业生产、国防、科研以及日常生活等领域占有重要的地位,测量范围也越来越大,对温度的检测技术的要求也越来越高。因此,温度检测和温度检测技术的研究也是一个重要的研究课题。本论文完成的是温度检测系统的研制。随着科技的发展,出现了智能温度
15、检测系统,普遍地采用 51 单片机为核心,基本上可以满足需求,但是对于一些要求测量精度高、实时性要求高的温度检测系统,单片机就不能满足要求了,这就要求高精度和高速度的处理器。随着技术的发展,32 位 ARM 微处理器系统被广泛地应用于信息家电、网络通信和工业控制等各个领域,也满足以上的高技术指标要求。采用嵌入式设计的温度检测系统具有较高的精度,而且实时性好,有着非常人性化的操作界面,因此有着很好的前景。目前迫切需要从理论上进行系统研究,采用新技术来开发和研制产品质量更高、运行更加可靠的新型温度检测系统.1.2 国内外温度检测技术概述1.2.1 温度检测技术简介1、 目前常用检测技术随着国内外工
16、业的日益发展,温度检测技术也有了不断的进步,目前的温度检测使用的方法种类繁多,应用范围也较广泛,大致包括以下几种方法(1)利用物体热胀冷缩原理制成的温度计;(2)利用热电效应技术制成的温度检测元件;(3)利用热阻效应技术制成的温度计;(4)利用热辐射原理制成的高温计;(5)利用声学原理进行温度测量;(6)利用红外测温技术。2、 新兴检测技术(1)晶体管温度检测元件半导体温度检测元件是具有代表性的温度检测元件。半导体的电阻温度系数比金属大 12 个数量级,二级管和三极管的 PN 结电压、电容对温度灵敏度很高。(2)集成电路温度检测元件利用硅晶体管基极一发射极间电压与温度关系(即半导体 PN 结的
17、温度特性)进行温度检测,并把测温、激励、信号处理电路和放大电路集成一体,封装于小型管壳内,即构成了集成电路温度检测元件。(3)核磁共振温度检测器这种检测器精度极高,可以测量出千分之一开尔文,而且输出的频率信号适于数字化运算处理,故是一种性能良好的温度检测器。(4)热噪声温度检测器它的原理是利用热电阻元件产生的噪声电压与温度的相关性,可以直接读出绝对温度值而不受材料和环境条件限制的温度检测器。(5)石英晶体温度检测器它采用 LC 或 Y 型切割的石英晶片的共振频率随温度变化的特性来制作的,可自动补偿石英晶片的非线性,测量精度较高,一般可检测到 0.001,所以可作标准检测之用。(6)光纤温度检测
18、器光纤温度检测器是利用双折射光纤的传输光信号滞后量随温度变化的原理制成的双折射光纤温度检测器。(7)激光温度检测器激光测温特别适于远程测量和特殊环境下的温度测量。(8)微波温度检测器采用微波测温可以达到快速测量高温的目的。这种检测器的灵敏度为 250kHZ/,精度为 1左右。1.2.2 温度检测技术的发展1、 国内外温度检测技术动向(1)扩展检测范围现在工业上通用的温度检测范围为-2003000,而今后则要求能测量超高温与超低温。(2)扩大测温对象温度检测技术将会由点测温发展到线、面,甚至立体的测量。(3)发展新型产品生产适应于不同场合、不同工况要求的新型产品,以满足用户需要。(4)显示数字化
19、温度仪表向数字化方向发展。其最大优点是直观、无读数误差、分辨率高、测量误差小。(5)标定自动化应用计算机技术,快速、准确、自动地标定温度检测器。2、国内外温度检测发展趋势(1)加强新原理、新材料、新加工工艺的开发。(2)向智能化、集成化、适用化方向发展。1.3 本文的主要研究内容本文的主要研究内容是研制一种基于 ARM9 与 AD590 的温度检测系统。该温度检测系统采用 ARM9 系列微处理器 S3C2410 设计嵌入式系统,它是由韩国SAMSUNG 公司生产的32位 RISC 处理器。选择 Linux 作为嵌入式操作系统,并编写应用程序。该系统选用集成温度传感器 AD590 作为感温元件,
20、其具有线性良好、抗干扰能力强、测温不需参考点、可消除电源波动及可远距离测温的优点。AD590 输出电流与温度呈线性关系:,故设计温度采集及转换电路使电流信号转换成电压信号,并设计一种双运放放大电路放大该电压信号,使之可接AD芯片。选4通道12 位精度的模数转换芯片 ADS7842 设计 AD 转换电路。2嵌入式系统与LINUX的发展历史与现状2.1 嵌入式系统概述随着嵌入式系统在消费类电子、工业控制、航空航天、汽车电子、医疗保健、网络通信等各个领域的广泛应用,嵌入式系统这个名词已经被各行各业的人所熟悉, 嵌入式系统已经走进了人们的生活。它正以各种不同的形式悄悄地改变着人们的生产、生活方式。无庸
21、质疑,社会对嵌入式系统开发人员的需求也越来越大,所以现在越来越多的人已经加入到这个行业中来。嵌入式系统,英文为 Embedded System,从广义上讲,凡是带有微处理器的专用软、硬件系统都可称为嵌入式系统。如各类单片机和 DSP 系统,这些系统在完成较为单一的专业功能时具有简洁高效的特点。但是由于他们没有使用操作系统,所以管理系统硬件和软件的能力有限,在实现复杂的多任务功能时往往困难重重,甚至无法实现。从狭义上讲,那些使用嵌入式微处理器构成的独立系统,并且有自己的操作系统,具有特定功能,用于特定场合的系统。本书中所说的嵌入式系统是指狭义上的嵌入式系统。到目前为止,对于嵌入式系统还没有一个明
22、确的定义。嵌入式系统的核心是嵌入式微处理器,该处理器都是 RISC的处理器内核。嵌入式微处理器一般具备以下 4 个主要特点:1. 对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度。2. 具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。3. 可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理器。4. 嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系
23、统更是如此。由于嵌入式系统一般具有芯片集成度高,软件代码小,高度自动化,响应速度快等特点,特别适合于要求实时性和多任务的体系。RTOS(Real-Time Operating System,实时操作系统)是根据操作系统的工作特性而言的。实时是指物理进程的真实时间。实时操作系统是指具有实时性,能支持实时控制系统工作的操作系统。首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。一般 Windows、Unix、Linux 等桌面系统都属于分时操作系统,在此有必要说明一下实时操作系统与分时操作系统的区别:具体的说,对于分时操作系统
24、,软件的执行在时间上的要求并不严格,时间上的错误,一般不会造成灾难性的后果。而对于实时操作系统,主要任务是对事件进行实时的处理,虽然事件可能在无法预知的时刻到达,但是软件上必须在事件发生时能够在严格的时限内作出响应,即使是在尖峰负荷下,也应该如此,系统时间响应的超时就意味着致命的失败。另外,实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。2.2 嵌入式系统组成嵌入式系统一般由硬件平台和软件平台两部分组成,如下图 2-1 所示。其中硬件平台由嵌入式微处理器和外围硬件设备组成,而软件平台由嵌入式操作系统和应用软件组成。图 2-1 嵌入式系统的一般
25、架构随着芯片技术的不断发展,嵌入式处理器的主频也越来越高,通常主频都在 40M Hz 以上,有的甚至高达 500MHz。多处理器、多核处理器平台也逐渐应用在嵌入式领域,不过现在大量使用的还是 32 位单处理器组成的平台。一个典型的硬件平台如下图所示:图 2-2 嵌入式硬件平台基本组成结构2.3 linux的前世与今生Linux操作系统是UNIX操作系统的一种克隆系统。它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet 网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。Li
26、nux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。下面主要根据这五个基本线索来追寻一下Linux 的开发历程,它的酝酿过程,最初的发展经历。首先分别介绍其中的四个基本要素(UNIX、MINIX、GNU 和POSIX,Internet 的重要性显而易见,所以不用对其罗嗦),然后根据Linux 的创始人Linus Torvalds 从对计算机感兴趣而自学计算机知识,到心里开始酝酿编制一个自己的操作系统,到最初Linux 内核0.01 版公布,以及从此如何艰难地一步一个脚印地在全世界ha
27、cker 的帮助下最后推出比较完善的1.0 版本这段时间的发展经过,也即对Linux 的早期发展历史进行详细介绍。 Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。 简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。其界面所示.
28、Linux界面 Linux的出现,最早开始于一位名叫LinusTorvalds的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生。他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器1的个人计算机上,并且具有Unix操作系统的全部功能,因而开始了Linux雏形的设计。 绝大多数基于Linux内核的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。正因为如此,GNU计划的开创者理查德马修斯托曼博士提议将Lin
29、ux操作系统改名为GNU/Linux。但有些人只把操作系统叫做Linux。 Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。3 配置基于LINUX的嵌入式开发环境3.1主机上虚拟机的设置嵌入式Linux开发环境的组建方案有很多种,在此选择了在Windows XP操作系统上安装虚拟机(VMware Workst
30、ation)然后再在虚拟机上安装Linux操作系统(Fedora 14 Linux)。采用这种组建方案是可以在VMware下不破坏原有操作系统的情况下,虚拟出一台“真实”的电脑出来,我们只需要在这台虚拟的电脑上安装Linux就可以了,与操作真实机器上的Linux完全一样,从而可以提高设计开发者的开发效率。第一步,安装VMware。首先,在Window XP操作系统中解压VMware-workstation-ForWindows-7.1.3-324285.tar文件,然后直接运行VMware-workstation-full-7.1.3-324285.exe即可按照提示完成虚拟机的安装。最好通过
31、汉化即可以运行虚拟机了。第二步,安装Fedora 14。在安装好的虚拟机上安装Fedora 14 Linux开发平台,其安装镜像选择来作为安装源:Fedora.14.Fedora-14-i386-DVD.iso。3.2建立交叉编译环境交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。采用交叉编译的主要原因是,多数嵌入式目标机不能提供足够的资源供编译过程使用,因而只好将编译工作转移到高性能的宿主机中进行。创建交叉编译工具的编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具(链)主要包括针对目标系统的编译器 gcc、目标系统的二进制工具 binutils、目标系统的标准
32、 c 库 glibc 和目标系统的 Linux 内核头文件。由于一般嵌入式开发系统存储大小有限,通常都要在PC上建立一个用于目标机的交叉编译环境,完成嵌入式系统的开发。交叉编译环境如下图3所示。有时出于减小libc 库大小的考虑,也可以用别的c库来代替Glibc。例如Clibc 、dietlibc和newlib。建立一个交叉编译工具链是一个相当复杂的过程,可以下载一些编译好的可用的交叉编译工具链软件包,可以生成gcc、g+、ar、as、ld等编译链接工具,还可以生成Glibc库和GDB调试器。对于交叉开发工具链来说,从文件名字上加上一个前缀,用来区别本地的工具链,如:arm-linux-gcc
33、,除了体系结构相关的编译选项外,它的使用方法与Linux主机上的gcc相同。所以Linux编程技术对于嵌入式Linux同样适用。交叉编译工具的创建流程如下图所示:3.3 SHELL的使用3.3.1 Shell的含义Shell是一个系统程序,在前台提供Linux系统与用户交互操作的界面;另外一方面Shell是一个命令的编译解释器,会将用户命令经过编译和解释后,交给内核进行执行,也就是说将用户命令解释为系统和内核可以理解和识别的机器语言。 我们目前所使用的操作系统实际上是一个核心(内核Kernel)。作为使用者无法直接对内核(Kernel)进行操纵,而是通过内核的“外壳程序”来与内核进行沟通,这个
34、外壳程序因此得名,实际上就是Shell。 Shell是使用者与系统的一个互动界面,主要是要使用者通过命令行来完成工作,所以Shell的定义就是命令的编辑解释器:将使用者的命令翻译给核心;将核心处理结果翻译给使用者。 当用户登录的时候,就获得了一个Shell。 Shell和内核实际上是不同的两套软件:不同的操作系统上可以使用不同的Kernel,而相同的操作系统上也可以使用不同的Shell。 3.3.2 Shell的种类,切换及更改 Bsh:是Bourne Shell的简称,是较早的UNIX Shell程序,实现了基本的Shell程序功能,除了承担命令解释器的功能外,Bsh还是编程语言。 Csh:
35、是C Shell的缩写,使用C语言的语法风格。Csh与Bsh相比,更加适合于用户命令交互。 Ksh:结合了Bsh和Csh两者的功能优势,兼有Bsh的语法和Csh的交互特性。 Bash:是Bsh的升级替代品。是GNU项目的成员,也是著名的开源软件项目。大多数Linux发行版本都使用Bash作为默认的Shell,当运行Shell程序时,系统实际运行的Bash程序。 系统启动后,默认运行的是Bash。 bsh(运行Bsh,此时的Bsh是Bash的子shell) exit(退回到Bash) 3.3.3 用户的环境变量的设置Shell的大部分环境变量是在用户登录启动shell之后就存在并且有了初值了,那
36、么,这些变量及其初值是如何设置出来的呢?系统是通过一系列的环境变量配置文件设置这些环境变量的。作为root用户可以修改这些文件从而对用户的环境变量进行定制。环境变量配置文件可分为全局配置文件和用户配置文件两种。环境变量全局配置文件包括“/etc/profile”和/etc/bashrc”两个文件,Linux系统中所有的用户在登录时都会按照全局配置文件的内容设置工作环境。“/etc/profile”文件负责设置全局的环境,适用于所有的用户的登录;“/etc/bashrc”文件用于定义全局的函数和别名。 在执行完上述配置文件之后,bash会执行登录用户宿主目录下的“.bash_profile”文件
37、和“.bashrc”文件。通过这两个配置文件设置用户个性化的环境变量。在这里的设置可以覆盖上述两个配置文件的设置。这两个文件的作用分别类似于全局的“/etc/profile”文件和“/etc/bashrc”文件。 4 .基于LINUX内核的移植4.1 BootLoader 的移植4.1.1 BOOTLOADER 概述一个嵌入式 Linux 系统从软件的角度看通常分为四个层次:引导加载程序、Linux内核、文件系统、用户应用程序。引导加载程序,是系统加电后运行的第一段代码。大家熟悉的 PC 中的引导程序一般由BIOS 和位于 MBR 的操作系统 BootLoader(例如 LILO 或者 GRU
38、B)一起组成。然而在嵌入式系统中通常没有像 BIOS 那样的固件程序,因此整个系统的加载动任务就完全由BootLoader 来完成。在嵌入式 Linux 中,引导加载程序即等效为BootLoader。简单地说,BootLoader 就是在操作系统内核运行前执行地一段小程序。通过这段小程序,我们可以初始化必要的硬件设备,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。4.1.2 BOOTLOADER分析与移植Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码。Bootlo
39、ader 通常固化在硬件上的某个固态存储设备上,加电后自启动,主要负责初始化硬件设备、建立内存空间的映射图,为调用操作系统内核准备软、硬件环境。在嵌入式系统中,系统在上电或复位时从地址 0x0000,0000 处开始执行,在这个地址处安排的就是 Bootloader。本系统采用的 BootLoader 为 VIVI,是由韩国 Mizi 公司开发,适用于 ARM9 处理器,支持多种体系结构,具有结构清晰、功能丰富的特点。它支持图形化的用户配置界面,提供对 Flash 分区、下载文件等一系列命令。VIVI 有两种工作模式,“启动加载”模式和“下载”模式,在启动时可以选择。VIVI 中与具体运统的设
40、置,由于我们目标板上要用的文件系统是cramfs,所以需要做如下配置:File systems - Second extended fs support #去除对ext2的支持Pseudo filesystems -* /proc file system support* Virtual memory file system support (former shm fs)* /dev file system support (OBSOLETE)* automatically mount at boot (NEW)Miscellaneous filesystems -*Compressed RO
41、M file system support (cramfs)Network File Systems * NFS file system support除此之外,还需要配置以下选项来支持S3C2410 RTC、USB和MMC/SD卡驱动,具体选项如下:Character devices -* Nonstandard serial port support* S3C2410 RTC DriverUSB Support -* Support for Host-side USBMMC/SD Card Support -* MMC Support* MMC block device driver开发,
42、很大的工作量是为各种设备编写驱动程序。在ARM平台上开发嵌入式Linux的设备驱动程序与在其他平台上开发是一样的。实现一个嵌入式Linux.设备驱动程序的大致流程如下:(l)查看原理图,理解设备的工作原理。(2)定义主设备号。设备由一个主设备号和一个次设备号来标识。主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,区分被一个设备驱动控制下的某个独立的设备。 (3)实现初始化函数。在驱动程序中实现驱动的注册和卸载。(4)设计所要实现的文件操作,定义file-operations结构。(5)实现所需的文件操作调用,如read,w
43、rite等。(6)实现中断服务,并用request-irq向内核注册,中断并不是每个设备驱动所必需的。(7)编译该驱动程序到内核中,或者用insmod命令加载模块。(8)测试该设备,编写应用程序,对驱动程序进行测试。5.2 串口应用编程5.2.1 串口程序操作需要的头文件#include /*标准输入输出定义*/#include /*标准函数库定义*/#include/ /*Unix标准函数定义*/#include #include #include /*文件控制定义*/#include /*PPSIX 终端控制定义*/#include /*错误号定义*/5.2.2 打开串口在Linux下的串
44、口文件是位于/dev下的串口一为/dev/ttyS0,串口二为 /dev/ttyS1。打开串口是通过使用标准的文件打开函数操作: int fd; /*以读写方式打开串口*/ fd = open( /dev/ttyS0, O_RDWR); if (-1 = fd) /* 不能打开串口一*/ perror( 提示错误!); 5.2.3 设置串口最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置 struct termios 结构体的各成员值。struct termio unsigned short c_iflag; /* 输入模式标志 */ unsigned short c_
45、oflag; /* 输出模式 标志 */ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /* local mode flags */ unsigned char c_line; /* line discipline */ unsigned char c_ccNCC; /* control characters */ ; 波特率的设置struct termios Opt; tcgetattr(fd, &Opt); cfsetispeed(&Opt,B19200); /*设置为19200Bps*/ cfsetospeed(&Opt,B19200); tcsetattr(fd,TCANOW,&Opt); 设置波特率的例子函数: /* *brief 设置串口通信速率 *param fd 类型 int 打开串口的文件句柄 *param speed 类型 int 串口速度 *return void */ int speed_arr = B38400, B19200, B9600, B4800, B2400, B1200,