移远RM500Q模块直连ubuntu实现拨号上网

2023-10-21 18:30

本文主要是介绍移远RM500Q模块直连ubuntu实现拨号上网,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RM500Q驱动配置

  • 1.环境配置与内核下载
  • 2.修改内核文件
  • 3.内核设置与编译
  • 4.QMI,GobiNet驱动的安装
  • 5.QConnectManager的安装
  • 6.拨号上网
  • 7.问题解决

1.环境配置与内核下载

首先将虚拟机磁盘空间设置为100G,运行内存4G,不够的扩容或者重装系统
需要将虚拟机的USB兼容性设置到3.1或者3.0
以Ubuntu 20.04为例

  1. uname -r:
    查看当前内核版本

  2. sudo apt search linux-source:
    查看当前可用的内核

  3. 下载跟当前内核版本相同的内核,命令的后面加上内核号,例如,我的内核版本是5.4.0-54-generic,使用命令sudo apt-get install linux-source-5.4.0下载

  4. 打开 /usr/src 目录 解压内核 tar xvf linux-source-5.4.0.tar.bz2 -C ~/,解压到家目录下/home/ubuntu/linux-source-5.4.0,后续的操作中这个目录就是内核的目录

  5. 安装必要的程序和库
    sudo apt-get install bison -y
    sudo apt-get install flex
    sudo apt-get install libncurses5-dev
    sudo apt-get install lib32ncurses5
    sudo apt-get install lib32z1
    sudo apt-get install libssl-dev
    sudo apt-get install lzop
    sudo apt-get install libelf-dev

  6. 安装arm-linux-gcc交叉编译器

由于此Ubuntu20.04 是64 位的Ubuntu 系统,就安装64 位的arm-linux-gcc 交叉编译器,直接安装就能成功。链接:https://pan.baidu.com/s/1SffxkJ2ZS17d1F1aYY3pSA
提取码:gydq

把下载好的安装包移动到根目录下的/tmp 目录中

使用tar 命令解压安装包,执行指令sudo tar -xjvf /tmp/arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /,执行此命令会把安装包解压到根目录下的opt 的TuxamitoSoftToolchains 里面(/opt/TuxamitoSoftToolchains)

将压缩包解压完成之后,在/usr/local 中创建一个新的目录arm,执行指令
sudo mkdir /usr/local/arm

创建arm 目录成功后,还需要给它解放全部权限,执行指令sudo chmod 777 /usr/local/arm

在解压出来的目录中找到并把整个gcc-4.6.4 目录复制到刚刚建好的arm 目录中,执行指令
cd /opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/
再执行cp 复制命令,-r 表示整个目录以及里面的任何东西
sudo cp -r gcc-4.6.4 /usr/local/arm

打开/etc/profile 配置环境变量和库变量,目的是以后可以在任何位置使用该交叉编译器,执行指令sudo vi /etc/profile
用vi 或者vim 打开后,在文件最后添加两行,并输入以下代码:第一行是添加执行程序的环境变量,第二行是库文件的路径

export PATH=$PATH:/usr/local/arm/gcc-4.6.4/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/gcc-4.6.4/lib

使用source 命令重新加载生效该配置文件,执行指令source /etc/profile
检验是否安装成功,在Terminal 输入以下命令输出版本信息,执行指令arm-linux-gcc -v
在这里插入图片描述

2.修改内核文件

  1. 添加模组的PID和VID
    进入到内核目录下,我的是~/linux-source-5.4.0,进入到linux-source-5.4.0/drivers/usb/serial目录,使用gedit打开option.c文件,按照要求在static const struct usb_device_id option_ids[] 函数里面添加相应信息
