root hub 接口device和接口driver的注册(六)

本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记

在介绍root hub usb设备和驱动的匹配时,usb_set_configuration函数会从usb设备描述符里面知道有多少个配置,多少个接口,多少个设置,多少个端点,然后会为每一个接口添加一个设备。

这里看一下root hub的接口driver的注册。

在usb_init函数初始化时:

static int __init usb_init(void)
{
    ……
    retval = usb_hub_init();
}

usb_hub_init函数对hub进行初始化。

int usb_hub_init(void)
{
    if (usb_register(&hub_driver) < 0) {
        printk(KERN_ERR "%s: can't register hub driver\n",
            usbcore_name);
        return -1;
    }
    ……
}

在usb_hub_init函数里面我们调用了usb_register注册了一个driver。usb_register又调用了函数usb_register_driver。

int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
			const char *mod_name)
{
	int retval = 0;

	if (usb_disabled())
		return -ENODEV;

	new_driver->drvwrap.for_devices = 0;
	new_driver->drvwrap.driver.name = (char *) new_driver->name;
	new_driver->drvwrap.driver.bus = &usb_bus_type;
	new_driver->drvwrap.driver.probe = usb_probe_interface;
	new_driver->drvwrap.driver.remove = usb_unbind_interface;
	new_driver->drvwrap.driver.owner = owner;
	new_driver->drvwrap.driver.mod_name = mod_name;
	spin_lock_init(&new_driver->dynids.lock);
	INIT_LIST_HEAD(&new_driver->dynids.list);

	retval = driver_register(&new_driver->drvwrap.driver);

	if (!retval) {
		pr_info("%s: registered new interface driver %s\n",
			usbcore_name, new_driver->name);
		usbfs_update_special();
		usb_create_newid_file(new_driver);
	} else {
		printk(KERN_ERR "%s: error %d registering interface "
			"	driver %s\n",
			usbcore_name, retval, new_driver->name);
	}

	return retval;
}

new_driver->drvwrap.for_devices = 0说明这个driver不是给usb设备使用的,而是给usb接口设备使用的。后面会根据这个变量判断是不是给usb设备使用的driver,调用的函数是is_usb_device_driver

static inline int is_usb_device_driver(struct device_driver *drv)
{
	return container_of(drv, struct usbdrv_wrap, driver)->
			for_devices;
}

注册这个driver用的函数是driver_register,传参数device_driver。传入的参数driver的总线是usb_bus_type,probe函数是usb_probe_interface。刚好前面的接口设备注册的时候总线也是usb_bus_type。

文章参考:https://blog.csdn.net/fudan_abc/article/category/325189

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值