当前位置: 首页 > news >正文

01 RK3568调试4G 模块 EG800AK-CN

1、添加pid、vid信息

为了识别模块,需将模块的VID和PID信息添加到[KERNEL]/drivers/usb/serial/option.c文件中,对应的VID和PID下图所示:EG800AK参考EC800M

static const struct usb_device_id option_ids[] = {
#if 1 //此处为添加的代码,到endif结束。{USB_DEVICE(0x2C7C, 0x6002) }, 
#endif

在这里插入图片描述

2 、使用USBNet驱动

在1添加VID和PID中,配置会使模块的所有 USB 接口均绑定 USB 转串口 option 驱动程序,导致 USBNet 驱动程序接口无法工作。我们需要添加以下语句以防止 USBNet 驱动程序接口绑定 USB 转串口 option 驱动程序。

static int option_probe(struct usb_serial *serial,const struct usb_device_id *id)
{struct usb_interface_descriptor *iface_desc =&serial->interface->cur_altsetting->desc;unsigned long device_flags = id->driver_info;#if 1 //此处为添加的代码,到endif结束。 if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {__u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);//printk("aaaaaaaaaaaaaaaaaaddfasdf");//print("Detected device with Product ID: 0x%04X\n", idProduct) ;struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc; if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {//ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB return -ENODEV; } if ((idProduct&0xF000) == 0x0000) {//MDM interface 4 is QMI if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3 && intf->bInterfaceSubClass == 0xFF && intf->bInterfaceProtocol == 0xFF) return -ENODEV; } } 
#endif

3、修改内核配置

检查内核配置:,默认是打开的

CONFIG_USB_SERIAL;
CONFIG_USB_SERIAL_WWAN;
CONFIG_USB_SERIAL_OPTION;

在这里插入图片描述

4、 添加零包机制

根据 USB 协议的要求,通过在kernel/drivers/usb/serial/usb_wwan.c文件中添加如下语句在 bulk-out 传输过程中添加处理零包的机制。

static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,int endpoint,int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *))
{struct usb_serial *serial = port->serial;struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);struct urb *urb;urb = usb_alloc_urb(0, GFP_KERNEL);	/* No ISO */if (!urb)return NULL;usb_fill_bulk_urb(urb, serial->dev,usb_sndbulkpipe(serial->dev, endpoint) | dir,buf, len, callback, ctx);
#if 1 //此处为添加的代码,endif为结束。if (dir == USB_DIR_OUT) {//struct usb_device_descriptor *desc = &serial->dev->descriptor; if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) urb->transfer_flags |= URB_ZERO_PACKET; }	 
#endifif (intfdata->use_zlp && dir == USB_DIR_OUT)urb->transfer_flags |= URB_ZERO_PACKET;return urb;
}

5 、添加Reset-resume机制

部分 USB 主机控制器或 USB hub 在 MCU 进入 Suspend/Sleep(挂起/睡眠)模式时会发生掉电或复位,并且在 MCU 退出Suspend/Sleep模式后不能使模块恢复。需要通过在kernel/drivers/usb/serial/option.c文件中添加以下语句来启用reset-resume机制。

#ifdef CONFIG_PM.suspend           = usb_wwan_suspend,.resume            = usb_wwan_resume,
#if 1  //此处为添加代码 ednif结束 .reset_resume   = usb_wwan_resume, 
#endif 
#endif
};

6、 联网

该4G模块是可以通过ECM或者RNDIS驱动的方式进行上网的。
本文选择ECM驱动方式,在内核的配置中需要开启以下配置项。

CONFIG_USB_NET_DRIVERS 
CONFIG_USB_USBNET 
CONFIG_USB_NET_CDCETHER

在这里插入图片描述

7、测试指令

busybox microcom /dev/ttyUSB1 -s 115200 -t 10000   #10S内无操作退出串口检查SIM卡返回OK代表识别到
AT+CPIN?
切换接口模式,将模块配置为 ECM 状态,
AT+QCFG="usbnet",1拨号上网
at+qnetdevctl=1,1,1

QA: ping百度域名无法解析

1. 手动配置 DNS 服务器
修改 /etc/resolv.conf 文件,添加可靠的公共 DNS 服务器:# 备份原配置
cp /etc/resolv.conf /etc/resolv.conf.bak# 编辑配置文件
echo "nameserver 114.114.114.114" > /etc/resolv.conf  # 国内DNS
echo "nameserver 8.8.8.8" >> /etc/resolv.conf           # Googl

在这里插入图片描述

相关文章:

  • SpringCloud 分布式锁Redisson锁的重入性与看门狗机制 高并发 可重入
  • Python语法基础篇(包含类型转换、拷贝、可变对象/不可变对象,函数,拆包,异常,模块,闭包,装饰器)
  • 深度学习入门——基于多层感知机的MNIST手写数字识别
  • Blinko智能笔记系统实现跨平台同步与隐私保护的完整技术方案解析
  • 【C/C++】template 入门到高阶简单大纲
  • 经典SQL查询问题的练习第四天
  • AutoCompose - 携程自动编排【开源】
  • 【亲测有效】Mybatis-Plus中更新字段为null
  • pytorch3d+pytorch1.10+MinkowskiEngine安装
  • PyTorch--池化层(4)
  • Attention Is All You Need (Transformer) 以及Transformer pytorch实现
  • pytorch基本运算-导数和f-string
  • 互联网大厂Java求职面试:AI大模型与云原生技术的深度融合
  • MySQL关系型数据库学习
  • 第三发 DSP 点击控制系统
  • 【MATLAB代码】制导方法介绍与例程——三点法|三维空间,动态目标导引(订阅专栏后可直接查看源代码)
  • leetcode hot100 链表(一)
  • matlab实现求解兰伯特问题
  • Axure形状类组件图标库(共8套)
  • xTimerChangePeriod无需先Stop
  • 利用vs做网站/网站建设7个基本流程
  • 信息技术用C 做登录界面网站 csdn/合肥网站优化推广方案
  • 如何申请网站备案/百度指数需求图谱
  • seo课堂/seo广告
  • 网站开发结构文档/刚刚北京传来重大消息
  • 网站导航设计模板/百度查重工具