zoukankan      html  css  js  c++  java
  • 【整理】--【字符设备】分配设备号register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()

    (1)

    分配设备编号,注册设备与注销设备的函数均在fs.h中声明,如下:

    extern int register_chrdev_region(dev_t,unsigned int,const char*);表示静态的申请和注册设备号

    extern int alloc_chrdev_region(dev_t,unsigned int,const char*);表示动态的申请和注册设备号

    extern int register_chrdev(unsigned int,const char*,struct file_operations*);表示int为0时动态注册,非零静态注册。

    在linux2.6版本里面,register_chrdev_region是register_chrdev的升级版。

    (2)

    使用register_chrdev_region函数时,首先要定义一个dev_t变量来作为一个设备号:

        dev_t dev_num;

    如果想静态申请,那么

        dev_num=MKDEV(major_no,0);    //major_no表示设备号的变量,然后便可以使用  //比如 major_no  为 248

        register_chrdev_region(dev_num,2,"my_dev");    //第二个参数表示注册的设备数量,第三个表示驱动名

    如果要动态的注册设备号,使用下面:

        alloc_chrdev_region(&dev_num,0,2,"memdev");  // 次设备号从0开始,注册两个设备,设备名为memdev。

    (3)

    前面只是注册了设备号,后面要向内核添加设备了;

        struct cdev devno;

        cdev_init(&devno,&file_operations) // 初始化设备

        devno.owner=THIS_MODULE;

        devno.ops=&mem_fops

    对于已经知道了主设备号,就用

        cdev_add(&devno,dev_num,MEMDEV_NR_DEVS);来添加设备

    如果是动态申请的设备号,就用

        cdev_add(&devno,MKDEV(mem_major,0),MEMDEV_NR_DEVS);

    由此可见,使用register_chrdev_region()比register_chrdev()多了一步,就是想内核注册添加cdev设备的步骤。

  • 相关阅读:
    使用mybatis如果类属性名和数据库中的属性名不一样取值就会为null
    学习mybatis时出现了java.io.IOException: Could not find resource EmployeeMapper.xml
    配置mybatis-config.xml出现过很诡异的现象
    mybatis学习(一)
    报错cannot be cast to javassist.util.proxy.Proxy
    列车调度
    三角形
    土豪聪要请客(stol)
    Jams倒酒(pour)
    Data
  • 原文地址:https://www.cnblogs.com/apolloenterprise/p/4662989.html
Copyright © 2011-2022 走看看