linux 字符设备驱动

       字符设备驱动有两个重要的数据结构1.dev_t  用于描述设备的主从设备号 2.struct   cdev用于描述字符设备的结构体

       1.在内核中,dev_t裂隙用来保存设备的编号——包括主设备号和次设备号。dev_t是一个32位的结构体,其中12位是一个主设备号,20位是一个次设备号。我同可以从dev_t中获取主从设备号:

      MAJOR(dev_t  dev);

      MINOR(dev_t  dev);

     相反,如果要将主从设备号转换成dev_t类型,则

     MKDEV(int  major, int  minor);

     2.分配和释放设备编号

     在建立一个字符设备之前,我们首先应该获取一个设备号。有两个函数可以实现

    a。int  register_chrdev_region(dev_t first, unsigned int count, char  *name)

     如果我们明确知道所需要的设备编号可以用这个函数

     first 是指分配开始的主设备号,

     count是指要连续分配的设备号个数。

     name是设备的名称

    b。int alloc_chrdev_region(dev_t * dev, unsigned int firstminor, unsigned int count, char  *name);

     这个函数是系统分配未使用的设备号。

     dev是一个输出参数,用于输出生成的设备号。

      3.用完之后应该释放这些设备号;

      void  unregistered_chrdev_region(dev_t firsr, unsigned int count)

    4,在获取到设备号之后,我们给这个设备注册一些操作函数,这些函数主要在file_operation结构中。包括读、写、打开、释放、ioctl等。

    5.申请一个cdev结构体,然后初始化,添加到系统中。

    struct  cdev  *my_dev = cdev_alloc();分配一个cdev结构体

    void  cdev_init(struct cdev  *dev, struct file_operation *fops); 初始化一个cdev结构体

    int  cdev_add(struct cdev *dev, dev_t num, unsigned int count);向系统添加一个字符设备

    6.最后用完后应该从系统中移除一个字符设备,

     void   cdev_del(struct  *dev);

    至此,一个字符设备基本生成并添加到内核中,在/proc/device中可以看到相应设备号的设备了。然后在/dev目录下建立相应的设备节点(命令 mknod  c  主设备号  次设备号)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值