1. 简介

  • 中国广电正式放号了,为了支持广电700MHz的5G基站,需要换用新的5G模组.移远通信的RM500U模组正好可以满足我们的使用要求;
  • 我们选用该模组的原因:双卡单待 支持SIM卡热插拔 支持中国广电700MHz基站 版本升级方便
  • 具体参数请到公司官网查看吧> https://www.quectel.com/cn/product/5g-rm500u-cn

2. 编译驱动

2.1 获取驱动包

  • 不用多说,请联系厂商获取

2.2 选择合适的版本

  • 解压
tar -xvf Quectel_Linux_USB_Serial_Option_Driver_20211012.tgz
  • 解压成功后,会产生一个目录20211012,其中存放着各个版本的驱动源码,如下

  • 根据自己的内核版本,选择相应版本的驱动.比如我的内核版本是3.17.0,我就选择v3.17.1版本的驱动
# 查看内核版本
$ uname -a
Linux (none) 3.17.0-xilinx #1 SMP PREEMPT Fri Nov 3 11:57:52 CST 2017 armv7l GNU/Linux # 选择版本最接近的驱动
$ cd 20211012/v3.17.1/

2.3 修改驱动源码

  • 奇怪,移远提供的源码包默认竟然不支持RM500U-CN模组,还需要自己在源码中手动添加对RM500U-CN模组的支持,难道是因为这个模组比较新,驱动还未更新?(2022/7/16)
  • 修改驱动源码路径下的drivers/usb/serial/option.c,添加对RM500U-CN模组的支持
  • linux下lsusb命令可以看到模组对应的PIDVID分别为0x2C7C0x0900,将其添加到option.coption_ids[]数组中,如下图:

2.4 创建驱动安装目录

  • 因为并不是在编译机上进行安装,需要进行交叉编译,因此创建一个驱动的安装目录,便于后续驱动移植
$ make install

2.5 交叉编译

  • 修改Makefile如下:
