linux调试LTE模块驱动

调试LTE模块驱动
碰到问题:命令“ifconfig eth1 up”打开网卡,出现错误,错误信息“ifconfig: SIOCSIFFLAGS: No space left on device”
问题定位:
1)走读LTE驱动代码,发现在usbnet_open函数里调用usb_submit_urb函数发送中断状态返错导致网卡无法打开,直接将这部分代码
 注释掉,调试发送网卡能打开,并且也能连上外网,但是串口无法发送AT命令。
2)跟进usb_submit_urb函数,发现到musb_host.c文件里的musb_schedule()函数返错,在条件判断if (hw_ep == musb->bulk_ep)处
   continue了。把musb->bulk_ep打印出来值为2,分析可能是usb控制器的endpoint不够用,所以才导致“No space left on device”。
3)走读musb控制器代码,在musb_core.c文件的musb_core_init()函数里调用ep_config_from_table()函数配置,打印musb->fifo_mode=2,
   查看mode_2_cfg的配置,里面只有1个endnum的2种配置,修改成6个后测试验证OK,修改代码如下:
   /* mode 2 - fits in 4KB */
static struct musb_fifo_cfg __devinitdata mode_2_cfg[] = {
#if 1   
{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, },
{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, },
{ .hw_ep_num = 2, .style = FIFO_TX,   .maxpacket = 512, },
{ .hw_ep_num = 2, .style = FIFO_RX,   .maxpacket = 512, },
{ .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
{ .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
#else
{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 1024, },
{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 1024, },
#endif

};
问题总结:
由于个人对USB协议还不熟悉,虽然解决问题,但是未弄懂原理,希望哪位懂USB协议的兄弟能指点一下。

你可能感兴趣的:(调试记录)