修改移远提供的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

相关文章

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空