求救啊!usb gadget device g_ether.ko 做成usbnetwork

dongchong2292482 2011-08-08 05:37:12
最近在做一个使用s3c2410a的芯片 sb3500a的板子 linux-2.6.26的内核 在做一个开发板做usb device 使用usb
与pc (windows XP)通信的东西 ,我想用 usb gadget 的模型,使用内核中自带的g_ether模块做成usb做虚拟网
卡的网络通讯的模式,但是我有个朋友说要用特殊的USB线中间带一个芯片的那种,但是我看到网上的教程并没有
提到要用特殊的线。
我参考的是刘洪涛老师的《USB gadget设备驱动》

请问这个是用USB线直接把PC机和开发板连起来的就行么,还是要用特殊的USB转网卡的线啊!??
我把PC和开发板直接联起来有显示无法识别的设备但是没说让我安装驱动!而且找到的驱动PC都说不匹配!
...全文
1411 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhoujian 2012-12-26
  • 打赏
  • 举报
回复
引用 17 楼 lizhoujian 的回复:
引用 16 楼 xu540682674 的回复:我也在做usb网络的,在我 root@dm368-evm:~# insmod g_ether.ko g_ether: Unknown symbol usb_gadget_register_driver g_ether: Unknown symbol usb_gadget_unregister_driver……
这是我出现的错误住处,始终获取不了正常的speed和config.
lizhoujian 2012-12-26
  • 打赏
  • 举报
回复
/ # modprobe g_ether [ 268.980000] g_ether gadget: using random self ethernet address [ 269.010000] g_ether gadget: using random host ethernet address [ 269.010000] usb0: MAC 7a:b5:21:61:84:51 [ 269.040000] usb0: HOST MAC f2:9d:12:65:eb:4d [ 269.070000] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008 [ 269.110000] g_ether gadget: g_ether ready [ 269.110000] U->POWERON1 [ 269.110000] Resume PHY [ 269.130000] Enable SYS_A [ 269.130000] [gp_enable_clock][1198] run, clock_name=[SYS_A] [ 269.160000] Enable USB1 CLK [ 269.160000] U->POWERON1 [ 269.160000] [spmp_udc_irq_config_en][3002], [-1][1] [ 269.170000] [set_config][492] Important [ 269.170000] g_ether gadget: ? speed config #0: unconfigured [ 269.170000] speed unknow [ 269.180000] SW Connect [ 269.180000] INTERRUPT MODE / # [ 269.190000] [composite_suspend][1194]
lizhoujian 2012-12-26
  • 打赏
  • 举报
回复
引用 16 楼 xu540682674 的回复:
我也在做usb网络的,在我 root@dm368-evm:~# insmod g_ether.ko g_ether: Unknown symbol usb_gadget_register_driver g_ether: Unknown symbol usb_gadget_unregister_driver insmod: error inse……
直接用“modprobe g_ether” 最近也在做这个东西,也出现楼主这种问题。
盗帅-徐宗 2012-11-02
  • 打赏
  • 举报
回复
我也在做usb网络的,在我
root@dm368-evm:~# insmod g_ether.ko
g_ether: Unknown symbol usb_gadget_register_driver
g_ether: Unknown symbol usb_gadget_unregister_driver
insmod: error inserting 'g_ether.ko': -1 Unknown symbol in module
发生这样的错误,请问是为什么?还有是不是只要insmod 这个g_ether.ko模块就行啊,我怎么看到别的要insmod musb_hdrc.ko,insmod g_ether.ko?还请指教啊!
盗帅-徐宗 2012-11-02
  • 打赏
  • 举报
回复
请问楼主,刘洪涛老师的《USB gadget设备驱动》
这本书在哪里能买到,我到京东,亚马逊,都搜不到。。。
dongchong2292482 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sonil 的回复:]
GET STATUS不过?是不是你没有发ACK之类的?
[/Quote]
这个底层的驱动是linux 给的驱动 我认为应该不会没有发ACK 吧
体现出来的现象就是 电源寄存器 还有中断寄存器地址为0x52000158(L)0x5200015B(B)
的状态为 reset,也就是说 总线上一直有reset 信号!不知道会不会是时序问题导致的
网上有人说是时钟的问题 请问您知道这个USB的时钟都要配置哪些地方么???
dongchong2292482 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chengchenz 的回复:]
不需特殊的线。普通的USB线。
开发板那边Linux驱动搞定后,PC端要能正常得到VID PID。

