猜是 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");
沒有留言:
張貼留言