USB控制器初始化 Linux,USB控制器的初始化和枚举

chinaunix网友2006-06-14 20:44

我的开发板上的USB只能部分识别,高手能帮忙解决吗?

正确的打印信息如下: (前面有"!!!"的是我另外加上的打印信息,主要是在core/hub.c中的函数中)

# !!! state 5 ports 4 chg 0000 evt 0010

!!! connect_change =0

!!! connect_change =0

!!! connect_change =0

!!! connect_change =0

!!! (1) hub_port_reset(hub, port1, udev, delay)=-134

!!! in hub_event, list_empty(&hub_event_list)!=0

!!! state 5 ports 2 chg 0000 evt 0004

!!! connect_change =0

!!! connect_change =0

!!! (1) hub_port_reset(hub, port1, udev, delay)=0

usb 3-2: new full speed USB device using ohci_hcd and address 2

!!! (2)hub_port_reset(hub, port1, udev, delay)=0

usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE)=18

udev->descriptor.bMaxPacketSize0=8

udev->descriptor.bLength=12

udev->descriptor.bDescriptorType=1

udev->descriptor.bcdUSB=110

udev->descriptor.bDeviceClass=0

udev->descriptor.bDeviceSubClass=0

udev->descriptor.idVendor=dd8

udev->descriptor.idProduct=1003

udev->descriptor.bcdDevice=200

udev->descriptor.iManufacturer=1

udev->descriptor.iProduct=2

udev->descriptor.iSerialNumber=0

udev->descriptor.bNumConfigurations=1

!!! new device strings: Mfr=1, Product=2, SerialNumber=0

!!! begin to usb_device_match()

!!! begin to usb_device_match()

!!! begin to usb_device_match()

!!! begin to usb_device_match()

!!! begin to usb_probe_interface

scsi2 : SCSI emulation for USB Mass Storage devices

!!! hub_port_connect_change return

!!! state 5 ports 2 chg 0000 evt 0004

!!! connect_change =0

!!! connect_change =0

!!! in hub_event, list_empty(&hub_event_list)!=0

!!! in hub_thread() ,after hub_event,begin wait_event_interruptible !

Vendor: Model: Rev:

Type: Direct-Access ANSI SCSI revision: 02

SCSI device sda: 62048 512-byte hdwr sectors (32 MB)

sda: assuming drive cache: write through

SCSI device sda: 62048 512-byte hdwr sectors (32 MB)

sda: assuming drive cache: write through

sda: sda1

Attached scsi disk sda at scsi2, channel 0, id 0, lun 0

Attached scsi generic sg0 at scsi2, channel 0, id 0, lun 0, type 0

不能识别的USB 的打印信息如下:

# !!! state 5 ports 4 chg 0000 evt 0010

!!! connect_change =0

!!! connect_change =0

!!! connect_change =0

!!! connect_change =0

!!! (1) hub_port_reset(hub, port1, udev, delay)=-134

!!! in hub_event, list_empty(&hub_event_list)!=0

!!! state 5 ports 2 chg 0000 evt 0004

!!! connect_change =0

!!! connect_change =0

!!! (1) hub_port_reset(hub, port1, udev, delay)=0

usb 3-2: new full speed USB device using ohci_hcd and address 3

!!! (2)hub_port_reset(hub, port1, udev, delay)=0

usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE)=18

udev->descriptor.bMaxPacketSize0=64

udev->descriptor.bLength=12

udev->descriptor.bDescriptorType=1

udev->descriptor.bcdUSB=110

udev->descriptor.bDeviceClass=0

udev->descriptor.bDeviceSubClass=0

udev->descriptor.idVendor=204

udev->descriptor.idProduct=6025

udev->descriptor.bcdDevice=100

udev->descriptor.iManufacturer=0

udev->descriptor.iProduct=0

udev->descriptor.iSerialNumber=0

udev->descriptor.bNumConfigurations=1

!!! new device strings: Mfr=0, Product=0, SerialNumber=0

!!! begin to usb_device_match()

!!! begin to usb_device_match()

!!! begin to usb_device_match()

!!! begin to usb_device_match()

!!! begin to usb_probe_interface

scsi3 : SCSI emulation for USB Mass Storage devices

!!! hub_port_connect_change return

!!! state 5 ports 2 chg 0000 evt 0004

!!! connect_change =0

!!! connect_change =0

!!! in hub_event, list_empty(&hub_event_list)!=0

!!! in hub_thread() ,after hub_event,begin wait_event_interruptible !

/******************这里要等待一段时间************************/

!!! (1) hub_port_reset(hub, port1, udev, delay)=0

usb 3-2: reset full speed USB device using ohci_hcd and address 3

usb 3-2: scsi_eh_3 timed out on ep0in

!!! (2)hub_port_reset(hub, port1, udev, delay)=0

usb 3-2: device descriptor read/64, error -145

usb 3-2: scsi_eh_3 timed out on ep0in

!!! (2)hub_port_reset(hub, port1, udev, delay)=0

usb 3-2: device descriptor read/64, error -145

!!! state 5 ports 2 chg 0000 evt 0004

!!! connect_change =0

!!! connect_change =0

!!! in hub_event, list_empty(&hub_event_list)!=0

.........................以下省略

初看好象前面都是一样的,直到执行函数wait_event_interruptible(khubd_wait, !list_empty(&hub_event_list))的时候,出现问题,但我不知道为什么会出现这样的问题.有高手知道吗??

下面是/usb/core/hub.c中的线程函数:

static int hub_thread(void *__unused)

{

/*

* This thread doesn't need any user-level access,

* so get rid of all our resources

*/

daemonize("khubd");

allow_signal(SIGKILL);

/* Send me a signal to get me die (for debugging) */

do {

hub_events();

wait_event_interruptible(khubd_wait, !list_empty(&hub_event_list));

try_to_freeze(PF_FREEZE);

} while (!signal_pending(current));

pr_debug ("%s: khubd exiting\n", usbcore_name);

complete_and_exit(&khubd_exited, 0);

}

我都快分析了一周了,没解决!

求高手,帮忙分析一下!