基于S3C2410和LINUX的触摸屏驱动.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于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/dev

文档评论(0)

word.ppt文档 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档