浅析ttyUSB驱动usb_serial_driver-ch341
sudo insmod /lib/modules/2.6.22-14-generic/kernel/drivers/usb/serial/usbserial.ko vendor=0x8086 product=0xd001
安装之后可以通过ttyUSBx与任何usb设备进行数据传输,但是如果usb设备端接收pc下发的数据速度跟不上,比如设备端可能需要处理pc下发的数据用掉一段时间,这时tty->driver->write(tty, b, nr);可能返回0,也就是在执行usb_serial_generic_write()函数时,因为port->write_urb_busy = 1;发送正繁忙,进而会执行schedule让出cpu,虽然使用usbserial.ko模块可以与任何usb设备进行通信,但是当进行大量数据传输时,速度并不乐观,下面会做一个粗略的分析,找到了速度慢的原因,和一个保守的解决方案[gliethttp_20080526]。
usb_register(&ch341_driver)->含有如下两行语句,
drvwrap.driver.bus = &usb_bus_type;
drvwrap.driver.probe = usb_probe_interface;
usb总线发现硬件之后,会在恰当的时候调用__driver_attach()函数,__driver_attach()会调用usb_bus_type.match(),对于usb设备一定返回成功,
然后执行really_probe(dev, drv);暂时将dev->driver = drv;之后执行
device_driver