- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单字符设备驱动程序的设计
实验五:简单字符设备驱动程序的设计
实验学时:4
实验类型:(设计)
一、实验目的
1. 理解设备驱动程序的处理过程;
2. 掌握Linux设备驱动程序开发的基本过程和设计方法;
3. 学会编写简单的字符设备驱动程序。
二、实验条件
Linux操作系统 gcc
三、实验原理及相关知识
设备驱动程序是I/O进程与设备控制器之间的通信程序。
驱动程序的功能:
⑴ 接收由设备独立性软件发来的命令和参数,并将命令中的抽象要求转换为具体的要求。
⑵ 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
⑶ 发出I/O命令。
⑷ 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
⑸ 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构建通道程序。
设备驱动程序的处理过程:
⑴ 将抽象要求转换为具体要求
⑵ 检查I/O设备请求的合法性
⑶ 读出和检查设备的状态
⑷ 传送必要的参数
⑸ 工作方式的设置
⑹ 启动I/O设备
Linux系统中,设备驱动程序是操作系统内核的重要组成部分,它与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设备进行打开(open)、关闭(close)、读写(read/write)等操作。
通常设备驱动程序接口是由结构file_operations结构体向系统说明的,它定义在include/linux/fs.h中。file_operations的数据结构如下:
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char_user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char _user *, size_t, loff_t *);
ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *, fl_owner_t id);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*aio_fsync) (struct kiocb *, int datasync);
int (*fasync) (int, struct file *, int);
...
};
⑴ open 入口点:
open函数负责打开设备、准备I/O。任何时候对设备文件进行打开操作,都会调用设备的open入口点。所以,open函数必须对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的。则open函数必须将设备标记成忙状态。
⑵ close入口点
close函数负责关闭设备的操作,当最后一次使用设备完成后,调用close函数,关闭设备文件。独占设备必须标记为可再次使用。
close()函数作用是关闭打开的文件。
⑶ read入
您可能关注的文档
- avaya SES 服务器.doc
- 关于地震波极性判断问题.doc
- 8 MSTP及VRRP配置.doc
- Onedrop简要操作说明.doc
- JBPM 6 开发者指南 Chapter 7.docx
- CAB打包和exe安装程序制作说明.docx
- 四川3D打印产业与区域经济协调发展研究.docx
- platform_driver与file_operations两种方法开发led驱动.doc
- QEMU中挂载vTPM 笔记.doc
- 国际商务英语课文-中英文对照.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)