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 编辑 ] 踢一脚。难道没人知道? 有源代码?我怎么没看到
回复 #3 epegasus 的帖子
这个不是Linux自带的,所以看不到代码。附件是我修改之后的,我把它自带的预编译.ko全部删掉了,否则多占空间。 那个zte_init是在哪个c文件中啊,我在2.6.29中没找到回复 #5 飞羽zhang 的帖子
我前面已经说过了,这个是中ZTE自己的驱动,没有集成在Linux里面,我上传的附件中有。这个是修改过的,基本上所有修改处我都加了注释。
页:
[1]