以编程方式获取Linux平台上USB设备的供应商ID,产品ID

以编程方式获取Linux平台上USB设备的供应商ID,产品ID,第1张

概述我一直在尝试编写一个简单的设备驱动程序,我在其中以编程方式获取供应商ID和产品ID.经过几乎所有必要的头文件后,我得出结论,我可以通过以下结构访问 USB设备的供应商ID,产品ID和制造商详细信息:struct usb_device {},其中包含成员结构usb_device_descriptor {} .这个嵌套结构有idVendor,idProduct和iManufacturer以及其他一些成 我一直在尝试编写一个简单的设备驱动程序,我在其中以编程方式获取供应商ID和产品ID.经过几乎所有必要的头文件后,我得出结论,我可以通过以下结构访问 USB设备的供应商ID,产品ID和制造商详细信息:struct usb_device {},其中包含成员结构usb_device_descriptor {} .这个嵌套结构有IDvendor,IDProduct和iManufacturer以及其他一些成员.

但不知何故,由于某种原因,我无法访问这些成员,所以当我插入我的模块后执行dmesg时,它会打印一些垃圾值.我很乐意收到帮助或提示或任何回复.以下是我到目前为止编写的代码:

P.S.:已经制作了必要的夹杂物.

经过几乎所有必要的头文件后,我知道我可以通过以下结构访问USB设备的供应商ID,其中包含成员结构usb_device_descriptor {}.这个嵌套结构有IDvendor,IDProduct和iManufacturer以及其他一些成员.

//*******************************************struct usb_device udev;struct usb_bus *bus;ssize_t ret;static int __init usb_fun_init(voID){    int result;    __le16 IDvendor = 0;    __le16 IDProduct = 0;    __u8 iManufacturer = 0;    printk(KERN_INFO "\n************************************ in init\n");    List_for_each_entry(bus,&usb_bus_List,bus_List){    printk(KERN_INFO "***************** Begins ****************");    printk(KERN_INFO "\nvendor ID = %d",udev.descriptor.IDvendor);    printk(KERN_INFO "\nProduct ID = %d",udev.descriptor.IDProduct);    printk(KERN_INFO "\nManufacturer = %s",udev.descriptor.iManufacturer);    return 0;}static int __exit usb_fun_exit(voID){    printk(KERN_INFO "\n************************************ in exit\n");}module_init(usb_fun_init);module_exit(usb_fun_exit);MODulE_liCENSE("GPL");
解决方法 我想,上面是你的内核模块的完整代码.无论如何,您使用的是正确的结构和供应商ID,设备描述符中将提供设备ID. Refer有关描述符的更多详细信息.

我建议你参考内核代码here.

更新1:

以下程序将为您提供有关系统中可用的HUB的信息. 3.2.0内核版本不支持usb_hub_for_each_child宏,但最新3.7.x版本支持.

usb_bus_List在#include< linux / usb / hcd.h>中声明.

#include <linux/module.h>#include <linux/kernel.h>#include <linux/usb.h>#include <linux/usb/hcd.h>#include <linux/List.h>MODulE_liCENSE("GPL");int ourinitmodule(voID){int chix = 0;struct usb_device *dev,*childdev = NulL;struct usb_bus *bus = NulL;List_for_each_entry(bus,bus_List){   printk("\n USB Bus : %d",bus->busnum);   dev = bus->root_hub;   printk("\n vendor ID:%x,Product ID:%x\n",dev->descriptor.IDvendor,dev->descriptor.IDProduct);#if 0 //usb_hub_for_each_child macro not supported in 3.2.0,so trying with 3.7.6.   usb_hub_for_each_child(dev,chix,childdev)   {        if(childdev)        {           printk("\n vendor ID:%x,childdev->descriptor.IDvendor,childdev->descriptor.IDProduct);        }   }#endif}    printk(KERN_ALERT "\n Hello Jay,Welcome to sample application.... \n");return 0;}voID ourcleanupmodule(voID){printk(KERN_ALERT "\n Hello Jay,Thanks....Exiting Application. \n");return;}module_init(ourinitmodule);module_exit(ourcleanupmodule);

输出是

USB Bus :4vendor ID:1d6B,Product ID:3USB Bus :3vendor ID:1d6B,Product ID:2USB Bus :2vendor ID:1d6B,Product ID:2USB Bus :1vendor ID:1d6B,Product ID:2
总结

以上是内存溢出为你收集整理的以编程方式获取Linux平台上USB设备的供应商ID,产品ID全部内容,希望文章能够帮你解决以编程方式获取Linux平台上USB设备的供应商ID,产品ID所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存