ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年9月14日 星期五

open fail on the 2nd pl2303 cable

接兩個 pl2303,第二條 (ttyUSB1) open 時會有 error。

猜是 kernel 的問題。

看一下,10.4 的 kernel 是2.6.35.3
我把 driver/usb/serial/ 下有用到的 source 都改為 linux-2.6.30.y 的版本
還有 include/linux/usb/serial.h 和一些source 要加上 include slab.h
後,還是一樣不OK。

有一篇說是因為 pl2303 是 1.1,接在 2.0 的 hub/port 上,interrupt 的時間比較長。
沒辦法 match 2.0 的 spec。

所以街一個 1.1 的 hub 再接 pl2303 就可以。

有一篇甚至用 company command echo 1 > ....ehci/company 就可以work!

另一篇有說改 pl2303 用的 interrupt_in_urb 的 structure,把 interrupt 從 1 改 32 就可以,,
這個 interrupt_in_urb 的 structure 好像是在 usb-serial.c 中,,,

所以去修改一下 usb-serial,把 bInterval 增加一下:

在 usb_serial_probe 中..
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 3a38054..3ebe5d0 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -1005,7 +1005,7 @@ int usb_serial_probe(struct usb_interface *interface, endpoint->bEndpointAddress), port->interrupt_in_buffer, buffer_size, serial->type->read_int_callback, port, - endpoint->bInterval); + endpoint->bInterval+2); } } else if (num_interrupt_in) { dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");

沒有留言:

標籤

網誌存檔