免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2009 | 回复: 1
打印 上一主题 下一主题

USB设备无法识别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-15 17:06 |只看该作者 |倒序浏览
本帖最后由 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 00  00 00 00 00  CONTROL TRANSFER    5us         3.3.0        2013-07-17  14:52:16.004               
  21                                   IRP    06 00 90 01  00 00 00 00                     10us         3.4.0        2013-07-17  14:52:16.004               
  21.0                                 CTL    23 01 10 00  03 00 00 00  CLEAR FEATURE      13us         4.1.0        2013-07-17  14:52:16.004  usbhub        
  21.0                                 URB    50 00 08 00  00 00 00 00  CONTROL TRANSFER  228us         4.2.0        2013-07-17  14:52:16.004               
  21                                   IRP    06 00 90 01  00 00 00 00                      3us         4.3.0        2013-07-17  14:52:16.004               
  21.0                                 CTL    a3 00 00 00  01 00 04 00  GET STATUS         58us         5.1.0        2013-07-17  14:52:16.004  usbhub        
  21.0                              4  IN     00 01 00 00               ....              304us         5.2.0        2013-07-17  14:52:16.004               
  21.0                                 URB    50 00 08 00  00 00 00 00  CONTROL TRANSFER    3us         5.3.0        2013-07-17  14:52:16.004               
  21                                   IRP    06 00 90 01  00 00 00 00                      1us         5.4.0        2013-07-17  14:52:16.004               
  21.0                                 CTL    a3 00 00 00  02 00 04 00  GET STATUS         35us         6.1.0        2013-07-17  14:52:16.004  usbhub        
  21.0                              4  IN     00 01 00 00               ....              237us         6.2.0        2013-07-17  14:52:16.004               
  21.0                                 URB    50 00 08 00  00 00 00 00  CONTROL TRANSFER   11us         6.3.0        2013-07-17  14:52:16.004               
  21                                   IRP    06 00 90 01  00 00 00 00                      1us         6.4.0        2013-07-17  14:52:16.004               
  21.0                                 CTL    a3 00 00 00  03 00 04 00  GET STATUS         35us         7.1.0(2)     2013-07-17  14:52:16.004  usbhub        
  21.0                              4  IN     01 01 00 00               ....              172us         7.2.0        2013-07-17  14:52:16.004               
  21.0                                 URB    50 00 08 00  00 00 00 00  CONTROL TRANSFER    4us         7.3.0        2013-07-17  14:52:16.004               
  21                                   IRP    06 00 90 01  00 00 00 00                      9us         7.4.0        2013-07-17  14:52:16.004               
  21.0                                 CTL    23 03 04 00  03 00 00 00   SET FEATURE       115ms         9.1.0        2013-07-17  14:52:16.128  usbhub        
  21.0                                 URB    50 00 08 00  00 00 00 00  CONTROL TRANSFER  204us         9.2.0        2013-07-17  14:52:16.128               
  21                                   IRP    06 00 90 01  00 00 00 00                      3us         9.3.0        2013-07-17  14:52:16.128               
  21.1                              1  IN     08                        .                  14ms        10.1.0        2013-07-17  14:52:16.144  usbhub        
  21.1                                 URB    48 00 09 00  00 00 00 00  BULK/INT XFER       5us        10.2.0        2013-07-17  14:52:16.144               
  21                                   IRP    06 00 00 01  00 00 00 00                      1us        10.3.0        2013-07-17  14:52:16.144      
请问下是什么问题,请高手指点下。

论坛徽章:
0
2 [报告]
发表于 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+0x0);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP