4G模块驱动移植

一、4G模块概述

1、调试的模块型号是广和通的 NL668-EAU-00-M.2。

2、使用的接口是 M.2 Key-B。实际只用到了M2里的USB接口。

  1. 调试过程

    以QMI_WWAN号方式进行说明,其他拨号方式也试过。最后以QMI_WWAN方式调通了,拨号成功了。

    其他拨号方式因为现有文档资料工具移植平台导致失败,比如GobiNet拨号提供AT$QCRMCALL=1,1现驱动已不支持,提供的AT通信文档也没有该指令且使用其他拨号方式提供拨号AT指令也不支持,ECM拨号方式走到了获取IP地址哪一步,但是使用udhcpc -i usb0获取的ip为本公司内网的ip,初步怀疑是是该拨号方式与hisi平台udhcpc指令兼容性的问题,最后又重新选择的qmi拨号方式。

    一开始就是用的qmi拨号方式,主要是该拨号方式驱动集成简单只需要修改内核配置及其文件即可,且设置APN获取ip等通过工具即可不需要外部输入AT指令,但是可能是hisi平台系统的差异性,该厂商提供的拨号程序始终获取不到ip,最后找了个新的开源的拨号程序quectel-cm成功获取到ip且ping通网络。

1、USB串口驱动集成

1)修改内核配置

修改内核支持option驱动。

在 Device Drivers > USB support > USB Serial Converter support 下选中 USB driver for GSM and CDMA modems。

修改 USBnet 驱动支持,因此需要配置 Linux 内核,配置 方法如下:

Device Drivers->Network device support->USB Network Adapters

选中如下组件:

Multi-purpose USB Networking Framework

2)修改option.c文件

文件路径:drivers/usb/serial/option.c 。

在源码中找到option_ids数组,在数组中添加NL668产品的VID(0x1508)和PID(0x1001);

static const struct usb_device_id option_ids[] = {

… …

{ USB_DEVICE(0x1508, 0x1001),

.driver_info = RSVD(4)},

文件中已经添加了改VID,只需过来rm net端口即可。

3)修改qmi_wwan文件

文件路径:drivers/net/usb/qmi_wwan.c。

在源码中找到usb_device_id数组,在数组中添加NL668产品的VID(0x1508)和PID(0x1001);

