7.3 Linux:驱动开发——应用程序和驱动程序的交互

字符设备驱动

  • 特征
    ①以字节的方式进行访问:应用程序和驱动程序的交互时
    ②访问数据时连续的,而且时实时的。
    ③字符设备驱动不带缓存,块设备带缓存。
  • cdev 结构体
  • 文件操作集-operations:应用程序访问驱动程序的接口。
    形参列表要一致,返回值要和文件操作集保持一致

  • dev_t dev
    设备号是一个32位无符号整数值
    • 设备号的申请
      静态注册 & 动态分配
  • 实操------驱动编写
    ①申请设备号:int alloc_chrdev_region()
    ②初始化字符设备cdev:void cdev_init(字符设备, 文件操作集)
    创建类:class_create
    销毁类:class_destroy
    创建设备文件:device_create
    销毁设备文件:device_destory
    ③将字符设备cdev注册到linux kernel:cdev_add()
    ④释放设备号:unregister_chardev_region()
    ⑤从内核注销字符设备:cdev_del()
    • 实现文件操作集
      copy_form_user()------用户空间的数据拷贝到内核空间
  • 实操------用户程序编写
    int fd = open("dev/chrdev_test", O_RDWR);
    perror();
    系统调用
  • 实操------命令行
    cat proc/devices
    //手动创建设备文件
    mknod /dev/chrdevtest c 主设备号 此设备号