• [原创]移远RM500U-CN模组驱动移植


    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!!!

    __EOF__

  • 本文作者: zhiJun
  • 本文链接: https://www.cnblogs.com/zhijun1996/p/16484126.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    尼莫地平PEG-PLGA纳米粒|葛根素PEG-PLGA纳米粒(Pue-NPs)|负载替米沙坦PLGA纳米粒
    Odoo 15开发手册第六章 模型 - 结构化应用数据
    Bootstrap的行、列布局设计(网络系统设计)
    使用Redis解决高并发方案 以及 思路讲解
    [SS528V100 22AP30 Hi3531DV200开发注意事项]
    XMLHttpRequest介绍
    【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(8 月 24 日论文合集)
    万字总结线程安全问题
    【SSRF-01】服务器端请求伪造漏洞原理及利用实例
    使用虚拟机在3台centos7系统安装docker和k8s集群
  • 原文地址:https://www.cnblogs.com/zhijun1996/p/16484126.html