免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7885 | 回复: 12
打印 上一主题 下一主题

[硬件及驱动] usb设备的节点名是怎么确定的? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-02 21:35 |只看该作者 |倒序浏览
本帖最后由 arm-linux-gcc 于 2014-04-02 21:45 编辑

/dev/bus/usb/里的目录名和节点名是在那里确定的呢?



我看到usb_alloc_dev里面,调用了dev_set_name来设置kobject->name
dev_set_name(&dev->dev, "%d-%s", bus->busnum, dev->devpath);

然后在usb_new_device里面看到这个device的设备号也被设置为了USB_DEVICE_MAJOR(189)

我也看到devtmpfs里面确实是用的usb_alloc_dev里面设置的那个name来创建的节点

但是代码中看到的设备名和实际看到的完全不一样,连格式都不同了




root@luffy:/# ls /dev/bus/usb/* -l
/dev/bus/usb/001:
总用量 0
crw-rw-r-- 1 root root 189, 0  4月  2 18:32 001

/dev/bus/usb/002:
总用量 0
crw-rw-r-- 1 root root 189, 128  4月  2 18:32 001
crw-rw-r-- 1 root root 189, 129  4月  2 18:32 002
crw-rw-r-- 1 root root 189, 130  4月  2 18:32 003
root@luffy:/#


我就搞不懂了,这些001 002的名字是从哪里来的?
PS:我没在udev的rule里面看到有相关的设置


论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
2 [报告]
发表于 2014-04-02 22:20 |只看该作者
回复 1# arm-linux-gcc


    dev_set_name(&dev->dev, "%d-%s", bus->busnum, dev->devpath);` 这个设置的kobject name主要还是/sys/device/*/*下面的名字.
   
    而devtmpfs的设备节点名字应该是device_create()-->device_register()-->device_add()--->devtmpfs_create_node()--->device_get_devnode()这个函数所创建.
    创建的规则:1)如果定义了设备类型的device->type->devnode方法,根据这个方法提供的指定名字命名
                     2)如果定义了类的device->class->devnode方法,则根据这个方法的提供的指定名字命名
                     3)根据device->kobject的名字命名
     

    usb_alloc_dev() :
                 --->  dev->dev.type = &usb_device_type;
    usb_device_type = {

              .devnode = usb_devnode,
}
   usb_devnode(dev, ...)
{...
    return kasprintf(..., "bus/usb/%3d/%3d", usb_dev->bus->busnum, usb_dev->devum);
}

   差不多是这样的一个思路.

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
3 [报告]
发表于 2014-04-02 22:22 |只看该作者
回复 1# arm-linux-gcc


kobject的名字应该是在sysfs中的名字吧,设备节点的名字不是这个吧!

设备节点的名字是在 device_get_devnode()中决定的,通过 device_type->devnode()决定,如果这个没有,那么就是 class->devnode()决定。

所以 usb设备的设备节点名应该是由 usb_device_type.devnode()决定,即 usb_devnode():

static char *usb_devnode(struct device *dev,
                         umode_t *mode, kuid_t *uid, kgid_t *gid)
{
        struct usb_device *usb_dev;

        usb_dev = to_usb_device(dev);
        return kasprintf(GFP_KERNEL, "bus/usb/%03d/%03d",
                         usb_dev->bus->busnum, usb_dev->devnum);
}


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
4 [报告]
发表于 2014-04-02 22:32 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-04-02 22:52 编辑

回复 3# asuka2001
回复 2# kiongf

哦,谢谢,怪不得
platform类型的设备没有type->devnode,所以device_create时看到的设备节点名字就是参数
而usb的有type->devnode,获得名字的方法就不再是kobj->name了

   

论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
5 [报告]
发表于 2014-04-02 22:44 |只看该作者
回复 4# arm-linux-gcc


    platform类型的设备具体是有哪一些设备。这个设备模型的代码看起来怪怪的..没看到枚举设备的过程..

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 2014-04-02 22:51 |只看该作者
回复 5# kiongf


    这种是soc的片上设备,比如axi ahb apb总线上的设备,这种设备没有枚举过程,地址是写死的

论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
7 [报告]
发表于 2014-04-02 23:03 |只看该作者
回复 6# arm-linux-gcc


    所以这类型的设备的IRQ,Resource这些都是固定的,不变的咯。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2014-04-02 23:06 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-04-02 23:10 编辑

回复 7# kiongf


    对,地址和中断号都是设计芯片时就定死了
ARM核的芯片,片上外设上全是这种的,因为AMBA总线的设计就是这样的,不支持PCI那样的枚举

论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
9 [报告]
发表于 2014-04-02 23:13 |只看该作者
回复 8# arm-linux-gcc


    了解。谢谢了。

论坛徽章:
0
10 [报告]
发表于 2015-09-01 22:30 |只看该作者
如果要使用USB设备,怎么获取USB节点啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP