




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于S3C2410和LINUX的触摸屏驱动【摘要】linux设备驱动程序属于linux内核的一部分,并在linux内核中扮演着十分重要的角色。本文以一个触摸屏字符设备驱动程序为原型,剖析其基本结构并通过改写、编译实现其相应功能。最后通过在驱动程序中加入自己的滤波算法,并编译实现,查看屏幕矫正效果。【关键词】s3c2410;linux;触摸屏;驱动linux设备驱动程序属于linux内核的一部分,并在linux内核中扮演着十分重要的角色。它们像一个个“黑盒子”使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节。用户通过一组标准化的调用来完成相关操作,这些标准化的调用是和具体设备驱动无关的,而驱动程序的任务就是把这些调用映射到具体设备对于实际硬件的特定操作上。可以把设备驱动作为内核的一部分,直接编译到内核中,即静态编译,也可以单独作为一个模块编译,在需要它的时候再动态的把它插入到内核中。在不需要时也可把它从内核中删除,即动态连接。显然动态连接比静态连接有更多的好处,但在嵌入式开发领域往往要求进行静态连接,尤其是像s3c44b0这种不带mmu的芯片。但在s3c2410等带mmu的arm芯片中我们依然可以使用动态连接。一、linux设备分类目前linux支持的设备驱动可分为三种:字符设备,块设备,网络接口设备。当然它们之间的也并不是要严格的加以区分。1.字符设备:所有能够像字节流一样访问的设备比如文件等在linux中都通过字符设备驱动程序来实现。在linux中它们也被映射为文件系统的一个节点,常在/dev目录下。字符设备驱动程序一般要包含open,close,read,write等几个系统调用。2.块设备:linux的块设备通常是指诸如磁盘,内存,flash等可以容纳文件系统的存储设备。与字符设备类似,块设备也是通过文件系统来进行访问,它们之间的区别仅仅在于内核内部管理数据的方式不同。它也允许像字符设备一样的访问,可以一次传递任意多的字节。linux中的块设备包含整数个块,每个块包含2的几次幂的字节。3.网络接口设备:网络接口设备是linux中比较复杂的一种设备,通常它们指的是硬件设备,但有时也可是一个软件设备。它们由内核中网络子系统驱动,负责发送和接收数据包,而且它并不需要了解每一项事务是如何映射到实际传送的数据包的。它们的数据传送往往并不是面向流的,所以不容易把它们映射到一个文件系统的节点上。在linux中采用给网络接口设备分配一个唯一名字的方法来访问该设备。二、linux关于字符设备的管理驱动程序在linux内核中往往是以模块形式出现的。与应用程序的执行过程不同,模块通常只是预先向内核注册自己,当内核需要时响应请求。模块中包含两个重要的函数:init_module和cleanup_module。前者是模块的入口,它为模块调用做好准备工作,而后者则是在模块即将卸载时被调用,做一些清扫工作。驱动程序模块通过函数:int register_chrdev(unsigned int major,const char *name,struct file_operations *fops);来完成向内核注册的。其中unsi-gned int major为主设备号,const char *name为设备名,结构指针struct file_operations *fops内核就是通过这个结构来访问驱动程序的。在linux中字符设备是通过文件系统中的设备名来进行访问的。这些名称通常放在/dev目录下,通过命令ls-l/dev我们可以看到该目录下的一大堆设备文件,其中第一个字母是“c”的为字符设备,而第一个字母是“b”的为块设备文件。其中每个设备文件都具有一个主设备号和一个次设备号。当驱动程序调用open系统调用时,内核就是利用主设备号把该驱动与具体设备对应起来的。而次设备号内核并不关心,它是给主设备号已经确定的驱动程序使用的,一个驱动程序往往可以控制多个设备,如一个硬盘的多个分区,这时该硬盘拥有一个主设备号,而每个分区拥有自己的次设备号。我们编写好一个驱动程序模块后,按传统的主次设备号的方法来进行设备管理,则我们应手工为该模块建立一个设备节点。命令:mknod /dev/ts c 254 0其中/dev/ts表示我们的设备名是ts,“c”说明它是字符设备,“254”是主设备号,“0”是次设备号。一旦通过mknod创建了设备文件,它就一直保留下来,除非我们手工删除它。我们用register_chrdev注册模块时,给major赋值为0,则系统就采用动态方式分配设备号。它会在所有未被使用的设备号中为我们选定一个,作为函数返回值返回给我们。一旦分配了设备号,我们就可以在/proc/devices中看到相关内容。/proc在前面关于操作系统移植的实验中我们已经提到,它是一个伪文件系统,它实际并不占用任何硬盘空间,而是在内核运行时在内存中动态生成的。它可以显示当前运行系统的许多相关信息。显然这一点对我们动态分配主设备号是非常有意义的。因为,正如我们前面提到的一样,我们采用主次设备号的方式管理设备文件,我们要在/dev目录下为我们的设备创建一个设备名,可我们的设备号却是动态产生的,每次都不一样,这样我们就不得不每次都从新运行一次mknod命令。这个过程我们通常通过编写自动执行脚本来完成,而其中的主设备号我们就可以通过/proc/devices中获得。三、触摸屏的控制本系统触摸屏的控制是使用的s3c2410处理器自带的触摸屏控制器,这部分的开发主要参考s3c2410处理器的芯片手册。这部分的控制主要是设置触摸屏的采样模式,处理器提供的模式:1.正常的转换模式2.手动的x/y位置转换模式3.自动的x/y位置转换模式我们这里使用的是第3种转换模式。需要注意的是在完成一次x/y坐标采样的过程中需要一次模式转换即在点击触摸屏之前是等待中断模式,当有触摸动作产生触摸屏中断以后,在x/y的坐标采集驱动中设置成自动的x/y位置转换模式,在完成采集以后再转换回等待中断模式,准备下一次的触摸采样。四、程序分析剖析s3c2410的触摸屏驱动程序,部分代码及注释如下:#define pen_up 0 /定义抬笔,即触摸屏不被压下。#define pen_down 1 /定义下笔,即触摸屏被压下。#define pen_fleeting 2 /定义拖动。#define max_ts_buf 16 /定义缓冲区大小位16字节。#define device_name “s3c2410-ts”/定义了设备名以后我们就根据它来寻找该设备。#define tsraw_minor1 /次设备号为1。typedef struct unsigned int penstatus;/*触摸屏状态: pen_up,pen_down,pen_sample */static int tsmajor = 0;/设置主设备号为0,这样我们将进行动态分配主设备号。static int x,y; /坐标值static ssize_t s3c2410_ts_read(str-uct file *filp,char *buffer,size_t count,loff_t *ppos)/*设备读函数,各参数含义:*filp打开的文件,*buffer数据缓存,count请求传送数据长度,*ppos用户在文件中进行存储操作的位置。*/驱动程序运行在内核空间,而应用程序运行在用户空间。用户空间内存页是可被换出的。当内核空间访问用户空间时有可能当前页并不存在而造成错误。所以当我们要从内核空间拷贝整段数据到用户空间时只能借助于内核函数:unsigned long copy_to_user(void *to,const void *from,unsigned long count)同样从用户空间往内核空间拷贝数据也只能借助于内核函数:unsigned long copy_from_user(void*to,const void *from,unsigned long count)它将在驱动程序写函数中用到。static inline void start_ts_adc(void) /ad转换adc_state = 0;mode_x_axis();start_adc_x(); /x轴转换/在该函数中添加自己的滤波算法,注意函数中对硬件寄存器操作的部分语句和函数static void s3c2410_isr_tc(int irq,void *dev_id,struct pt_regs *reg)/这是中断处理函数,当触摸屏事件发生时触发中断,内核捕捉该中断后交由该函数处理。static int s3c2410_ts_open(structinode *inode,struct file *filp)/打开设备,该函数中往往要完成设备初始化和使用记数增值。static int s3c2410_ts_release(str-uct inode *inode,struct file *filp)/设备释放函数。s3c2410_isr_adc、s3c2410_isr_tc:它是一个唯一的标志符,通过该指针多个设备可以共享信号线。驱动程序也可以用它指向自己的私有数据区,用来识别哪个设备产生了中断。由于设备驱动是沟通底层硬件与上层应用程序的桥梁,它所涉及的内容相当多。要编写一个完整的驱动程序,要求你不仅对硬件设备及其工作原理要相当熟悉,同时必需具备一定的内核
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年菏泽工程学校公开招聘备案制工作人员(10人)模拟试卷及完整答案详解
- 2025年辉南县教育系统面向东北师范大学等院校招聘教师及考前自测高频考点模拟试题附答案详解(突破训练)
- 2025春安徽淮南市寿县职业中专学校职教高考教师招聘考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025吉林省省直事业单位招聘186人(1号)考前自测高频考点模拟试题带答案详解
- 2025贵州省水利厅所属事业单位第十三届贵州人才博览会引才模拟试卷及一套参考答案详解
- 2025内蒙古鄂温克族自治旗融媒体中心多元化岗位招聘2人模拟试卷完整答案详解
- 2025年4月15日广西梧州市龙投人力资源有限公司招聘2人模拟试卷完整参考答案详解
- 2025年阜阳临泉技工学校招聘4人模拟试卷及答案详解(新)
- 2025江苏省人民医院宿迁医院(宿迁市第一人民医院)高层次人才引进48人考前自测高频考点模拟试题及答案详解(新)
- 2025湖南省人民医院(湖南师范大学附属第一医院)高层次人才公开招聘78人考前自测高频考点模拟试题参考答案详解
- 中医形神兼养
- GB/T 44241-2024虚拟电厂管理规范
- SYT 6680-2021 石油天然气钻采设备 钻机和修井机出厂验收规范-PDF解密
- 实用美术基础中职全套教学课件
- 子宫内膜癌的预防和早期发现
- 债权债务法律知识讲座
- 个人停车位租赁合同模板
- 食品保质期检测记录表
- 基于教育培训行业的客户关系营销研究
- 老年综合评估和老年综合征课件
- 设计院工作联系单(模板)
评论
0/150
提交评论