static const struct usb_device_id products[] = {

... ...

{QMI_FIXED_INTF(0x1508, 0x1001, 4)},

... ...

在该文件添加RAW IP支持

添加qmi_wwan_tx_fixup函数接口

struct sk_buff *qmi_wwan_tx_fixup(struct usbnet *dev, struct sk_buff *skb,gfp_t flags)

{

if (dev->udev->descriptor.idVendor !=cpu_to_le16(0x1508))

return skb;

// Skip Ethernet header from message

If (skb_pull(skb, ETH_HLEN)) {

return skb;

}

else {

dev_err(&dev->intf->dev, "Packet Dropped");

}

// Filter the packet out, release it

dev_kfree_skb_any(skb);

return NULL;

}

找到qmi_wwan_bind函数 在err: retuen status;前添加if语句

static int qmi_wwan_bind(struct usbnet *dev, struct usb_interface *intf)

{

... ...

if (dev->udev->descriptor.idVendor == cpu_to_le16(0x1508))

{

dev_info(&intf->dev, "Fibocom nl668 work on RawIP mode\n");

dev->net->flags |= IFF_NOARP;

usb_control_msg(

interface_to_usbdev(intf),

usb_sndctrlpipe(interface_to_usbdev(intf), 0),

0x22,//USB_CDC_REQ_SET_CONTROL_LINE_STATE

0x21,//USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE

1, //active CDCDTR

intf->cur_altsetting->desc.bInterfaceNumber,

NULL, 0, 100);

}

err:

return status;

}

找到 qmi_wwan_info结构体在末尾添加.tx_fixup = qmi_wwan_tx_fixup,

static const struct driver_info qmi_wwan_info = {

... ...

.tx_fixup = qmi_wwan_tx_fixup,

};

2、内核环境确认

修改内核源码根目录.config 文 件 ,.config 中修改 CONFIG_USB_NET_QMI_WWAN=y 、

CONFIG_USB_SERIAL_OPTION=y

选中后保存配置,重新编译内核。

3、USB 串口驱动加载确认

使用lsusb 和 ls /dev/ttyUSB*命令,查看是否加载成功。如果lsusb没有相关设备出来,先确认内核是否修改成功在确认硬件问题。

ls /dev/ttyUSB* 正常可以看到4个设备。

/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3

4、USBMODE确认

QMI_WWAN模式需要特定的模式支持。用AT指令先查询模式,一般为17

用 AT+GTUSBMODE? 指令查询模式,显示如下,即不用修改。

echo -e "AT+GTUSBMODE?\r\n" > /dev/ttyUSB2 ; cat /dev/ttyUSB2

+GTUSBMODE: 17

OK

如果返回值不为17、22或25时,表示模块未进入 RMNET,需要发 AT+GTUSBMODE=x(x 为 17 、 22 或 25)成功后,并重启模块,使模块切换到 RMNET 模式。

模式切换完毕后使用ifconfig命令查看网卡信息,如果出现wwan0表示wwan0驱动加载成功,如果该网卡信息没有出现则确认qmi_wwan.c文件中修改是否有缺漏,.config配置中是否添加CONFIG_USB_NET_CDCETHER=y

CONFIG_USB_USBNET=y,CONFIG_USB_NET_CDCETHER=y, CONFIG_USB_USBNET=y

4、QMI_WWAN 拨号程序编译

该模块文档提供的拨号程序与问题始终不能通过udhcpc获取到ip可能是平台兼容性没有做好,所以在网上找了个开源的拨号程序quectel-CM(quectel-cm-main),交叉编译后移植到板机上输入一下命令即可:

Example 1: ./quectel-CM

Example 2: ./quectel-CM -s 3gnet

例2第三位参数为sim卡的apn,运行成功如下图所示成功获取ip:

注:APN要对应运营商,运营商不同则需要不同APN

最后还需给wwan0网卡分配默认路由;即可成功ping通百度等外网,如果发现延迟过高先查看是否是LTE模式若不是则发送

echo -e "at+gtact=10,3\x0D\x0A" > /dev/ttyUSB1 ; cat /dev/ttyUSB1

返回

at+gtact=10,3

OK

则重新使用拨号程序获取ip。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习敲代码速度

2023年9月18日,周一晚上 今晚不想学习,但又不想玩游戏,于是找了一些练习敲代码的网站来玩玩,顺便练习一下敲代码的速度 目录 参考资料个人推荐第一个 第二个第三个 参考资料 电脑打字慢,有哪些比较好的练打字软件&a…

界面控件DevExpress的VS报表设计器 v23.1——启动速度全面提升

本文主要介绍在DevExpress v23.1这个版本发布周期中对Visual Studio报表设计器所做的改进,包括优化的启动时间、新的全局选项对话框等。 屡获大奖的界面控件套包DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力的…

用无代码搭建数据中台,竟做到如此丝滑

文章目录 需求背景系统介绍配置说明1 菜单导航2 系统自带组件导入页面(1)数据集成相关组件(2)数据服务相关组件 3 由系统组件路径添加页面(1)数据资产管理(2)数据标准管理&#xff0…

Linux工具(一)

前言:Linux是一个开源的操作系统,它拥有庞大而活跃的开发社区,为用户提供了丰富多样的工具和应用程序。这些工具不仅适用于系统管理员和开发人员,也适用于普通用户,可以帮助他们完成各种任务,从简单的文件管…

题目 1057: 二级C语言-分段函数

有一个函数如下,写一程序,输入x,输出y值。 保留两位小数 样例输入 1 样例输出 1.00 这道题的思路很简单,我直接用if判断输入的X对应的函数Y的区间,代入对应的函数,求出结果。记得变量用浮点型&#xff…

亚马逊云科技面向游戏运营活动的AI生图解决方案

随着Stable Diffusion等AI生图方案逐步普及,越来越多的场景被开发和落地。其中面向游戏C端玩家的AI生图营销活动场景正在被逐步验证:在某个游戏社区中,玩家一键从手机上传一张照片,AI会将自动识别该照片中的元素并替换成游戏中相应…

今年嵌入式行情怎么样?

今年嵌入式行情怎么样? 嵌入式技术今年可以说是IT领域中最炙手可热的之一。随着中年危机和内卷问题的出现,越来越多的互联网从业者将目光投向了嵌入式领域。国内的嵌入式市场一直受终端需求变化的影响而波动,但随着国内产业自主化的发展趋势…

Python匿名函数

简单来说,匿名函数就是懒。 结构 函数名 lambda 参数 : 函数体 fun lambda x,y : x*y*y fun(3,5)优点 可以让写代码更“懒”一点

[S2] Challenge 25 心脏病预测

问题 您是一家医疗保健公司的数据科学家,试图创建患者是否患有心脏病的预测因子。目前,您正在试验 11 种不同的特征(潜在心脏病指标)和 XGBoost 分类模型,您注意到它的性能可能会根据其调整方式而发生很大变化。在此挑…

Docker的基本操作

Docker的基本操作 操作常见指令 # 推送镜像到服务 docker push # 从服务拉去镜像 docker pull # 构建镜像 docker build # 保存镜像为一个压缩包 docker save # 加载镜像 docker load镜像加载、删除等 拉取nginx docker pull nginx查看镜像 docker images # 只查看id doc…

thinkphp:查询本周中每天中日期的数据,查询今年中每个月的数据,查询近五年每年的总数据

一、查询本周中每天中日期的数据 结果: 以今天2023-09-14为例,这一周为2023-09-11~2023-09-07 代码 后端thinkphp: //查询本周每天的的总金额数 //获取本周的起始日期和结束日期 $weekStart date(Y-m-d, strtotime(this week Monday)); $weekEnd …

【QT--使用百度地图API显示地图并绘制路线】

QT--使用百度地图API显示地图并绘制路线 前言准备工作申请百度地图密钥(AK)安装开发环境 开发过程新建项目ui界面GPSManager类主窗口Map 效果展示 前言 先吐槽一下下,本身qt学的就不咋滴,谁想到第一件事就是让写一个上位机工具,根据CAN总线传…

x86架构基础汇编知识

​ 通用寄存器 EAX 32位 函数返回值 AX 低16位 AH 高八位 AL 低八位 EBX 32位 ECX 32位 循环次数,this指针 EDX 32位 EBP 32位 栈底寄存器 ESP 32位 栈顶寄存器 ESI 源索引寄存器 EDI 目标索引寄存器 EIP 无法直接通过汇编操作 例子 mov al,0xff …

python 第一次作业

1.使用turtle换一个五环 2.设计这样一个程序:输入一个数字 判断它是不是一个质数 使用turtle换一个五环: >>> import turtle #导入模块 >>> turtle.width(10) #设置圆圈宽度 >>> turtle.color("blue&qu…

Tomcat7+ Weak Password Backend Getshell Vulnerability

漏洞描述 Tomcat 支持通过后端部署 war 文件,所以我们可以直接将 webshell 放入 Web 目录下。为了访问后端,需要权限。 Tomcat7 的权限如下: 经理(后台管理) 管理器-GUI(HTML 页面的权限)管理…

WMS系统库存条码管理

1. 定义 库存条码管理是WMS系统中的一项关键功能,通过对仓库内货物进行条码标识和管理,实现对库存的精确追踪和控制。库存条码可以是一维条码(如条形码)或二维条码(如QR码),用于唯一标识和识别…

华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)

