主题 : 问个弱弱的问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 40508
精华: 1
发帖: 44
金钱: 270 两
威望: 54 点
综合积分: 108 分
注册时间: 2011-03-19
最后登录: 2018-04-21
楼主  发表于: 2011-08-31 11:17

 问个弱弱的问题

    小弟在尝试用mini2440 模拟U盘,Linux内核是友善之臂的2.6.32.2。
   编译配置选项:
  <*>   USB Gadget Support  --->
              USB Peripheral Controller (S3C2410 USB Device Controller)  --->
              S3C2410 USB Device Controller
              [*]       S3C2410 udc debug messages
              <M>   USB Gadget Drivers
              <M>     File-backed Storage Gadget


make zImage && make modules 之后烧内核,加载 g_file_storage.ko :
    insmod g_file_storage.ko file=/dev/mtdblock2 stall= 0 removable=1 .

系统打印如下结果:
g_file_storage gadget: File-backed Storage Gadget, version: 20 November 2008
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /dev/mtdblock2

但是将USB插入主机后主机没有任何反应。

     通过printk测试 file_storage.c 文件里面的函数发现:
                     binding gadget driver 'g_file_storage' 这个函数得到调用。
                     s3c2410_set_selfpowered() 调用成功!
                     udc_enable 这个函数根本没被调用! (是不是一定要调用这个函数才能实现 gadget-storage功能??)


在论坛上看到有相同的问题,有人说是要把USB_EN信号使能才行。 于是在 bind 函数里面加入一条语句:
s3c2410_gpio_setpin( S3C2400_GPC(5), 1 )                          (此时通过  s3c2410_gpio_getpin( S3C2400_GPC(5) ) 发现返回值是 0 )
发现主机还是没有反应。

使用  Bus Hound 软件抓包发现一个包都没抓到,在 Bus Hound  的 Device 窗口甚至都没有增添新设备。

初步猜测可能是某一路线 没有使能,是 我没有在正确的地方把这个信号 GPC5  使能??

还是要把其他的信号线也要使能??

还是得通过其它的方式来设置USB_EN信号线??

还望各位路过高手不吝赐教。















级别: 侠客
UID: 40508
精华: 1
发帖: 44
金钱: 270 两
威望: 54 点
综合积分: 108 分
注册时间: 2011-03-19
最后登录: 2018-04-21
1楼  发表于: 2011-09-01 13:48
今天又把 这学期的嵌入式专业课课本看了一下原来自己都把最基本的端口操作知识给忘了。 晕啊。

在file_storage.c  , fsg_bind 函数加入下面两行:
    s3c2410_gpio_cfgpin(S3C2410_GPC(5),S3C2410_GPIO_OUTPUT);
    s3c2410_gpio_setpin(S3C2410_GPC(5) ,1);

既可以模拟U盘了。
创建一脚本 xx.sh:
insmod g_file_storage.ko file=/dev/$1 stall=0 removable=1
执行 ./xx.sh sda
打印如下:
g_file_storage gadget: File-backed Storage Gadget, version: 20 November 2008
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /dev/sda


将USB 插入PC机 可以见到U盘被系统识别。