专题四设备驱动
完善例子中的字符设备程序,使之满足以下功能:
i.安装设备后从设备中读出字符串为你的学号;
ii. 设备支持每次写入字符不超过1024个,超过部分被丢弃;
iii. 用户可以读出最近写入到设备中的字符;
iv. 设备关闭前不能被多次打开;
v. 设备支持系统调用ioctl(int d, int req,…),req = 0x909090, 清除设备中写入的字符串;
自己编写测试程序,验证以上功能
提交内容: 测试过程截图
1 概念
操作系统中直接控制设备的程序
Linux 将设备看成是一种特殊的文件(设备文件)
- 字符型设备
- 块设备
Linux 打开读写或关闭设备文件时,在与设备驱动进行交互
2 设计
- 用户进程请求设备服务流程图
- 用户进程发出IO请求,系统将处理下传到VFS上
- VFS 通过驱动程序提供的接口将任务分配到驱动程序
- 驱动程序根据需要,对设备控制器进行操作
- 设备控制器去控制设备
- 设备驱动程序设计
- VFS 管理字符设备的接口:
struct file_operations
- 重要的接口函数:
open,read,write,release,ioctl
- 接口的实现都由设备驱动提供
- 重要的接口函数:
- 与VFS的对接:
register_chrdev
- 原理:由数组chrdevs[255]管理字符设备驱动与VFS的对接接口,主设备号是他的下标
- 设备驱动与设备的对接
- 设备就是一块内存,仅读写
- VFS 管理字符设备的接口:
3 实现
- 实验内容:
- 实现一个用内存模拟的字符设备的驱动程序,功能
- 用户可以向设备写入字符串
- 用户可以从设备中读出写入的字符串
- 用户可以通过系统调用
ioctl
清除设备中写入的字符串
- 实现一个用内存模拟的字符设备的驱动程序,功能
3.2 设备驱动的实现——用模块实现
- 模块初始化
- 模块退出时的清理
- open close
- read
- write
- ioctl
打开失败
读取失败
文件结束
写入失败
写 bytes
clean 失败
清除!
写设备error
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment