字符型设备驱动程序在LED显示的应用
时间:2020-09-18 07:56:19 来源:达达文档网 本文已影响 人
【摘要】
基于ARM+LINUX系统结构,提出了利用LINUX驱动程序,实现LED时钟显示的功能。文章主要涉及了LINUX字符型驱动程序的软件设计以及显示驱动模块的硬件设计。软件设计部分给出了时间显示模块的应用程序部分和驱动程序设计部分。硬件部分论述了LED显示模块的硬件组成以及控制方法。
【关键词】
LINUX驱动程序;LED显示
一、软件设计
1、驱动程序概述
LINUX设备驱动程序是为特定的硬件提供用户程序的一组标准化接口,它隐藏了设备的工作细节。LINUX下的驱动程序是运行在内核态的,是和内核连接在一起的程序。如果运行在用户态的应用程序想控制硬件设备,必须通过驱动程序来控制。在LINUX系统里,任务设备都以文件的形式来表示,也就是说,对设备文件的操作实质反应的是对设备的操作。LINUX系统的设备分为三种类型,分别是字符设备、块设备和网络设备。本文采用了对字符设备编写驱动程序。驱动程序涉及的主要内容有驱动程序的加载与卸载、LINUX设备的操作、LINUX设备的打开和关闭等。
2、字符型设备驱动程序的加载与卸载
LINUX系统对程序的管理分为内核态和用户态。LINUX设备驱动程序属于内核态,提供了应用程序与硬件设备之间的接口。驱动程序可以在内核编译时直接写入操作系统内核,也可以操作系统启动后手动加载入操作系统内核。本文采用后者。加载方式如下:insmod led_drive_light.ko其中insmod是加载命令,led_drive_light.ko是编译好的LINUX驱动程序组成的内核模块,在linux2.6以上的版本中,内核模块以“ko”结尾。在加载内核模块后,将自动调用驱动程序的module_init(dev_init);其中dev_init是初始化函数。
手动加载后也可以手动卸载驱动程序模块,方法如下:rmmod led_drive_light.ko,其中rmmod是卸载命令,led_drive_light.ko是卸载的模块。在执行完卸载命令后,将自动调用驱动程序的module_exit(dev_exit)函数。dev_exit函数是退出后自动执行的函数。
3、字符型设备驱动程序的打开和关闭
Linux操作系统对待设备如同对待文件的操作。分为设备的打开,设备操作的调用和设备的关闭。设备的打开用到的函数是open()函数,如:fd_show=open("/dev/clock-light",0);在成功打开设备后,fd_show这个变量就用于代表该设备的文件描述符。关闭驱动程序也是一样,执行函数close(fd_show);就可以将该设备关闭。
4、Linux字符设备的操作
LINUX设备的操作主要在内核驱动程序中完成,并提供给应用程序使用。本文所定义的操作函数是ioctl( )。该函数完成的功能是完成了LED时钟的显示,对应的主要代码如下:
for (i=0;i<8;i++)
{
tmp_shift=(dm[dm1]>>i);
writel(tmp_shift|0x0010,S3C64XX_GPLDAT);//pull down
writel(tmp_shift&0xff0f,S3C64XX_GPLDAT);//input date
writel(tmp_shift&0xffef,S3C64XX_GPLDAT);//pull up
}
return tmp;
5、编写应用程序
应用程序的编写是完成LINUX设备操作的最后一步。其中涉及到了LINUX驱动程序操作函数的调用。本文的应用程序实现了LED设备的驱动显示功能。应用程序流程图如图二所示:
二、硬件设计
硬件设计部分,本文由控制主板共输出三种信号,分别是时钟信号、片选信号和数据信号。时钟信号用于给CD4094提供上拉和下拉的数字信号,以实现串入并出的功能。片选信号用于分别对四个数码显示管进行选择控制。数字信号是控制主板发出的串行显示信号。经CD4094处理后发向显示控制单元。其中7406的作用是用于信号的整理、放大和取反。
系统硬件实物图如图二所示。
三、结论
通过对软件设计和硬件设计进行实践,我们可以看出,通过这种方式可以很好的实现对LED数码管的控制与显示。同时,我们可以得到结论,通过LINUX字符型设备驱动程序的编写,我们不仅可以实现LED时钟的显示,还可以实现多种控制功能。
参考文献:
[1]LINUX C编程实战[M].北京:人民邮电出版社,2008
[2]宋宝华.LINUX设备驱动开发详解[M].北京:人民邮电出版社,2008