设备驱动(三)

设备分类
  字符设备 块设备 网络设备
访问方式 顺序访问,字节为单位 随机访问,固定大小为单位访问  
设备 键盘,键盘 磁盘[扇区],FLASH[读:页,写:块]  
有无缓冲 没有  
有无设备文件 没有

设备号
dev_t devno;      //32位的整数
devno = MKDEV(major, minor);
31~20    主设备号,用于识别不同类型的设备
19~0      次设备号,用于识别相同类型的不同设备
 
创建设备节点
mknod 类型 主设备号 次设备号

查看已经申请的设备节点
查看/proc/devices

字符设备驱动制作
  1. 申请设备号
    1. 静态方式
      1. dev_t devno = MKDEV(major, minor);     
      2. register_chrdev_region(devno, 申请的数量, "设备名称");  //静态申请,可能重复导致不能申请成功
    2. 动态方式
      1. dev_t devno = 0;
      2. alloc_chrdev_region(&devno, 次设备号, 申请的数量, "设备名称");  //动态申请,第一个设备号保存在devno中,设备号连续
  2. 实现操作集合
    1. 定义struct file_operations结构体变量,并实现操作
    2. 其中owner = THIS_MODULE
  3. 注册字符设备
    1. 创建struct cdev cdev;变量, 并实例化
    2. 调用cdev_init
    3. 设置cdev.owner = THIS_MODULE;
    4. 添加到字符设备链表中,进行cdev_init,完成注册cdev_add
  4. 卸载函数中从列表中删除cdev, 释放设备号

设备驱动在内核中的结构
设备驱动(三)_第1张图片

你可能感兴趣的:(linux,设备驱动)