# 指明内核源码路径,这里因为有些敏感信息,我隐藏了一部分路径,修改成自己的源码路径即可
KERNELDIR := /***/***/***/***/***/kernel/build/linux-***-v2014.4 # 内核源码路径
PWD := $(shell pwd) obj-m+=./drivers/usb/serial/option.o
obj-m+=./drivers/usb/serial/usb_wwan.o
obj-m+=./drivers/usb/serial/qcserial.o modules: clean
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules install: modules
# 这里表示编译完成后,执行make install时将驱动拷贝到步骤2.4自定义的路径下
cp $(PWD)/drivers/usb/serial/*.ko ./install clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
  • 开始编译,指定交叉编译工具
# make install ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
  • 等待编译完成,查看驱动安装目录:
$ ls install/
option.ko qcserial.ko usb_wwan.ko
  • 编译完成

3. 安装驱动

3.1 将编译好的驱动拷贝到目标机上,安装之

# insmod usb_wwan.ko
# insmod option.ko
# insmod qcserial.ko

3.2 检查驱动是否正常

  • 驱动安装完成后,正常情况下就会在/dev目录下产生5个ttyUSB,dmesg如下:
# dmesg | grep ttyUSB*
[ 1121.543526] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB9
[ 1121.593404] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB10
[ 1121.614269] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB11
[ 1121.655317] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB12
[ 1121.684846] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB13
  • 如果驱动安装过程中没有报错,但是模组没有识别,重新给模组上下电试试

4. 问题排查

Q:驱动安装正常,设备节点也正常,但是ifconfig看不到5G模组对应的interface,这是什么原因呢?

  • 因为RM500U-CN模组默认使用的是USB NCM驱动,但是我司的嵌入式设备上使用的是cdc_ether驱动,需要修改5G模组的模式
  • 使用minicom 或 microcom输入如下AT指令,并重启模组(minicom或microcom如何使用这里就不赘述了,网上资料一大堆):
# minicom -D /dev/ttyUSB11
AT+QCFG="usbnet",1 # 重启模组生效
  • 模组重启后,dmesg可以看到如下信息:说明usb0就是5G模组对应的interface
[ 1121.500432] cdc_ether 1-1.1:1.0 usb0: register 'cdc_ether' at usb-zynq-ehci.0-1.1, CDC Ethernet Device, 3e:37:f1:99:c9:6e

5. 常用AT指令

#查询卡是否成功识别
AT+CPIN?
+CPIN: READY OK #查询APN
AT+CGDCONT?
+CGDCONT: 1,"IPV4V6","3gnet","0.0.0.0",0,0,0,0,,,,,,0,,,0,,0,0,0,0
+CGDCONT: 11,"IPV4V6","ims","0.0.0.0",0,0,0,0,,,,,,0,,,0,,0,0,0,0 OK #查询运营商
AT+QSPN
+QSPN: "CHN-UNICOM","UNICOM","CHN-UNICOM",0,"46001" OK #设置APN
AT+CGDCONT=1,"IP","3gnet"
OK #查询网络信息:访问计数,运营商,频段
AT+QNWINFO
+QNWINFO: "FDD LTE",46001,"LTE BAND 3",1506
+QNWINFO: "NR5G-NSA",46001,"",0 OK #查询网络配置优先级
AT+QNWPREFCFG="mode_pref"
+QNWPREFCFG: "mode_pref",AUTO OK #设置NSA入网
AT+QNWPREFCFG="mode_pref",NR5G-NSA
OK #设置SA入网
AT+QNWPREFCFG="mode_pref",NR5G-SA
OK #设置模组自动选择入网方式及优先级
AT+QNWPREFCFG="mode_pref",AUTO
OK #拨号
AT+QNETDEVCTL=1,1,0
OK #查询IP
AT+CGPADDR
+CGPADDR: 1,"10.66.98.208"
+CGPADDR: 11,"" OK #查询信号强度NSA
AT+QENG="servingcell"
+QENG: "servingcell", "NOCONN"
+QENG: "LTE","FDD",460,01,B61D52,312,350,1,3,3,184B,-88,-9,-62,8,12,0,37
+QENG: "NR5G-NSA",460,01,589,-88,17,-3,627264,78,0,6219,1 OK #查询信号强度SA
AT+QENG="servingcell"
+QENG: "servingcell","NOCONN","NR5G-SA","TDD",460,11,596961006,341,590E02,627264,78,100,-88,-10,5,20,28,1 OK #查询运营商
AT+QSPN
+QSPN: "CHN-UNICOM","UNICOM","CHN-UNICOM",0,"46001" OK #查询运营商的另一种方法
AT+COPS=3,1
OK
AT+COPS?
+COPS: 0,1,"CUCC",13 OK #查询当前使用的卡槽
AT+QUIMSLOT?
+QUIMSLOT: 1 OK #切换为卡槽2
AT+QUIMSLOT=2
OK #切换为卡槽1
AT+QUIMSLOT=1
OK #查看模组温度
AT+QTEMP
+QTEMP: "soc-thermal","33"
+QTEMP: "pa-thermal","31"
+QTEMP: "pa5g-thermal","31"
+QTEMP: "board-thermal","32" OK #设置用户名,密码,鉴权方式
AT+QICSGP=1,3,"3gnet","cogent","cogent",2
OK #查询用户名,密码,鉴权方式
AT+QICSGP?
+QICSGP: 1,1,"cmnet","user","passwd",3 OK #开启热插拔,使用该指令时模组中不能插卡
AT+QSIMDET=1,1
#查看热插拔状态
AT+QSIMDET?

NOTE:

  • 本文为原创文章,转载请注明出处
  • 禁止转载到CSDN!!!

[原创]移远RM500U-CN模组驱动移植的更多相关文章

  1. 移远模组-BC95-工作模式之间关系

    三种连接状态下,均可发送上行数据( CoAP/UDP): IDLE 下发送数据, 模块会进入 CONNECT 状态: PSM 下发送是数据会唤醒模块, 进入 CONNECT,或者当 TAU(TAU 的 ...

  2. 将移远通信的EC20驱动移植到NUC972上(转)

    源: 将移远通信的EC20驱动移植到NUC972上

  3. NB-IoT移远BC95使用小结

    移远-BC95-测试前准备 1.  设备连接主串口,串口调试助手波特率使用9600,选择对应的端口号.在串口调试助手上输入AT发送,查看是否有OK返回. 如果想修改波特可以通过下面的AT来修改 AT+ ...

  4. 最全的NB-IoT芯片厂商、模组厂商信息

    NB-IoT作为LPWAN(低功耗广域网)的新兴技术,因为具有低功耗.低成本.广覆盖.海量节点等优势,并且在授权频段可以与2G.3G无缝连接而被运营商所青睐且接受.特别是到了2017年,据统计全球有5 ...

  5. NFC模组,开发NFC功能 仅仅要几条指令的事情

    特点:实现NFC透明传输.内置NFC协议栈,支持UART串口直接读写,用于门禁能够同一时候兼容手机和卡片开门,还能实现动态密钥,读到的NFC数据自己主动串口输出,会串口就能开发NFC,不须要研究LLC ...

  6. 第五部分 linux系统管理员 开机流程 模组管理 与loader

    第五部分   linux系统管理员  开机流程  模组管理  与loader   开机流程分析 cmos保存电脑硬件的参数 bios 基本的输入输出系统  读取硬件的软件 MBR  master bo ...

  7. android camera(一):camera模组CMM介绍

    一.摄像头模组(CCM)介绍: 1.camera特写 摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件.先来张特写,各种样子的都有,不过我前一段 ...

  8. 【转】android camera(一):camera模组CMM介绍

    关键词:android  camera CMM 模组 camera参数平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210)  作者:xubin ...

  9. android camera(一):camera模组CMM介绍【转】

    转自:https://blog.csdn.net/kevinx_xu/article/details/8821818 androidcmm图像处理工作手机三星 关键词:android  camera ...

随机推荐

  1. Django-----cookie&session

    cookie 保存在用户浏览器端的一个键值对(别人给的凭证) 服务端可以向用户浏览器写cookie 客户端每次发请求会携带cookie去(放在请求头里面) 淘宝的cookie  京东的cookie(h ...

  2. C#/VB.NET 合并PDF页面

    本文以C#及vb.net代码为例介绍如何来实现合并PDF页面内容.本文中的合并并非将两个文档简单合并为一个文档,而是将多个页面内容合并到一个页面,目的是减少页面上的空白区域,使页面布局更为紧凑.合理. ...

  3. 通过配置文件(.htaccess)实现文件上传

    一·什么是服务器配置文件.htaccess 许多服务器还允许开发人员在各个目录中创建特殊的配置文件,以便覆盖或添加一个或多个全局设置.例如,Apache 服务器将从一个名为(.htaccess如果存在 ...

  4. [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了

    @ 目录 *本文说明 请大家务必查看 前言 首先介绍一下主角:Hexo 什么是 Hexo? 环境准备 详细版 入门:搭建步骤 安装git: 安装node: 安装Hexo: 进阶:hexo基本操作 发布 ...

  5. Java泛型类型擦除问题

    以前就了解过Java泛型的实现是不完整的,最近在做一些代码重构的时候遇到一些Java泛型类型擦除的问题,简单的来说,Java泛型中所指定的类型在编译时会将其去除,因此List 和 List 在编译成字 ...

  6. OAuth2.0之OLTU实现举例

    一.场景 三个角色:用户(user),web应用(client),资源服务器和授权服务器合为服务器(server) 用户登录登录后可查看自己的信息 二.准备 2.1 数据库 schema drop t ...

  7. .NET MAUI 正式版GA发布

    .NET MAUI – 一个代码库,多个平台 欢迎使用 .NET 多平台应用 UI.此版本标志着我们统一 .NET 平台的多年旅程中的新里程碑.现在,您和超过 500 万其他 .NET 开发人员拥有了 ...

  8. 第06组 Alpha冲刺 (2/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3. 黄少丹 4. 董翔云 5.曾丽莉 6. 詹鑫冰 7.鲍凌函 8.杜筱 9.曹兰英 10. 吴沅静 1.3 冲刺成果展示 1 ...

  9. 基于RabbltMQ延迟插件实现延迟队列代码示例

    上一篇文章写了docker安装RabbitMQ及延迟插件的安装,这篇的话是基于RabbitMQ延迟插件实现延迟队列的示例 那么废话不多说 直接上代码!! 首先创建延迟队列配置类 DelayedQueu ...

  10. 面试突击54:MySQL 常用引擎有哪些?

    MySQL 有很多存储引擎(也叫数据引擎),所谓的存储引擎是指用于存储.处理和保护数据的核心服务.也就是存储引擎是数据库的底层软件组织.在 MySQL 中可以使用"show engines& ...