Cyberman.Wu 发表于 2009-07-28 15:33

USB Driver和USB Serial Device之间的关联

今天想在Linux下使用电信的3G上网卡,于是安装中兴的驱动。这里有篇参考文章:
http://forum.ubuntu.org.cn/viewtopic.php?f=116&t=213843

按里面说法,580驱动可以直接用于560。拿源代码做了一些修改,最后能在RHEL5上编译加载了,但系统中没有/dev/ttyUSB0。先做了个对比分析,结果发现插入时它主要是里面自带的存储卡上线生成/dev下的设备,没看到其它设备;而驱动的probe函数也没有被调用到。

我想驱动和设备关联,无外乎类似于PCI的(Vendor, Product)(没做过USB驱动)或驱动名称(以前做过一个嵌入式的HPI是这样的)对应吧。先查了一下(Vendor, Product):
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 004: ID 03f0:0024 Hewlett-Packard
Bus 004 Device 001: ID 0000:0000
Bus 002 Device 002: ID 046d:c018 Logitech, Inc.
Bus 002 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 003 Device 006: ID 19d2:fff5
Bus 003 Device 001: ID 0000:0000

通过拔插入上网卡可以看出就是红色的项,而且它的iVendor刚好是代码中定义的zte_VENDOR_ID,0xfff5在代码中的zte_ids[]中不存在,不知道是不是电信专用的有些特别。但我加了一条:
   { USB_DEVICE_AND_INTERFACE_INFO(zte_VENDOR_ID, 0xfff5, 0xff, 0xff, 0xff) },

发现Probe函数还是不被调用(里面插了打印的;USB_DEVICE_AND_INTERFACE_INFO是我为了方便把新版本的宏直接抄过来了)。后来对了一下发现zte_driver中的name是zte而zte_1port_device.driver.name是zte1,但改为一致的还是不行。实在是搞不明白了,我注册的driver可以在/sys/bus/usb/drivers/zte中找到,但没显示它绑定的设备;而注册的设备现在还不知道怎么看。初始化很简单:
static int __init zte_init(void)
{
    int retval;
    retval = usb_serial_register(&zte_1port_device);
    if (retval)
      goto failed_1port_device_register;
    retval = usb_register(&zte_driver);
    if (retval)
      goto failed_driver_register;

    info(DRIVER_DESC ": " DRIVER_VERSION);

    return 0;

failed_driver_register:
    usb_serial_deregister (&zte_1port_device);
failed_1port_device_register:
    return retval;
}


info()的结果可以在dmesg输出中看到,应该说明两个注册都成功了。

[ 本帖最后由 Cyberman.Wu 于 2009-7-28 15:34 编辑 ]

Cyberman.Wu 发表于 2009-07-30 12:55

踢一脚。难道没人知道?

epegasus 发表于 2009-07-30 13:06

有源代码?我怎么没看到

Cyberman.Wu 发表于 2009-07-30 15:08

回复 #3 epegasus 的帖子

这个不是Linux自带的,所以看不到代码。附件是我修改之后的,我把它自带的预编译.ko全部删掉了,否则多占空间。

飞羽zhang 发表于 2009-07-30 16:07

那个zte_init是在哪个c文件中啊,我在2.6.29中没找到

Cyberman.Wu 发表于 2009-07-30 18:35

回复 #5 飞羽zhang 的帖子

我前面已经说过了,这个是中ZTE自己的驱动,没有集成在Linux里面,我上传的附件中有。这个是修改过的,基本上所有修改处我都加了注释。
页: [1]
查看完整版本: USB Driver和USB Serial Device之间的关联