完善例子中的字符设备程序,使之满足以下功能:

i.安装设备后从设备中读出字符串为你的学号;

ii. 设备支持每次写入字符不超过1024个,超过部分被丢弃;

iii. 用户可以读出最近写入到设备中的字符;

iv. 设备关闭前不能被多次打开;

v. 设备支持系统调用ioctl(int d, int req,…),req = 0x909090, 清除设备中写入的字符串;

自己编写测试程序,验证以上功能

提交内容: 测试过程截图

1 概念

  • 操作系统中直接控制设备的程序

  • Linux 将设备看成是一种特殊的文件(设备文件

    • 字符型设备
    • 块设备
  • Linux 打开读写或关闭设备文件时,在与设备驱动进行交互

2 设计

  • 用户进程请求设备服务流程图
    • image-20210531201244104
      1. 用户进程发出IO请求,系统将处理下传到VFS
      2. VFS 通过驱动程序提供的接口将任务分配驱动程序
      3. 驱动程序根据需要,对设备控制器进行操作
      4. 设备控制器去控制设备
  • 设备驱动程序设计
    • VFS 管理字符设备的接口:struct file_operations
      • 重要的接口函数:open,read,write,release,ioctl
      • 接口的实现都由设备驱动提供
    • 与VFS的对接:
      • register_chrdev
      • 原理:由数组chrdevs[255]管理字符设备驱动与VFS的对接接口,主设备号是他的下标
    • 设备驱动与设备的对接
      • 设备就是一块内存,仅读写

3 实现

  • 实验内容:
    • 实现一个用内存模拟的字符设备的驱动程序,功能
      • 用户可以向设备写入字符串
      • 用户可以从设备中读出写入的字符串
      • 用户可以通过系统调用ioctl清除设备中写入的字符串

3.2 设备驱动的实现——用模块实现

  • 模块初始化
  • 模块退出时的清理
  • open close
  • read
  • write
  • ioctl

打开失败

读取失败

文件结束

写入失败

写 bytes

clean 失败

清除!

写设备error