PC端需要驱动的。要自己写个.inf文件。
http://www.mjmwired.net/kernel/Documentation/usb/linux.inf
注意修改里面VID PID的部分。
[/Quote]
恩谢谢 这个inf文件是可以在kernel/Documentation/usb/下找到
现在主要是get status 不过总线上一直有reset信号!
FreshBird 2011-08-28
  • 打赏
  • 举报
回复
不需特殊的线。普通的USB线。
开发板那边Linux驱动搞定后,PC端要能正常得到VID PID。

PC端需要驱动的。要自己写个.inf文件。
http://www.mjmwired.net/kernel/Documentation/usb/linux.inf
注意修改里面VID PID的部分。
dongchong2292482 2011-08-28
  • 打赏
  • 举报
回复
我的邮箱是dongchong2292482@126.com
qq 105349011

欢迎互相交流!
dongchong2292482 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sonil 的回复:]
楼主你应该先去看看USB协议,你的代码里USB枚举失败了,因为你的设备需要将VID和PID传给PC,这样PC才能加载正确的驱动。

正常流程应该是PCreset,然后检测设备,你D+拉起来后,PC探测到你USB的插入,然后reset,然后是high speed detect,然后REST,然后给地址0的ep0开始发get descriptor等一系列操作,剩下的就是分配地址直到枚举完成。

……
[/Quote]
首先非常感谢您的帮助。
从打印信息里面看我的开发板里面一直都收到reset信号所以一直没能进入正常的流程每次中断处理函数都跳到了 reset里面去 因为是根据s3c2410 里面的pwr_reg 电源状态寄存器 的值进入的,如果进入reset分支的话应该是重新配置寄存器,我这里是用的linux2.6.26的内核里面有一个驱动的代码如果需要的话我可以留给你。
另外这里是我有bus hound 抓到的数据
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 1.1.0(2)
7.0 DI 01 03 01 00 .... 1.2.0
7.0 CTL 23 01 10 00 01 00 00 00 CLEAR FEATURE 3.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 4.1.0(2)
7.0 DI 01 03 00 00 .... 4.2.0
7.0 CTL 23 03 04 00 01 00 00 00 SET FEATURE 6.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 7.1.0
7.0 DI 03 03 10 00 .... 7.2.0
7.0 CTL 23 01 14 00 01 00 00 00 CLEAR FEATURE 8.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 9.1.0(2)
7.0 DI 03 03 00 00 .... 9.2.0
7.0 CTL 23 03 04 00 01 00 00 00 SET FEATURE 11.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 12.1.0
7.0 DI 03 03 10 00 .... 12.2.0
7.0 CTL 23 01 14 00 01 00 00 00 CLEAR FEATURE 13.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 14.1.0(2)
7.0 DI 03 03 00 00 .... 14.2.0
7.0 CTL 23 03 04 00 01 00 00 00 SET FEATURE 16.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 17.1.0
7.0 DI 03 03 10 00 .... 17.2.0
7.0 CTL 23 01 14 00 01 00 00 00 CLEAR FEATURE 18.1.0
7.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 19.1.0
7.0 DI 03 03 00 00 .... 19.2.0
7.0 CTL 23 01 01 00 01 00 00 00 CLEAR FEATURE 20.1.0
7.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 21.1.0
7.0 DI 00 01 00 00 .... 21.2.0
希望可以给你们提供一些信息帮助我!!
sonil 2011-08-28
  • 打赏
  • 举报
回复
GET STATUS不过?是不是你没有发ACK之类的?
sonil 2011-08-27
  • 打赏
  • 举报
