• 字符设备驱动[深入]:linux cdev详解


    linux cdev详解  http://blog.chinaunix.net/uid-24517893-id-161446.html

    用cdev_add添加字符设备驱动:

    //linux2.6中用cdev_add添加字符设备驱动
    //传统的是直接使用register_chrdev
    //新的方式,驱动初始化写起来要繁琐一点,但是好处是能够根据需要控制cdev_add的设备数量,且主设备号不再完全受256个的限制。详情可以参考2.6的内核代码linux/fs/char_dev.c,以及上面引用的文章。
    
    static struct cdev *leds_cdev ;
    static int leds_major = xx ;// 
    static int __init s3c24xx_leds_init()
    {
        dev_t devno = MKDEV(leds_major , 0);
        leds_cdev = (LEDS_DEV_ST*)kmalloc(sizeof(LEDS_DEV_ST),GFP_KERNEL) ;
        /*申请设备号,当xxx_major不为0时,表示静态指定;当为0时,表示动态申请*/
        if(leds_major){
            ret = register_chrdev_region(devno , LEDS_DEV_COUNT , LEDS_DEV_NAME); //register_chrdev_region若成功,返回值0
        }else{
            ret = alloc_chrdev_region(&devno, LEDS_BASE_MINOR, LEDS_DEV_COUNT, LEDS_DEV_NAME);
            leds_major = MAJOR(devno);
        }
        
        //初始化并添加cdev结构体
        cdev_init(leds_cdev , &s3c24xx_leds_fops );
        leds_cdev->owner = THIS_MODULE ;
        leds_cdev->ops = &s3c24xx_leds_fops;
        ret = cdev_add(leds_cdev , devno , LEDS_DEV_COUNT);
        
        //class_create动态创建设备的逻辑类,并完成部分字段的初始化,然后将其添加到内核中。
        //    创建的逻辑类位于 /sys/class/。
        leds_class = class_create(THIS_MODULE, "leds_class"); // /sys/class/下的类名
        
        for (minor = 0; minor < 4 ; minor++){
            leds_class_devs[minor] = class_device_create(leds_class, 
                                                         NULL, 
                                                         MKDEV(leds_major, minor), 
                                                         NULL, 
                                                         (minor==0)?"leds":"led%d", minor);
       }
       
       //为简化逻辑,出错处理代码略
    }
  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/mylinux/p/5100603.html
Copyright © 2020-2023  润新知