在代码里加打印逐步查找故障,发现函数hub_port_reset()返回值 -107 (-ENOTCONN) 继续查找,发现函数usb_control_msg()返回值 -19 (-ENODEV) 再继续,最终找到了这个函数里面:musb_urb_enqueue(),失败原因是 musb->is_active 为零,见下面红色部分。 至此没法再跟踪下去了,请看一下这是怎么回事。 static int ...
does anyone know why the usb_control_msg always return -EPIPE ?? here is my usage - status = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), HID_REQ_SET_REPORT, USB_DIR_OUT | USB_RECIP_INTERFACE | USB_TYPE_VENDOR,
如果函数调用成功,返回值为0;否则,返回一个负的错误值。如果成功,actual_length参数包含从该消息发送或者接收的字节数。 不能在一个中断上下文中或者在持有自旋锁的情况下调用usb_bulk_msg函数。 usb_control_msg,允许驱动程序发送和接收USB控制消息。 int usb_control_msg(struct usb_device *dev, unsigned int p...
这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的...
问1. 既然还没有"驱动程序",为何能知道是"android phone" 答1. windows里已经有了USB的总线驱动...
usb_control_msg是没有用到urb的在USB中简单进行发送和接收的一种机制,用于少量的数据通信。原型为: 程序代码 linux+v2.6.35/drivers/usb/core/message.c 104/** 105 * usb_control_msg - Builds a control urb, sends it off and waits for completion ...
usb_control_msg() structusb_ctrlrequest |---| | __u8 bRequestType-| | __u8 bRequest-| | __le16-wValue-| | __le16-wIndex-| | __le16-wLength-| |---| 这个数据结构就是SETUP信包的内容,而缓冲区的内容,就是随后的数据信包的内容。 --- bRequestType D7 数据的传输方向:0表示...
status = usb_control_msg_send(dev, 0, F81232_REGISTER_REQUEST, F81232_SET_REGISTER, reg, 0, &val, sizeof(val), USB_CTRL_SET_TIMEOUT, GFP_KERNEL); if (status) { dev_err(&port->dev, "%s failed status: %d\n", __func__, status); ...
int usb_control_msg(struct usb_device* usb_dev, unsigned int pipe, __u8 request, __u8 request_type, __u16 value, __u16 index, void* data, int len, __u16 size, int timeout); 调用这个函数的进程,中间会被休眠,并被唤醒,当函数返回时,如果返回值为0,则调用成功,否则,返回一个负数。