回复
楼主你应该先去看看USB协议,你的代码里USB枚举失败了,因为你的设备需要将VID和PID传给PC,这样PC才能加载正确的驱动。

正常流程应该是PCreset,然后检测设备,你D+拉起来后,PC探测到你USB的插入,然后reset,然后是high speed detect,然后REST,然后给地址0的ep0开始发get descriptor等一系列操作,剩下的就是分配地址直到枚举完成。


楼主你代码里
VID=525
PID=a4a2
但PC提示都是0,说明reset以后get descriptor这里出了问题。

我也学USB没多久,希望能对你有所帮助。
dongchong2292482 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cqbamboo 的回复:]
以前做过usb的东东,但是没用过你说的usb gadget 的模型。没啥有用的信息提供了。
感慨一下,试用期就做这么有挑战性的任务。你们公司也真敢啊
[/Quote]
请问你是用s3c2410 的板子做的么?就是开发板做设备 PC机做主机。咱们可以交流交流!
cqbamboo 2011-08-17
  • 打赏
  • 举报
回复
以前做过usb的东东,但是没用过你说的usb gadget 的模型。没啥有用的信息提供了。
感慨一下,试用期就做这么有挑战性的任务。你们公司也真敢啊
dongchong2292482 2011-08-17
  • 打赏
  • 举报
回复
现在打出debug 信息
# insmod g_ether.ko
s3c2410_udc:usb_gadget_register_driver is here
s3c2410_udc: Hook the driver
binding gadget driver ether
g_ether :eth_bind
cdc=1,rndis=1
VID=525
PID=a4a2
RNDIS/Ethernet Gadget
s3c2410_udc_set_selfpowered is here
ether gadget: using random self ethernet address
ether gadget: using random host ethernet address
init RNDIS success 0
s3c2410_ud_alloc_request is here
s3c2410_ud_alloc_request is here
usb1: Ethernet Gadget, version: May Day 2005
usb1: using s3c2410_udc, OUT ep2-bulk IN ep1-bulk STATUS ep3-bulk
usb1: MAC 6e:21:77:51:b8:15
usb1: HOST MAC b6:cc:50:75:b2:f5
usb1: RNDIS ready
s3c2410_udc_enable called
usb has speed_full
set default power state
Enable reset and suspend interrupt interrupts
Enable ep0 interrupt
sb3500a_udc:Pull-up enable
line 1636: s3c2410_udc_p_enable
hello world
s3c2410_udc_enable is here

S3C2410_UDC_INDEX_REG idx=0
usbs=04, usbds=00, pwr=08 ep0csr=00

S3C2410_UDC_INDEX_REG idx=0
usbs=00, usbds=00, pwr=08 ep0csr=00

S3C2410_UDC_INDEX_REG idx=0
usbs=04, usbds=00, pwr=08 ep0csr=00

S3C2410_UDC_INDEX_REG idx=0
usbs=00, usbds=00, pwr=08 ep0csr=00

S3C2410_UDC_INDEX_REG idx=0
usbs=04, usbds=00, pwr=08 ep0csr=00

S3C2410_UDC_INDEX_REG idx=0
usbs=00, usbds=00, pwr=08 ep0csr=00

有人知道怎么回事么
只要连接usb线或者加载模块
就是几个reset中断 然后pc机就放弃枚举了
dongchong2292482 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shenfawang 的回复:]
我之前用的,很好用没有出现什么问题,我的流程是这样的:把这个ko模块加载上后,把usb插入到pc上,然后pc应该就多了一个网卡,只要开发板子上面的网卡接网络,pc就可以通过这个网络上网。
[/Quote]
不是的。
现在我的开发板是一个从设备,我想用usb gadget模型 开发板做usb device 加载 s3c2410_udc
然后加载g_ether.ko 开发板上应该多一个网卡 连接PC机应该根据PID 和VID提示安装驱动RNDIS
但是现在我的PID VID都是0 而且PC显示的 nuknow device 我强行安装驱动也不行!
大旺 2011-08-10
  • 打赏
  • 举报
