基于嵌入式Linux的LED驱动开发与应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于嵌入式Linux的LED驱动开发与应用

摘要:简要介绍了基于嵌入式ARM处理器芯片LPC3250的嵌入式Linux的LED驱动程序的开发原理、流程以及相关主要接口硬件电路的设计。实际运行结果表明,该设计完全达到预期效果。

关键词:嵌入式Linux;LED;硬件;驱动程序

0引言

随着IT技术和嵌入式技术的快速发展,嵌入式产品已经广泛应用于工业、能源、环保、通信等各个行业,显示出其强大的生命力。Linux是当今流行的操作系统之一,具有源代码开放、内核稳定、功能强大和可裁减等优点而成为众多应用的首选。同样嵌入式Linux也继承了Linux的诸多优点。对Linux应用程序来说,由于设备驱动程序屏蔽了硬件的细节,其硬件设备将作为一个特殊的文件,因此应用程序可以像操作普通文件一样对硬件设备进行操作。本设计中驱动的设备是基于NXP公司的LPC3250微处理器开发的LED信号指示灯,利用这些指示灯来显示仪器的运行状态,方便用户了解仪器的工作状况。

1LPC3250简介及接口电路设计

本设计中主控芯片采用LPC3250微处理器,具有高集成度、高性能、低功耗等特点。它采用90nm工艺和ARM926EJS内核,主频最高为208MHz,具有全系列标准外设。其中包括带专用DMA控制器的24位LCD控制器,可支持STN和TFT面板。充分满足本设计

的需要,外部只需加入很少芯片就可实现系统功能[1]

LPC3250共有296个管脚。对于4个LED灯来说需要用到4个引脚,这里使用GPIO端口来设计,GPM1~GPM3作为LED灯的控制端口,另外还需要为LED提供电源,这里需要3.3V的直流电源。接口电路设计如图1所示。GPM0~GPM3分别与电阻、LED连接,当GPM0~GPM3置为低电平时,相应的LED灯点亮。

2驱动程序设计

在嵌入式Linux操作系统下,有三类主要的设备文件类型:字符设备、块设备和网络设备[2]。设备驱动程序将完成以下功能:对设备初始化和释放;把数据从内核传到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送给应用程序请求的数据;检测和处理设备出现的错误[3]

完成接口电路的设计后,还需要编写相应的驱动程序。由于仪器运行的操作系统是Linux,因此驱动程序的开发需要遵循Linux驱动开发步骤。LED灯为字符型设备,其驱动程序应为字符型设备驱动程序。LED驱动程序由驱动程序模块加载与释放函数、探测函数与移除函数、设备IO控制函数以及相关的数据结构组成。

2.1涉及的数据结构

(1)file_operations数据结构。每个Linux硬件驱动程序对应一个file_operations数据结构,file_operations的原型定义在中的函数指针数组[4]。在file_operations中定义一些与此设备相关的功能函数,当用户进行系统调用时,将自动使用驱动程序

中特定的函数来实现具体操作。Linux内核内部通过这个数据结构向应用程序提供了标准的文件系统操作函数,即访问硬件设备的接口函数。应用程序通过设备文件同硬件设备联系,以系统调用的方式对设备文件进行操作,并通过file_operations中的函数指针来把系统调用和驱动程序联接起来[5]。在本设计中定义的tp_leds_ioctl ()函数即是系统调用ioct指向的驱动函数,以实现对LED灯的控制。

指向该结构体struct file_operations的指针命名为tp_leds_fops。在该结构体中,第一个指针指向拥有这个结构体的模块,其作用是防止设备正在使用时被意外卸载,THIS_MODULE是在中定义的一个宏。open、ioctl分别指向了LED灯设备驱动的打开和IO 控制函数。

(2)LED灯属于一种特殊的字符设备,叫杂项(Misc)设备。杂项设备是在嵌入式系统中用得比较多的一种设备驱动。杂项设备定义在Linux内核的文件中。在本设计中为了使用驱动程序有更好的灵活性和通用性,采用了动态方式来获取次设备号。

3测试及结论

在Linux系统下完成驱动程序编写后,接着编写Makefile文件并编译驱动程序模块,将生成的驱动程序文件动态加载到目标系统的内核中,这样在调试过程中不必频繁启动仪器就可以完成驱动开发工作。笔者同时编写了简单测试程序来测试驱动程序,获得了预期的效

果。本设计已经应用于仪器实际运行中。

参考文献:

[1]桂电-丰宝联合实验室.基于LPC3250的嵌入式Linux系统开发[M].北京:科学出版社,2010.

[2]孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M].北京:电子工业出版社,2005.

[3]王多智.嵌入式Linux下SRAM驱动程序的开发及应用[J].微计算机信息,2005,21(5):7375.

[4]魏永明.Linux设备驱动程序[M]. 北京:中国电力出版社,2006.

[5]何泉,贺玉梅.嵌入式Linux下GPIO驱动程序的开发及应用[J]. 仪器仪表学报,2007,28(4):271273.

相关文档
最新文档