修改移远提供的GobiNet、quectel-CM源码,使其支持有方N720 4G模块

2023-12-08 17:52

本文主要是介绍修改移远提供的GobiNet、quectel-CM源码,使其支持有方N720 4G模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        最近在研究imx6ull linux下4G模块驱动的移植,参考的移远ec20的移植方法,添加了GobiNet驱动,编译了quectel-CM工具,并且可以正常拨号,分配到ip,如下:        

        ping外网也没有压力,如下:

        但是手上还有有方N720 4G模块,可以通过pppd拨号上网,感觉比较麻烦,如果换模块了还要调用不同的ppp拨号脚本,想着能不能也和移远一样,通过quectel-CM这个直接拨号。想法很好,但是实现起来不是很容易哈。

        通过多方渠道,主要是百度,并没有找到有方官方提供的相关源码,昨天突发奇想,能不能研究一下移远的源码,看看能不能改一下呢,使其满足要求呢?毕竟GobiNet不是移远独有的,它是高通的产物。

       联想到移植驱动时都和idVendor idProduct这两个有关,移远EC20的是2C7C 0125 ,有方N720的是2949 8247 。

        我想一定和这个有关,那就打开源码看一下吧。在GobiUSBNet.c中全局搜索2C7C或者0125,找到如下代码:        

static const struct usb_device_id QuecGobiVIDPIDTable [] =
{GOBI_FIXED_INTF( 0x05c6, 0x9003 ), // Quectel UC20GOBI_FIXED_INTF( 0x05c6, 0x9215 ), // Quectel EC20 (MDM9215)GOBI_FIXED_INTF( 0x2c7c, 0x0125 ), // Quectel EC20 (MDM9X07)/EC25/EG25GOBI_FIXED_INTF( 0x2c7c, 0x0121 ), // Quectel EC21GOBI_FIXED_INTF( 0x2c7c, 0x0306 ), // Quectel EP06GOBI_FIXED_INTF( 0x2c7c, 0x0435 ), // Quectel AG35GOBI_FIXED_INTF( 0x2c7c, 0x0296 ), // Quectel BG96GOBI_FIXED_INTF( 0x2c7c, 0x0191 ), // Quectel EG91GOBI_FIXED_INTF( 0x2c7c, 0x0195 ), // Quectel EG95	GOBI_FIXED_INTF( 0x2c7c, 0x0512 ), // Quectel EG12/EP12/EM12/EG16/EG18,SDx20GOBI_FIXED_INTF( 0x2c7c, 0x0620 ), // Quectel EG20,SDx24GOBI_FIXED_INTF( 0x2c7c, 0x0800 ), // Quectel RG500Q,RM500Q,RM510Q,SDX55//Terminating entry{ }
};

        多么的熟悉呀,添加linux 4G模块驱动的时候好像也有和这个差不多的东西,如下:

        果断将有方n720的添加进去,编译一下行不行。

        使用没有添加有方N720支持的内核启动设备后如下,并没有GobiNet相关的提示。

        使用添加有方N720支持的内核启动设备后如下,就有GobiNet相关的提示了。这个证明我的想法的正确的。

        使用quectel-CM工具试一下看看能不能拨号成功,好家伙,竟然没成功。报错了,如下:

        初步猜测应该是GobiUSBNet.c文件里应该还有其他与idVendor idProduct相关的操作,继续搜索2c7c,发现如下代码:

        这个应该就是关键部分,因为其他的地方都没有2c7c相关的内容了,通过上下文引用知道

pGobiDev->mbMdm9x07 pGobiDev->mbMdm9x06是一个bool类型,就是一个标志,代表不同的模块类型,同时pGobiDev->mbMdm9x06上下文中只有这个地方使用了,那这个就应该不需要考虑了。那就从pGobiDev->mbMdm9x07下手了,仿照原来的代码将有方n720的也加进去,改成如下:

        重新编译内核启动,如下:

        竟然多了一句creating qcqmi0,这个足以证明上面的改动有对了。

        quectel-CM拨号试一下

        虽然成功拨号了,但是发现缺少

        Find /sys/bus/usb/devices/1-1 idVendor=2c7c idProduct=0125这个提示,应该是quectel-CM源码也需要修改。打开源码,在main.c文件中搜索2c7c,果然发现了秘密,如下:

        2c7c是移远EC20模块的idVendor ,05c6是QUALCOMM(高通)的idVendor ,这个说明了

quectel-CM源码也不是移远独创的,也是用的高通的源码。既然如此,那就将有方N720的加上,如下:

        重新重新编译一下quectel-CM​​​​​​​,使用新的quectel-CM拨号。如下:

        成功了,哈哈哈。

        不仅分配了ip,启动了usb0网卡,还有了Find /sys/bus/usb/devices/1-1 idVendor=2949 idProduct=8247提示。

        试一下ping外网完全无压力,如下:

        至此,我认为GobiNet及quectel-CM支持有方N720 4G模块的修改工作应该是完成了。

        修改后的源码可以通过如下链接下载

        GobiNet

        CM​​​​​​​

        这个只是我自己研究测试使用,至于稳定性还需要验证,如果谁用了我修改的源码,导致项目或者设备出问题的概不负责。

        理论上市面上的4G模块都可以通过这样修改来实现支持。

这篇关于修改移远提供的GobiNet、quectel-CM源码,使其支持有方N720 4G模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/470800

相关文章

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx