小弟在尝试用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信号线??
还望各位路过高手不吝赐教。
