|
我的内核是2.6.11的
能识别的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))的时候,出现问题,好象是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);
}
我都快分析了一周了,没解决!
求高手,帮忙分析一下! |
|