Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1786973
  • 博文数量: 787
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-22 15:17
文章分类

全部博文(787)

文章存档

2008年(787)

我的朋友

分类:

2008-09-25 16:05:54

小弟刚刚毕业几个月,目前正在从事基于RMI AU1200的PMP样机的嵌入式Linux开发,这两天在使用g_file_storage模块的时候碰到了完全不知道方向的问题,上来虚心向大家求教。

PMP样机之前使用Nandflash作为主存储介质,为了和PC相连,我在Nandflash上使用dd命令创建了2GB的空文件/mnt/mtd6/disk1,然后我调用 modprobe g_file_storage file=/mnt/mtd6/disk1,然后加载usb-otg模块并和PC相连被识别为一个磁盘,然后从PC上复制数据到该磁盘上一切正常,在串口控制台检测到的也没有任何异常信息。

    但是现在的PMP样机不再使用Nandflash而是直接使用fat32 格式的SDCard作为主存储介质,但是仍然要实现当SDCard插入样机的时候,可以通过USB-OTG接口和PC相连并让PC在这种情况下可以访问SDCard,于是我仍然使用g_file_storage模块,使用命令  
modprobe g_file_storage file=/dev/mmcblk0
然后加载usb-otg模块并和PC相连仍然也可被识别为一个磁盘,但是从PC上向该磁盘上复制一个约160MB的数据文件时却出现了问题:
    在Windosw/PC上显式正在复制的时候,突然会出现进度条停止不前,而同时在串口控制台下可以看到不断的形如
       ……
       amd5536udc: Connect: Speed = HIGH_SPEED
           amd5536udc: Connect: Speed = HIGH_SPEED
           ……
的信息,这是在/drivers/usb/gadget/amd5536udc.c中的 udc_dev_isr 中断处理程序中打印出来的消息,然后直至几分钟后控制台出现
         g_file_storage gadget: high speed config
的消息后,控制台消息暂停,同时PC/Windows上的复制进度条恢复前进,但是一段时间以后,又会再次重复以上的过程。并且多数情况下随后会出现“Windows延缓写入失败”的警告,然后会出现“无法复制,路径太深”,或者“无法访问H:/ 由于I/O设备错误,无法运行此项请求”, 之类的错误。而在在复制较小文件(如几十兆的文件)时不会出现“Windows延缓写入失败”的警告以及无法复制或无法访问的错误,在PC/Windows上能够完成复制,但是如果此时不在PC上安全卸载USB就直接拔掉PMP样机和PC的连接线,在PMP以及串口调试环境下发现SDCard上其实根本就没有复制成功;而如果在PC上要安全卸载USB则会耗时很久,并且在串口环境下可以看到同步有上述的
       ……
       amd5536udc: Connect: Speed = HIGH_SPEED
           amd5536udc: Connect: Speed = HIGH_SPEED
           ……
中断处理程序的打印消息。我在PC上的我的电脑中查看SDCard通过g_file_storgage映射到PC上的磁盘的属性(即Windows上看见的linux File-Stor Gadget Usb Device),在它的“策略”一项下选择的是“为快速删除而优化”,即没有使用磁盘上和Windows中的写入缓存,既然没有使用缓存为什么又会出现我在PC上不手动安全卸载USB数据根本就没有拷入呢?


上面写了这么多,真的让各位师兄师姐费眼了,可是小弟我面对这么多的疑问确实不知所措了,例如那些中断究竟可能是因为什么原因被触发的呢?我现在连个查错的方向都不知道了。在这里再次谢过各位大虾了~~~~

--------------------next---------------------

阅读(858) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~