博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符设备驱动[深入]:linux cdev详解
阅读量:6794 次
发布时间:2019-06-26

本文共 1546 字,大约阅读时间需要 5 分钟。

  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);   }      //为简化逻辑,出错处理代码略}

 

转载地址:http://voego.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Python3.5修炼手册13
查看>>
我的友情链接
查看>>
hdfs 添加DataNode
查看>>
linux下安装DB2,然后python连接DB2
查看>>
解决 Eclipse Android studio adb 无法打开的问题
查看>>
我的友情链接
查看>>
MyBatis进行insert操作时不能将数据插入到数据库
查看>>
系统日志里面出现:错误应用程序 mysqld-nt.exe,版本 0.0.0.0
查看>>
move Java to Java 7
查看>>
php5.6版本安装出错 make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
查看>>
修改忘记的Windows 2008 R2 sp1域管理员密码
查看>>
Linux shell脚本的字符串截取
查看>>
把一个数的各个位输出(运用递归)
查看>>
Linu下误删文件恢复
查看>>
shell计算器小脚本
查看>>
JavaScript提升解析
查看>>
eclipse常用快捷键
查看>>
linux文件系统文件含义
查看>>
配置×××服务器使用L2TP/IPSEC协议
查看>>