基于configfs的usb gadget驱动分析

今天我们将以usb gadget驱动之hid为例,分析linux 最新内核的usb gadget驱动框架。

/kernel/drivers/usb/gadget/function/f_hid.c

DECLARE_USB_FUNCTION_INIT(hid, hidg_alloc_inst, hidg_alloc);

对这个宏进行展开

这里我直接将展开后的结果展示出来

    static struct usb_function_driver  hidusb_func = {        
        .name = "hid"                
        .mod  = THIS_MODULE,                    
        .alloc_inst = hidg_alloc_inst,                
        .alloc_func =hidg_alloc,                
    };                                
    MODULE_ALIAS("usbfunc:"__stringify(_name));

    static int __inithidmod_init(void)            
    {                                
        return usb_function_register(&hidusb_func);    
    }                                
    static void __exithidmod_exit(void)            
    {                                
        usb_function_unregister(hidusb_func);        
    }                                
    module_init(hidmod_init);                    
    module_exit(hidmod_exit)

展开后即看到我们所熟悉的驱动模型

usb_function_register(&hidusb_func);

这个注册函数,只是把usb_function_driver加入func_list链表

我们接着看下,在哪会去遍历这个链表

try_get_usb_function_instance

这个函数会遍历这个链表,既然有遍历,就会比较,它把传进来的name与usb_function_driver的name进行比较

然后匹配成功后,调用usb_function_driver下的hidg_alloc来获取一个struct usb_function_instance,我们暂且不往上追,先来分析这个usb_function_instance是什么,怎么分配?

回到/kernel/drivers/usb/gadget/function/f_hid.c

找到hidg_alloc_inst函数

config_group_init_type_name(&opts->func_inst.group, "", &hid_func_type);

唯一我们真正关心的函数

关于configfs,这里不做介绍,大家可以网上查阅资料

要分析这个函数,接下来我们就要分析/kernel/drivers/usb/gadget/configfs.c

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值