四、usb设备注册

一.usb设备驱动注册

static inline int usb_register(struct usb_driver *driver)
{
	return usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
}

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;	//usb接口设备
	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;	//设置probe方法
	new_driver->drvwrap.driver.remove = usb_unbind_interface;	//设置remove方法
	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)
		goto out;
	usbfs_update_special();
	retval = usb_create_newid_file(new_driver);
	if (retval)
		goto out_newid;
	retval = usb_create_removeid_file(new_driver);
	if (retval)
		goto out_removeid;
	pr_info("%s: registered new interface driver %s\n",usbcore_name, new_driver->name);
out:
	return retval;
out_removeid:
	usb_remove_newid_file(new_driver);
out_newid:
	driver_unregister(&new_driver->drvwrap.driver);
	printk(KERN_ERR "%s: error %d registering interface driver %s\n",usbcore_name, retval, new_driver->name);
	goto out;
}

注册设备驱动后会调用总线的match方法

static int usb_device_match(struct device *dev, struct device_driver *drv)
{
	if (is_usb_device(dev)) {	//usb设备
		if (!is_usb_device_driver(drv))
			return 0;
		return 1;
	} else if (is_usb_interface(dev)) {	//usb接口
		struct usb_interface *intf;
		struct usb_driver *usb_drv;
		const struct usb_device_id *id;
		if (is_usb_device_driver(drv))
			return 0;
		intf = to_usb_interface(dev);	//获取usb接口结构体
		usb_drv = to_usb_driver(drv);	//获取usb_driver
		id &#
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值