关于cdev platform以及class的一点见解
来源:互联网 发布:皮卡刻字机端口设置 编辑:程序博客网 时间:2024/06/03 13:51
cdev bus and class
谨以此文纪念过往的岁月
一.前言
相信很多刚开始学习驱动的人的都会对cdev platform以及class这三者之间的关系不是很理解。本文记录本人对于此的一点见解,不对之处请指教。
二.三角关系
cdev其实是说明设备的真正所属类型,在linux中分为字符类型,块类型和网络类型,几乎所有的设备都可以分配到这三种类型之中。
bus其实是指设备的总线,说白了就是设备和驱动根据什么样的匹配方式来进行匹配。形象一点就是bus就是一条大道,而所有的driver在一边,而所有的device在大路的另一边,而bus就是将device和driver连接起来,如driver A可以驱动device A和device B,而bus就把driver和device连接起来。其实用这样的比喻并不是很确切,不过这样对于理解bus的功能会形象不少。常见的bus有usb pci i2c platform等等总线。总线只会在设备注册卸载和驱动注册卸载时才会有用。
而class则是一类设备的总和。怎么来说呢,就好像是男人和女人都属于人类一样,device A和device B 都属于class A,则创建设备节点时就可以在传入class参数是用
class A作为参数传入。
三.具体实现
以platform总线为例:
申请和注册和注销一个platform设备
globalmem_devp->dev = platform_device_alloc("globalmem",-1);
platform_device_register(globalmem_devp->dev);
platform_device_unregister(globalmem_devp->dev);
注册和卸载一个platform驱动
platform_driver_register(globalmem_devp->drv);
platform_driver_unregister(globalmem_devp->drv);
不过globalmem_devp->drv->name 应该为"globalmem",这个跟总线的匹配规则有关,platform总线采用name匹配。这里的platform设备和驱动与cdev没有半点关系。无论我的设备类型是cdev还是block的,这里是不管的,你可以把它看成独立的一部分。
以cdev为例:
比如说我想注册一个主设备和多个从设备,都是globalmem以类的,有很多人在刚开始学习例程时,以为platform设备名和我注册的cdev的设备号名是一样的,总以为这两者有什么不可告人的秘密,其实不然,这两个并没有半点关系。
注册设备号以及注册一个cdev设备。
register_chrdev_region(devno, 2, "globalmem");
int err, devno = MKDEV(globalmem_major, index);
cdev_init(&dev->cdev, &globalmem_fops);
dev->cdev.owner = THIS_MODULE;
dev->cdev.ops = &globalmem_fops;
err = cdev_add(&dev->cdev, devno, 2);
创建在/dev下的设备节点:
在这里面就涉及到设备类以及设备节点名。
device_create(globalmem_devp->cls,NULL,devno,NULL,"globalmem%d",index);
这里如何将设备节点与设备操作联系起来的就是通过devno。
创建一个设备类:
globalmem_devp->cls = class_create(THIS_MODULE,"globalT");
到此应该对上面三者关系有了比较清晰的理解,不过在注册这三者时,同时去参考/sys/下的/bus总线,/class 和/devices以及/dev这几个文件夹下面的文件,就会更好的理解了。
谨以此文纪念过往的岁月
一.前言
相信很多刚开始学习驱动的人的都会对cdev platform以及class这三者之间的关系不是很理解。本文记录本人对于此的一点见解,不对之处请指教。
二.三角关系
cdev其实是说明设备的真正所属类型,在linux中分为字符类型,块类型和网络类型,几乎所有的设备都可以分配到这三种类型之中。
bus其实是指设备的总线,说白了就是设备和驱动根据什么样的匹配方式来进行匹配。形象一点就是bus就是一条大道,而所有的driver在一边,而所有的device在大路的另一边,而bus就是将device和driver连接起来,如driver A可以驱动device A和device B,而bus就把driver和device连接起来。其实用这样的比喻并不是很确切,不过这样对于理解bus的功能会形象不少。常见的bus有usb pci i2c platform等等总线。总线只会在设备注册卸载和驱动注册卸载时才会有用。
而class则是一类设备的总和。怎么来说呢,就好像是男人和女人都属于人类一样,device A和device B 都属于class A,则创建设备节点时就可以在传入class参数是用
class A作为参数传入。
三.具体实现
以platform总线为例:
申请和注册和注销一个platform设备
globalmem_devp->dev = platform_device_alloc("globalmem",-1);
platform_device_register(globalmem_devp->dev);
platform_device_unregister(globalmem_devp->dev);
注册和卸载一个platform驱动
platform_driver_register(globalmem_devp->drv);
platform_driver_unregister(globalmem_devp->drv);
不过globalmem_devp->drv->name 应该为"globalmem",这个跟总线的匹配规则有关,platform总线采用name匹配。这里的platform设备和驱动与cdev没有半点关系。无论我的设备类型是cdev还是block的,这里是不管的,你可以把它看成独立的一部分。
以cdev为例:
比如说我想注册一个主设备和多个从设备,都是globalmem以类的,有很多人在刚开始学习例程时,以为platform设备名和我注册的cdev的设备号名是一样的,总以为这两者有什么不可告人的秘密,其实不然,这两个并没有半点关系。
注册设备号以及注册一个cdev设备。
register_chrdev_region(devno, 2, "globalmem");
int err, devno = MKDEV(globalmem_major, index);
cdev_init(&dev->cdev, &globalmem_fops);
dev->cdev.owner = THIS_MODULE;
dev->cdev.ops = &globalmem_fops;
err = cdev_add(&dev->cdev, devno, 2);
创建在/dev下的设备节点:
在这里面就涉及到设备类以及设备节点名。
device_create(globalmem_devp->cls,NULL,devno,NULL,"globalmem%d",index);
这里如何将设备节点与设备操作联系起来的就是通过devno。
创建一个设备类:
globalmem_devp->cls = class_create(THIS_MODULE,"globalT");
到此应该对上面三者关系有了比较清晰的理解,不过在注册这三者时,同时去参考/sys/下的/bus总线,/class 和/devices以及/dev这几个文件夹下面的文件,就会更好的理解了。
0
上一篇:linux bus总线
下一篇:linux cdev详解
相关热门文章
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- 现在的博客积分不会更新了吗?...
- shell怎么读取网页内容...
- ssh等待连接的超时问题...
- curl: (56) Recv failure: Con...
- CACTI 不能安装WINE,怎么办?...
给主人留下些什么吧!~~
评论热议
0 0
- 关于cdev platform以及class的一点见解
- 关于网络游戏的一点见解
- 关于hibernate的一点见解
- 关于编写程序的一点见解
- 关于对网络学习方法的一点见解
- 关于函数工作过程的一点见解
- 关于Flex Builder调试的一点见解
- 关于开发效率的一点见解
- 关于驱动的一点个人见解
- 关于Flex Builder调试的一点见解
- 关于RAM的一点小见解
- 关于handler机制的一点见解
- 关于handler机制的一点见解
- 关于阿法狗的一点个人小见解
- 关于回调函数的一点见解
- 关于sql优化的一点见解
- 关于STM32系统框架的一点见解
- THIS_MODULE的一点见解
- arm-linux-gcc 编译
- C语言符号优先级
- linux内核定时器编程
- linux 等待队列
- linux bus总线
- 关于cdev platform以及class的一点见解
- linux cdev详解
- linux bus总线
- linux class device
- linux device注册
- 学习git笔记,git,最强大的版本管理工具,没有之一。
- 模电的一些零碎问题,不定期更新
- 1.the linux device model--kobject kset
- 2.the linux device model--bus device driver
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
万科悦城房价
紫晶悦城现在多少钱
紫晶悦城售楼部
复地悦城房价
紫晶悦城价格
紫晶悦城样板间
碧桂园轻轨悦城
紫晶悦城商铺
紫晶悦城九号地
紫晶悦城红街
悦城花园二期
融侨悦城户型图
紫晶悦城二期户型图
万科金色悦城样板间
仙林悦城别墅
紫晶悦城开发商
建工悦城怎么样
仙林悦城售楼处电话
仙林悦城怎么样
万科悦城怎么样
融侨悦城 户型
水悦城怎么样
紫晶悦城近况
时代悦城怎么样
仙林悦城装修
仙林悦城地址
虹悦城 水游城
金隅悦城二手房
融侨悦城二手房
万科金色悦城二手房
仙林悦城价格
融侨悦城学区
虹悦城怎么走
紫晶悦城出租房
万科天竺悦城二手房
万科金色悦城小区
星悦城二期户型图
万科金色悦城在哪
紫晶悦城搜房网
悦成
悦然臻城