标题: 请教:在使用g_file_storage模块时碰见的现象
zhouxiao_82
新生入学
Rank: 1



UID 205101
精华 0
积分 12(积分有什么用?)
帖子 5
阅读权限 10
注册 2007-7-24
状态 离线
发表于 2008-5-8 19:57  资料  个人空间  短消息  加为好友  添加 zhouxiao_82 为MSN好友 通过MSN和 zhouxiao_82 交谈

Linux爱好者的盛会
请教:在使用g_file_storage模块时碰见的现象

小弟刚刚毕业几个月,目前正在从事基于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数据根本就没有拷入呢?


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

顶部
不容错过的IBM 集群技术资源汇总
AIKO_sex
特聘作家
Rank: 5Rank: 5
伊甸园杰出贡献会员



UID 12054
精华 20
积分 40(积分有什么用?)
帖子 11538
阅读权限 10
注册 2002-3-20
状态 在线
发表于 2008-5-8 20:51  资料  个人空间  短消息  加为好友 
stall=0  removable=1

看看这2个参数





象一阵风 拂过我身边 忽然间 想要去很远 和你去看繁华世界
顶部
zhouxiao_82
新生入学
Rank: 1



UID 205101
精华 0
积分 12(积分有什么用?)
帖子 5
阅读权限 10
注册 2007-7-24
状态 离线
发表于 2008-5-9 11:40  资料  个人空间  短消息  加为好友  添加 zhouxiao_82 为MSN好友 通过MSN和 zhouxiao_82 交谈
首先谢谢AIKO_sex 师兄的回复,但是我按照file_storage.c源码的参数说明和AIKO_sex 的提示使用了如下命令加载g_file_storage模块:

    modprobe g_file_storage file=/dev/mmcblk0  removable=1 stall=0

但是仍然没有任何改观的效果,以一个167MB大小的文件为例进行测试,还是和最初的状态一模一样,串口终端中让然间歇性的检测到中断消息,PC/Windows上的复制进度条仍然停止不前,并最终在不到一半的时候报错“I/O错误”。

后来我又按照file_storage.c源码的参数说明添加了指明传输方式的参数:
   
     modprobe g_file_storage file=/dev/mmcblk0  removable=1 stall=0 transport=BBB(后来又分别换了CBI和CB)

但是如果使用CBI和CB,使用OTG接口和PC/Windows连接后PC的右下角根本就没有出现盘符标识,而使用BBB可以出现盘符但是问题依旧(其实默认的transport就是BBB)

唉,真的不知道怎么回事情了,还请大家一定帮帮忙啊~~~~

顶部
AIKO_sex
特聘作家
Rank: 5Rank: 5
伊甸园杰出贡献会员



UID 12054
精华 20
积分 40(积分有什么用?)
帖子 11538
阅读权限 10
注册 2002-3-20
状态 在线
发表于 2008-5-9 23:28  资料  个人空间  短消息  加为好友 
移动设备在windows下"无法复制,路径太深‘好象是个普遍现象,涉及很多问题

你自己先排除一下





象一阵风 拂过我身边 忽然间 想要去很远 和你去看繁华世界
顶部
 



当前时区 GMT+8, 现在时间是 2008-5-13 11:23

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.057289 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP