调试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, },
linux调试LTE模块驱动
最新推荐文章于 2021-05-12 17:09:16 发布
在调试LTE模块驱动时,遇到`ifconfig eth1 up`命令执行失败,错误提示为`No space left on device`。通过分析驱动代码发现,问题可能出在`usbnet_open`函数中`usb_submit_urb`导致的中断状态错误。进一步跟踪到`musb_host.c`的`musb_schedule()`函数,发现可能是USB控制器的endpoint资源不足。最后,通过增加`mode_2_cfg`配置中的endpoint数量,解决了问题。然而,对USB协议的不熟悉使得问题的原理尚未完全理解。
摘要由CSDN通过智能技术生成