我一直在尝试编写一个简单的设备驱动程序,我应该在其中以编程方式获取供应商 ID 和产品 ID。浏览了几乎所有必要的头文件后,我得出一个结论,我可以通过一个结构访问USBstruct usb_device{}
设备的供应商 ID、产品 ID 和制造商详细信息:其中有一个成员struct usb_device_descriptor{}
. 这个嵌套结构有idVendor, idProduct
andiManufacturer
和一些其他成员。
但不知何故,由于某种原因,我无法访问这些成员,所以当我dmesg
在插入模块后执行 a 时,它会打印一些垃圾值。我很高兴收到帮助或提示或任何回应。以下是我到目前为止编写的代码:
PS:已经制作了必要的夹杂物。
浏览了几乎所有必要的头文件后,我知道我可以通过一个结构访问 USB 设备的供应商 ID、产品 ID 和制造商详细信息:struct usb_device{}
其中有一个成员struct usb_device_descriptor{}
. 这个嵌套结构有idVendor, idProduct
andiManufacturer
和一些其他成员。
//*******************************************
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");