第361题 如图所示是一台路由器的BGP输出信息。那么以下关于这段信息的描述,错误的是哪一项? <Huawei>display bgp error Error Type: Peer Error Peer Address:10.1.1.2 VRFName:Public Error Info: Router-ID conflictA、该路由器邻居地址是10.1.1.2 B、Error Type显…

SpringBoot2.0(mybatis-plus常见的增删改查和分页)

目录 一&#xff0c;mybatis-plus常见注解二&#xff0c;创建一个工具类和启动类三&#xff0c;创建实体类四&#xff0c;创建mapper接口五&#xff0c;创建service接口和impl类六&#xff0c;创建配置类七&#xff0c;创建controller八&#xff0c;使用测试工具测试增删改查和…

Reids Cluster集群部署

服务器端口说明 vim /etc/hosts 1.下载、解压、编译Redis $ mkdir -p /opt/redis && cd /opt/redis $ wget http://download.redis.io/releases/redis-6.0.6.tar.gz $ tar xzf redis-6.0.6.tar.gz 请先检查gcc的版本是否低于5&#xff0c;如果是请先升级&#xff0c…

听GPT 讲Istio源代码--pilot(7)

File: istio/pilot/pkg/model/log.go 在Istio项目中&#xff0c;istio/pilot/pkg/model/log.go文件的作用是定义了Istio Pilot的日志记录功能。 该文件中定义了一个名为log的全局日志记录器&#xff0c;并且还定义了一些与日志记录相关的变量&#xff0c;如verbose、verboseCou…