thzhr2009 发表于 2013-07-15 17:06

USB设备无法识别

本帖最后由 thzhr2009 于 2013-07-17 16:33 编辑

板子CPU:s3c2416
linux:2.6.21
目前正在调板子的USB DEVICE驱动,现在板子加载驱动模块g_file_storage.ko成功,在加载驱动后PC也可检测到设备,但是无法识别,以下为使用抓包软件bus hound在PC上抓取到的插入板子时的数据交互过程:
21.0                                 URB    50 00 08 0000 00 00 00CONTROL TRANSFER    5us         3.3.0      2013-07-1714:52:16.004               
21                                 IRP    06 00 90 0100 00 00 00                     10us         3.4.0      2013-07-1714:52:16.004               
21.0                                 CTL    23 01 10 0003 00 00 00CLEAR FEATURE      13us         4.1.0      2013-07-1714:52:16.004usbhub      
21.0                                 URB    50 00 08 0000 00 00 00CONTROL TRANSFER228us         4.2.0      2013-07-1714:52:16.004               
21                                 IRP    06 00 90 0100 00 00 00                      3us         4.3.0      2013-07-1714:52:16.004               
21.0                                 CTL    a3 00 00 0001 00 04 00GET STATUS         58us         5.1.0      2013-07-1714:52:16.004usbhub      
21.0                              4IN   00 01 00 00               ....            304us         5.2.0      2013-07-1714:52:16.004               
21.0                                 URB    50 00 08 0000 00 00 00CONTROL TRANSFER    3us         5.3.0      2013-07-1714:52:16.004               
21                                 IRP    06 00 90 0100 00 00 00                      1us         5.4.0      2013-07-1714:52:16.004               
21.0                                 CTL    a3 00 00 0002 00 04 00GET STATUS         35us         6.1.0      2013-07-1714:52:16.004usbhub      
21.0                              4IN   00 01 00 00               ....            237us         6.2.0      2013-07-1714:52:16.004               
21.0                                 URB    50 00 08 0000 00 00 00CONTROL TRANSFER   11us         6.3.0      2013-07-1714:52:16.004               
21                                 IRP    06 00 90 0100 00 00 00                      1us         6.4.0      2013-07-1714:52:16.004               
21.0                                 CTL    a3 00 00 0003 00 04 00GET STATUS         35us         7.1.0(2)   2013-07-1714:52:16.004usbhub      
21.0                              4IN   01 01 00 00               ....            172us         7.2.0      2013-07-1714:52:16.004               
21.0                                 URB    50 00 08 0000 00 00 00CONTROL TRANSFER    4us         7.3.0      2013-07-1714:52:16.004               
21                                 IRP    06 00 90 0100 00 00 00                      9us         7.4.0      2013-07-1714:52:16.004               
21.0                                 CTL    23 03 04 0003 00 00 00   SET FEATURE       115ms         9.1.0      2013-07-1714:52:16.128usbhub      
21.0                                 URB    50 00 08 0000 00 00 00CONTROL TRANSFER204us         9.2.0      2013-07-1714:52:16.128               
21                                 IRP    06 00 90 0100 00 00 00                      3us         9.3.0      2013-07-1714:52:16.128               
21.1                              1IN   08                        .                  14ms      10.1.0      2013-07-1714:52:16.144usbhub      
21.1                                 URB    48 00 09 0000 00 00 00BULK/INT XFER       5us      10.2.0      2013-07-1714:52:16.144               
21                                 IRP    06 00 00 0100 00 00 00                      1us      10.3.0      2013-07-1714:52:16.144      
请问下是什么问题,请高手指点下。

thzhr2009 发表于 2013-07-19 10:01

目前排查到在/driver/usb/gadget/s3c-udc-hs.c中函数reconfig_usbd.c中有问题,该函数主要完成USB寄存器配置,原函数中使用__raw_writel完成寄存器配置,但加载驱动时会报段错误,将该函数置为空就可加载。排查发现时对寄存器操作应使用虚拟地址,原来使用物理地址,因此我使用ioremap结合iowrite32进行配置,或者ioremap结合__raw_writel操作,但仍然报段错误,无论对哪个寄存器操作,请问这怎么回事.
我的操作如下:
volatile unsigned long phys;
volatile unsigned long virt;
phys=0x49800000;
virt=(unsigned long)ioremap(phys,0x10);
//__raw_writel(0x04,*(unsigned long *)(virt+0x14));
iowrite32(0x04,*(unsigned long *)(virt+0x14));
iowrite32(0x07,*(unsigned long *)(virt+0x08));
页: [1]
查看完整版本: USB设备无法识别