设备驱动程序

上传人:you****now 文档编号:252972412 上传时间:2024-11-26 格式:PPTX 页数:28 大小:311.95KB
返回 下载 相关 举报
设备驱动程序_第1页
第1页 / 共28页
设备驱动程序_第2页
第2页 / 共28页
设备驱动程序_第3页
第3页 / 共28页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,设,备,备,驱,驱,动,动,程,程,序,序,2,设,备,备,驱,驱,动,动,程,程,序,序,的,的,作,作,用,用,设,备,备,驱,驱,动,动,程,程,序,序,是,是,一,一,个,个,软,软,件,件,层,层,,,,,该,该,软,软,件,件,层,层,使,使,硬,硬,件,件,设,设,备,备,响,响,应,应,预,预,定,定,义,义,好,好,的,的,编,编,程,程,接,接,口,口,,,,,我,我,们,们,已,已,经,经,熟,熟,悉,悉,这,这,些,些,接,接,口,口,,,,,它,它,由,由,一,一,组,组,控,控,制,制,设,设,备,备,的,的,函,函,数,数,(open,read,ioctl,等,等,等,),组,成,成,,,,,这,这,些,些,函,函,数,数,的,的,实,实,际,际,实,实,现,现,由,由,设,设,备,备,驱,驱,动,动,程,程,序,序,全,全,权,权,负,负,责,责,。,。,设,备,备,驱,驱,动,动,程,程,序,序,(,应,该,该,只,只,是,是,),为,系,系,统,统,的,的,其,其,它,它,部,部,分,分,提,提,供,供,各,各,种,种,使,使,用,用,设,设,备,备,的,的,能,能,力,力,,,,,使,使,用,用,设,设,备,备,的,的,方,方,法,法,应,应,该,该,由,由,应,应,用,用,程,程,序,序,决,决,定,定,。,。,3,structfile_operations,structmodule*owner;,loff_t(*llseek)(structfile*,loff_t,int);,ssize_t(*read)(structfile*,char*,size_t,loff_t*);,ssize_t(*write)(structfile*,constchar*,size_t,loff_t*);,int(*readdir)(structfile*,void*,filldir_t);,unsignedint(*poll)(structfile*,structpoll_table_struct*);,int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong);,int(*mmap)(structfile*,structvm_area_struct*);,int(*open)(structinode*,structfile*);,int(*flush)(structfile*);,int(*release)(structinode*,structfile*);,int(*fsync)(structfile*,structdentry*,intdatasync);,int(*fasync)(int,structfile*,int);,int(*lock)(structfile*,int,structfile_lock*);,ssize_t(*readv)(structfile*,conststructiovec*,unsignedlong,loff_t*);,ssize_t(*writev)(structfile*,conststructiovec*,unsignedlong,loff_t*);,ssize_t(*sendpage)(structfile*,structpage*,int,size_t,loff_t*,int);,unsignedlong(*get_unmapped_area)(structfile*,unsignedlong,unsignedlong,unsignedlong,unsignedlong);,;,structfile_operations,include/linux/fs.h,设,备,备,驱,驱,动,动,程,程,序,序,则,编,编,写,写,设,设,备,备,驱,驱,动,动,程,程,序,序,的,的,主,主,要,要,工,工,作,作,就,就,是,是,编,编,写,写,如,如,上,上,子,子,函,函,数,数,,,,,并,并,填,填,充,充,file_operations,的,各,各,个,个,域,域,一个最简单,字,字符驱动程,序,序,由下面,7,个函数和,1,个结构体就,可,可组成。,Open,(),,Release,static intmy_open(structinode*inode,struct file*filp),设备打开时,的,的操作,static intmy_release(struct inode*inode,structfile*filp),设备关闭时,的,的操作,static intmy_write(struct file*file,constchar*buffer,size_t count,loff_t*ppos,),设备写入时,的,的操作,static intmy_read(structfile*file,const char*buffer,size_tcount,loff_t*ppos,),设备读取时,的,的操作,(),Write,(),,Read,(),Ioctl,(),Init,(),,Exit,(),Struct,file_operation,static int_init my_init(void),初始化硬件,,,,注册设备,,,,创建设备,节,节点,static void _exit my_exit(void),删除设备节,点,点,注销设,备,备,设备的控制,操,操作,Static intmy_ioctl(struct inode*inode,struct file*filp,unsigned,int cmd,unsigned long arg),static struct file_operationsmy_fops=,对文件操作,结,结构体成员,定,定义初始值,7,在操作系统,中,中的位置,设备驱动程,序,序是内核代,码,码的一部分,。,。,驱动程序的,地,地址空间是,内,内核的地址,空,空间,(,copy,_to_user,函数等,),。,驱动程序的,代,代码直接对,设,设备硬件,(,实际是设备,的,的各种寄存,器,器,),进行控制,(,实际就是读,写,写操作,),。,应用程序通,过,过操作系统,的,的系统调用,执,执行相应的,驱,驱动程序函,数,数。中断则,直,直接执行相,应,应的中断程,序,序代码。,设备驱动程,序,序的,file_operations,结构体的地,址,址被注册到,内,内核中的设,备,备链表中。,块设备和字,符,符设备以设,备,备文件的方,式,式建立在文,件,件系统中的,/dev,目录下,而,且,且每个设备,都,都有一个主,设,设备号和一,个,个次设备号,。,。,设备号,主设备号,驱动程序在,初,初始化时,,会,会注册它的,驱,驱动及对应,主,主设备号到,系,系统中,这,样,样当应用程,序,序访问设备,节,节点时,系,统,统就知道它,所,所访问的驱,动,动程序了。,你,你可以通过,/proc/devices,文件来查看,驱,驱动系统设,备,备的主设备,号,号。,次设备号,驱动程序遍,历,历设备时,,每,每发现一个,它,它能驱动的,设,设备,就创,建,建一个设备,对,对象,并为,其,其分配一个,次,次设备号以,区,区分不同的,设,设备。这样,当,当应用程序,访,访问设备节,点,点时驱动程,序,序就可以根,据,据次设备号,知,知道它说访,问,问的设备了,。,。,9,ls-l/dev,crw-r-1rootroot1,1 Jan1 00:00mem,crw-r-1rootroot1,2 Jan1 00:00kmem,crw-rw-rw-1rootroot1,3 Jan1 00:00null,crw-r-1rootroot1,4 Jan1 00:00port,crw-rw-rw-1rootroot1,5 Jan1 00:00zero,crw-rw-rw-1rootroot1,7 Jan1 00:00full,crw-r-r-1rootroot1,8Jan100:00random,crw-r-r-1rootroot1,9Jan100:00urandom,crw-rw-rw-1rootroot5,0Jan100:00tty,crw-1rootroot5,1Jan100:00console,crw-rw-rw-1rootroot5,2Jan100:00ptmx,drwxr-xr-x1rootroot0Jan100:00pty,drwxr-xr-x2rootroot0Jan100:00pts,drwxr-xr-x1rootroot0Jan100:00rd,drwxr-xr-x1rootroot0Jan100:00mtd,drwxr-xr-x1rootroot0Jan100:00mtdblock,crw-1rootroot4,64Jan100:15ttyS0,crw-1rootroot4,65Jan100:00ttyS1,crw-1rootroot4,66Jan100:00ttyS2,crw-1rootroot4,67Jan100:00ttyS3,crw-1rootroot4,68Jan100:00ttyS4,drwxr-xr-x1rootroot0Jan100:00misc,c:,字符,设,设备,b:,块设,备,备,主设,备,备号,次设,备,备号,10,设备,驱,驱动,程,程序,源,源代,码,码的,基,基本,结,结构,/*,*,驱动,程,程序,简,简单,说明,:,:,*,驱,驱动,程,程序,的,的作,用,用:这是,一,一个,字,字符,设,设备,驱,驱动,程,程序,的,的基,本,本框,架,架结,构,构,*,被,被驱,动,动设,备,备的,简,简单,描,描述,:,:将使,用,用,AT91RM9200,的,PB,端口,为,为例,进,进行,说,说明,*,一,一些,特,特殊,的,的考,虑,虑等,:,:如,PB21,作为,可,可以,产,产生,中,中断,的,的输,入,入引,脚,脚(,本,本例,未,未实,现,现),*,版,版本,,,,创,建,建日,期,期,,作,作者,等,等:,1.0,版,,2006,年,1,月,6,日,*,/,#ifndef_KERNEL_,#define_KERNEL_,#endif,#ifndefMODULE,#defineMODULE,#endif,#include,#include,.,#include,表明,这,这个,模,模块,将,将用,于,于内,核,核,,也,也可,以,以在,编,编译,时,时通,过,过,D,选项,指,指定,,,,如,gcc,D_KERNEL_,。参,见,见,Makefile,。,内核,头,头文,件,件,,需,需要,根,根据,具,具体,驱,驱动,程,程序,和,和用,到,到的,内,内核,模,模块,确,确定,。,。,表明,这,这个,驱,驱动,程,程序,将,将以,模,模块,的,的方,式,式编,译,译和,使,使用,,,,也,可,可以,在,在编,译,译时,通,通过,D,选项,指,指定,,,,如,gcc,DMODULE,。参,见,见,Makefile,。,11,/*,*,驱动,程,程序,中,中使,用,用的,各,各种,函,函数,的,的原,型,型声,明,明。,标,标准,的,的作,法,法是,将,将函,数,数原,型,型声,明,明,*,放,放在,一,一个,头,头文,件,件中,,,,然,后,后在,该,该文,件,件开,始,始处,使,使用,#include,引用,,,,并,在,在该,*,文,文件,中,中定,义,义。,*,*,这,这里,我,我们,将,将函,数,数的,声,声明,和,和定,义,义放,在,在一,起,起。,所,所以,下,下面,的,的代,码,码既,是,是函,数,数的,声,声明,,,,,*,也,也是,函,函数,的,的定,义,义。,*,/,staticssize_tspi
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!