资源描述:
《设备驱动程序.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、设备驱动程序2设备驱动程序的作用设备驱动程序是一个软件层,该软件层使硬件设备响应预定义好的编程接口,我们已经熟悉这些接口,它由一组控制设备的函数(open,read,ioctl等等)组成,这些函数的实际实现由设备驱动程序全权负责。设备驱动程序(应该只是)为系统的其它部分提供各种使用设备的能力,使用设备的方法应该由应用程序决定。3structfile_operations{structmodule*owner;loff_t(*llseek)(structfile*,loff_t,int);ssiz
2、e_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,u
3、nsignedlong);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(
4、*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);unsig
5、nedlong(*get_unmapped_area)(structfile*,unsignedlong,unsignedlong,unsignedlong,unsignedlong);};structfile_operationsinclude/linux/fs.h设备驱动程序则编写设备驱动程序的主要工作就是编写如上子函数,并填充file_operations的各个域一个最简单字符驱动程序,由下面7个函数和1个结构体就可组成。Open(),Release,staticintmy_open(st
6、ructinode*inode,structfile*filp){设备打开时的操作…}staticintmy_release(structinode*inode,structfile*filp){设备关闭时的操作…}staticintmy_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){设备写入时的操作…}staticintmy_read(structfile*file,constchar*buffer,size_t
7、count,loff_t*ppos){设备读取时的操作…}()Write(),Read()Ioctl()Init(),Exit()Structfile_operationstaticint__initmy_init(void){初始化硬件,注册设备,创建设备节点…}staticvoid__exitmy_exit(void){删除设备节点,注销设备…}{设备的控制操作……}Staticintmy_ioctl(structinode*inode,structfile*filp,unsignedint
8、cmd,unsignedlongarg)staticstructfile_operationsmy_fops={对文件操作结构体成员定义初始值…}7在操作系统中的位置设备驱动程序是内核代码的一部分。驱动程序的地址空间是内核的地址空间(copy_to_user函数等)。驱动程序的代码直接对设备硬件(实际是设备的各种寄存器)进行控制(实际就是读写操作)。应用程序通过操作系统的系统调用执行相应的驱动程序函数。中断则直接执行相应的中断程序代码。设备驱动程序的file_operations结构体的地址被注