Kernel中Hid和Bnep的初始化

有了前面的L2CAP,RFCOMM的初始化分析,再来分析HidBnep的代码就轻松很多了。基本来说,这两个protol没有太多的新意,直接看代码就可以看出来了。

[cpp]  view plain copy
  1. static int __init hidp_init(void)  
  2. {  
  3.     int ret;  
  4.     BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);  
  5. //注册了一个hid的driver,hidp_driver见下面  
  6.     //其实就是把该driver加载到hid的bus总线上去,通过name进行区分。  
  7.     //这里的name是generic-bluetooth,后期用到我们再来具体分析  
  8.     ret = hid_register_driver(&hidp_driver);  
  9.     if (ret)  
  10.         goto err;  
  11.     //也就是在proto_list中加入了hid  
  12.     //初始化了bt_proto中的BTPROTO_HIDP的值。  
  13.     //所以总的来说没有什么好讲的  
  14.     ret = hidp_init_sockets();  
  15.     if (ret)  
  16.         goto err_drv;  
  17.   
  18.     return 0;  
  19. err_drv:  
  20.     hid_unregister_driver(&hidp_driver);  
  21. err:  
  22.     return ret;  
  23. }  
  24.   
  25. static const struct hid_device_id hidp_table[] = {  
  26.     { HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },  
  27.     { }  
  28. };  
  29. //主要就是一个name,是generiv-bluetooth  
  30. static struct hid_driver hidp_driver = {  
  31.     .name = "generic-bluetooth",  
  32.     .id_table = hidp_table,  
  33. };  

对于bnep的初始化,其实看起来也比较简单哦:

[cpp]  view plain copy
  1. static int __init bnep_init(void)  
  2. {  
  3.     char flt[50] = "";  
  4.   
  5. //根据选项,初始化flt数组  
  6. #ifdef CONFIG_BT_BNEP_PROTO_FILTER  
  7.     strcat(flt, "protocol ");  
  8. #endif  
  9.   
  10. #ifdef CONFIG_BT_BNEP_MC_FILTER  
  11.     strcat(flt, "multicast");  
  12. #endif  
  13.   
  14.     BT_INFO("BNEP (Ethernet Emulation) ver %s", VERSION);  
  15.     if (flt[0])  
  16.         BT_INFO("BNEP filters: %s", flt);  
  17. //和上面的hid是一样的,只是换了个名字而已  
  18.     bnep_sock_init();  
  19.     return 0;  
  20. }  

总的来说,这两个proto基本没有什么新的内容,权当对《kernelbluetooth的初始化》这篇文章的补充吧。至此,晓东对kernelbluetooth statck相关初始化的内容已经全部解释清楚了。大家也许对这些内容有何作用暂时还比较迷茫,不过没有关系,在后面的蓝牙各个操作中,我们会一一为大家揭晓。

你可能感兴趣的:(Kernel中Hid和Bnep的初始化)