回复
我之前用的,很好用没有出现什么问题,我的流程是这样的:把这个ko模块加载上后,把usb插入到pc上,然后pc应该就多了一个网卡,只要开发板子上面的网卡接网络,pc就可以通过这个网络上网。
dongchong2292482 2011-08-09
  • 打赏
  • 举报
回复
我已经按照网上的把
arch/arm/mach-s3c2410/mach-sb3500a.c (我们用的sb2500a的板子)
修改了
 /*USB device上拉电阻
处理 */
  static void smdk2410_udc_pullup(enum s3c2410_udc_cmd_e cmd)
  {
  u8 *s3c2410_pullup_info[] = {
  " ",
  "Pull-up enable",
  "Pull-up disable",
  "UDC reset, in case of"
  };
  printk("smdk2410_udc: %s\n",s3c2410_pullup_info[cmd]);
  s3c2410_gpio_cfgpin(S3C2410_GPG10, S3C2410_GPG10_OUTP);
  switch (cmd)
  {
  case S3C2410_UDC_P_ENABLE :
  s3c2410_gpio_setpin(S3C2410_GPG10, 1); //set gpg10 output HIGH
  break;
  case S3C2410_UDC_P_DISABLE :
  s3c2410_gpio_setpin(S3C2410_GPG10, 0); //set gpg10 output LOW
  break;
  case S3C2410_UDC_P_RESET :
  //FIXME!!!
  break;
  default:
  break;
  }
  }
  static struct s3c2410_udc_mach_info smdk2410_udc_cfg __initdata = {
  .udc_command = smdk2410_udc_pullup,
  };
  static struct platform_device *smdk2410_devices[] __initdata = {
  …,
  &s3c_device_usbgadget, /*USB gadget device设备登记*/
  };
  static void __init sdmk2410_init(void)
  {
  u32 upll_value;
  set_s3c2410fb_info(&smdk2410_lcdcfg);
  s3c24xx_udc_set_platdata(&smdk2410_udc_cfg); /* 初始化*/
  s3c_device_sdi.dev.platform_data = &smdk2410_mmc_cfg;
  /* Turn off suspend on both USB ports, and switch the
  * selectable USB port to USB device mode. */
  s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST |
  S3C2410_MISCCR_USBSUSPND0 |
  S3C2410_MISCCR_USBSUSPND1, 0x0);
  /* 设置USB时钟 */
  upll_value = (
  0x78 << S3C2410_PLLCON_MDIVSHIFT)
  | (0x02 << S3C2410_PLLCON_PDIVSHIFT)
  | (0x03 << S3C2410_PLLCON_SDIVSHIFT);
  while (upll_value != readl(S3C2410_UPLLCON)) {
  writel(upll_value, S3C2410_UPLLCON);
  udelay(20);
insmod s3c2410_udc.ko
s3c2410_udc: debugfs dir creation failed -19
sb3500a_udc:Pull-up disable
insmod g_ether.ko
ether gadget: using random self ethernet address
ether gadget: using random host ethernet address
usb0: Ethernet Gadget, version: May Day 2005
usb0: using s3c2410_udc, OUT ep2-bulk IN ep1-bulk STATUS ep3-bulk
usb0: MAC 36:7a:b0:af:02:b6
usb0: HOST MAC 42:25:e7:38:83:f5
usb0: RNDIS ready
sb3500a_udc:Pull-up enable
但是连接PC机 PC上起先是无反应 后来把D+拉高用GPG10 插上USB线PC能看到无法识别的设备
但是没有提示我安装相应的RNDIS 驱动 ,我看了一下设备显示是 UNKNOW device VID PID 都是 0
而且开发板上也没有提示。
就是说我的g_ether.ko 好像没有干什么东西。但是确实在arm9上出现了一个usb0网卡 并且可以设置
如果连接网线ping这个IP也是可以的。说明网卡还是模拟成功。
哪位LS能给点思路或者建议么?
dongchong2292482 2011-08-08
  • 打赏
  • 举报
回复
帮个忙啊 老大让我做的东西,做不出来这个月就要炒掉我!!还在试用期啊!!

21,617

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