【问题标题】:struct usb_device_id does not contain USB device informationstruct usb_device_id 不包含 USB 设备信息
【发布时间】:2016-04-21 08:21:45
【问题描述】:

我是 Linux 内核的新手,目前正在学习 USB 设备驱动程序。 我写了一个简单的带有探测回调和断开回调函数的 USB 驱动程序。

在探测回调中,我尝试显示传递给它的 struct usb_device_id 参数的值。问题是结构变量显示产品 id 和供应商 id 为 0。

这是什么原因?我还好吗?

驱动的代码sn-ps是

#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/usb.h>

int probe_callback(struct usb_interface *intf, const struct usb_device_id *id);
void disconnect_callback(struct usb_interface *intf);

struct usb_device_id usb_ids[]={
    {.driver_info=42},
    {}
};

struct usb_driver USB_DRIVER={
    .name="NEW USB",
    .id_table=usb_ids,
    .probe=probe_callback,
    .disconnect=disconnect_callback
};

//PROBLEM IS IN THE FUNCTION BELOW .....................

int probe_callback(struct usb_interface *intf, const struct usb_device_id *id)
{
    printk(KERN_ALERT "probe callback\n");
    __u16 vendor_id=id->idVendor;
    __u16 product_id=id->idProduct;
    printk("product id : %x vendor id : %x\n", product_id, vendor_id);
    return 0;
}

//..........................

void disconnect_callback(struct usb_interface *intf)
{
    printk(KERN_ALERT "disconnect callback\n");
}

static int start(void)
{
    printk(KERN_ALERT "module registered\n");
    int result;
    result=usb_register(&USB_DRIVER);
    if(result)
    {
            printk("error in registering usb driver...Error code = %d\n", result);
    }
    return result;
}

static void stop(void)
{
    printk(KERN_ALERT "module unregistered\n");
    usb_deregister(&USB_DRIVER);
}

module_init(start);  
module_exit(stop);

我执行 dmesg 时得到的日志是

[ 1539.714265] probe callback
[ 1539.714277] product id : 0 vendor id : 0

提前感谢您的帮助

【问题讨论】:

    标签: c linux linux-kernel operating-system linux-device-driver


    【解决方案1】:

    您的 usb_id 表不包含供应商和产品 ID。传递给probe_callbackid 指针指向与被探测设备匹配的usb_id 元素。

    您需要正确填写usb_id 表的元素以匹配您感兴趣的设备,例如使用USB_DEVICE(vend, prod) 宏。

    【讨论】:

    • 非常感谢....但是您能否建议我的驱动程序如何自动知道 USB 设备信息而无需程序员在 USB id 表中指定
    • @DebeshMohanty 那将是一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 2014-12-30
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多