主题 : Linux USB gadget驱动出了问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 23457
精华: 0
发帖: 24
金钱: 130 两
威望: 26 点
综合积分: 48 分
注册时间: 2010-06-20
最后登录: 2017-09-13
楼主  发表于: 2010-06-21 10:54

 Linux USB gadget驱动出了问题

开发板:mini2440
操作系统:linux
开发过程:
     将Linux内核中的Linux USB gadget驱动中的zero驱动(这个是Linux自带的)放入到内核中。
用make menuconfig在USB gadget菜单下将zero选中(我用的是y),
make zImage之后,将zImage下载到mini2440中。用USB延长线(贵公司自带的那个USB数据线)将PC和
mini2440连接上(mini2440端是连接到从设备USB口上,而不是HOST的USB口)。发现PC没有反应,重新
在插拔,还是没有反应。

问题:
   不知道为什么PC没有办法识别zero驱动,而且PC连“发现未知硬件连接”的提示都没有。
   最让人疑惑的是:从打印信息上看,zero驱动有运行bind函数,但是没有运行setup函数,不知道mini2440上的从设备USB口是否
做了什么特殊处理。
   如果我想运行zero驱动(至少能让PC识别到有未知硬件连接),应该如何做?

*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-06-21 11:19
硬件上你需要拉高USB_EN这个信号;
另外,要使用USB Gadget功能,除了加载Gadget驱动外,还需要加载S3C2440的USB Device Controller驱动,参考这个帖子:
http://www.aiothome.net/read.php?tid-1753.html
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 23457
精华: 0
发帖: 24
金钱: 130 两
威望: 26 点
综合积分: 48 分
注册时间: 2010-06-20
最后登录: 2017-09-13
2楼  发表于: 2010-06-21 11:36

 回 1楼(kasim) 的帖子

第一个疑问:
我有make menuconfig中有在加载USB Device Controller驱动,但是只有一个S3C2410的,没有你说的S3C2440的

第二个疑问:
硬件上拉高USB_EN这个信号,能否给你拉高的代码?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2010-06-21 11:59
我有make menuconfig中有在加载USB Device Controller驱动,但是只有一个S3C2410的,没有你说的S3C2440的

S3C2440用的是S3C2410的驱动

硬件上拉高USB_EN这个信号,能否给你拉高的代码?

参考http://repo.or.cz/w/linux-2.6/mini2440.git/blob/mini2440-stable-v2.6.32:/arch/arm/mach-s3c2440/mach-mini2440.c#l116
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 23457
精华: 0
发帖: 24
金钱: 130 两
威望: 26 点
综合积分: 48 分
注册时间: 2010-06-20
最后登录: 2017-09-13
4楼  发表于: 2010-06-21 14:02

 回 3楼(kasim) 的帖子

以上的两件事情我都做了,
其中S3C2440用的是S3C2410的驱动
拉高USB_EN我是用s3c2410_gpio_setpin(S3C2410_GPC(5), 1);

但是问题是现在还是不行。
级别: 新手上路
UID: 23457
精华: 0
发帖: 24
金钱: 130 两
威望: 26 点
综合积分: 48 分
注册时间: 2010-06-20
最后登录: 2017-09-13
5楼  发表于: 2010-06-21 15:01

 回 3楼(kasim) 的帖子

感谢kasim

参考你的mach-s3c2440.c文件,添加了mini2440_udc_pullup函数、mini2440_udc_cfg 结构体变量,
在mini2440_init函数中添加s3c2410_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT);
和s3c24xx_udc_set_platdata(&mini2440_udc_cfg);

就可以了,谢谢!