#if 1 //Added by Quectel
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC20 R2.0/EC20 R2.1/EC25/EG25-G/EM05 */
{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21/EG21-G */
{ USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
{ USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
{ USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
{ USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EM12/EG18 */
{ USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
{ USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */
{ USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
{ USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */
{ USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520R */
{ USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550R */
{ USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */
{ USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500Q/RM500Q/RG510Q/RM510Q */
#endif

退出时等gedit左下角保存完后再退出

  1. 在此内核路径下/linux-source-5.4.0/drivers/usb/serial 执行指令gedit qcserial.c
    {USB_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */ 禁用掉。

  2. 在此内核路径下/linux-source-5.4.0/drivers/net/usb 执行指令gedit qmi_wwan.c
    {QMI_GOBI_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */ 禁掉。

  3. 添加零包机制
    在此内核路径下/linux-source-5.4.0/drivers/usb/serial 执行指令gedit usb_wwan.c
    将以下语句添加到static struct urb *usb_wwan_setup_urb(struct usb_serial *serial, int endpoint,int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *))函数中

#if 1 //Added by Quectel for zero packet
if (dir == USB_DIR_OUT) {
struct usb_device_descriptor *desc = &serial->dev->descriptor;
if (desc->idVendor == cpu_to_le16(0x2C7C))
urb->transfer_flags |= URB_ZERO_PACKET;
}
#endif

在这里插入图片描述

  1. 添加 Reset-resume 机制
    在此路径下linux-source-5.4.0/drivers/usb/serial 执行指令gedit option.c 按照要求在static struct
    usb_serial_driver option_1port_device 函数里面添加相应信息
#if 1 //Added by Quectel
.reset_resume = usb_wwan_resume,
#endif

在这里插入图片描述

  1. 使用MBIM, GobiNet or QMI_WWAN 驱动
    在此内核路径下/linux-source-5.4.0/drivers/usb/serial 执行指令gedit option.c,讲下列代码加入到制定的位置
#if 1 //Added by Quectel
//Quectel modules’s interface 4 can be used as USB network device
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
//some interfaces can be used as USB Network device (ecm, rndis, mbim)
if (serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF) {
return -ENODEV;
}
//interface 4 can be used as USB Network device (qmi)
else if (serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) {
return -ENODEV;
}
}
#endif

在这里插入图片描述

3.内核设置与编译

  1. 切换到内核目录下(/home/ubuntu/linux-source-5.4.0),执行make menuconfig,找到Device Drivers →USB Support →USB Serial Converter support →USB driver for GSM and CDMA modems选项,选择保存,名称默认.config即可,然后退出 在这里插入图片描述

  2. 执行make bzImage(半小时左右)

  3. 执行make moudles(三个小时左右)

  4. 执行make modules_install

  5. 执行make install

  6. 执行sudo mkinitramfs -o initrd.img-5.4.65 5.4.65,完成之后检查/lib/modules下有没有生成镜像文件

  7. 低版本的ubuntu可能需要执行前两步,ubuntu20.04换阿里的源可以直接执行最后一步
    sudo add-apt-repository ppa:danielrichter2007/grub-customizer
    sudo apt-get update
    sudo apt-get install grub-customizer

  8. 执行指令 grub-customizer,出现下面的界面后退出即可
    在这里插入图片描述

  9. 到这里基本安装完毕,插入模块并选择连接到虚拟机,/dev目录下出现ttyUSB0,1,2,3等说明安装成功

4.QMI,GobiNet驱动的安装

这里需要使用到两个Linux集成驱动文件,可以找销售商要,或者留言我私发
在这里插入图片描述

将文件夹复制到虚拟机上,并分别在目录下执行sudo make install,完成两个驱动的安装。
QMI驱动安装完成之后可以在/dev目录下可看到节点qcqmi0.

5.QConnectManager的安装

  1. 首先安装git, sudo apt-get install git
  2. 执行命令git clone https://github.com/friendlyarm/quectel-cm.git将文件克隆到本地
  3. 切换到目录下,执行make
  4. 执行命令sudo cp quectel-CM /usr/bin/
  5. 下载busybox udhcpc源码,链接https://busybox.net/我这里下载的版本是1.32.0
  6. 复制到虚拟机中,找到文件[BUSYBOX]/examples/udhcp/simple.script,重命名为default.script
  7. 新建目录/usr/share/udhcpc/,sudo mkdir /usr/share/udhcpc
  8. 将default.script复制到新建的目录下,sudo cp default.script /usr/share/udhcpc/
  9. 赋予权限,chmod 755 /usr/share/udhcpc/default.script
  10. 安装ifconfig,sudo apt-get install net-tools

6.拨号上网

切换到quectel-cm目录下,执行sudo quectel-CM &
在这里插入图片描述
完成拨号

7.问题解决

  1. 如果出现执行sudo quectel-CM &没有反应的情况,如下图

    先随便输入一个命令,如ls,会出现已停止字样
    在这里插入图片描述
    随后执行命令sudo cp quectel-CM /usr/bin/,再次拨号即正常

  2. 实际上第一个驱动也就是ttyUSB1,2,3那个驱动也是可以直接通过文件安装的,不需要编译内核那么麻烦

  3. 使用5G卡测试的时候,拨号总是失败,使用AT+CSQ测试的时候返回值是99,99,AT+CGREG?命令测试返回值是0,0。应该是没有注册上网络,解决办法:
    依次输入
    at+qeng=“servingcell”
    AT+QNWPREFCFG= “nr5g_band”,0
    at+qeng=“servingcell”
    此时再次拨号,便能成功,该命令是否通用未知,对这方面不懂

  4. AT测试指令在哪里输入?
    sudo busybox microcom /dev/ttyUSB2然后输入AT指令即可得到返回值

  5. 拨号成功并获取到IP地址后依旧无法上网,在Ubuntu 20.04中打开设置,点击网络,拨号成功时会出现USB以太网,将其打开即可上网

这篇关于移远RM500Q模块直连ubuntu实现拨号上网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张