- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于嵌入式Linux的LED驱动开发与应用.doc
基于嵌入式Linux的LED驱动开发与应用
摘要:简要介绍了基于嵌入式ARM处理器芯片LPC3250的嵌入式Linux的LED驱动程序的开发原理、流程以及相关主要接口硬件电路的设计。实际运行结果表明,该设计完全达到预期效果。
关键词:嵌入式Linux;LED;硬件;驱动程序
中图分类号:TP319 文献标识码:A 文章编号2013)009011202
作者简介:任海军(1984-),男,硕士,中国地震局第二监测中心助理工程师,研究方向为地球物理及地震相关软件研发。
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]桂电-丰宝联
文档评论(0)