0. 环境
win10
树莓派4 + lede
rm500q

// 内核文件夹
// /home/xxjianvm/lede/build_dir/toolchain-aarch64_cortex-a72_gcc-8.4.0_musl/linux

1. 打开[KERNEL]/drivers/usb/serial/option.c
1.1 Add VID and PID

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

1.2  Add Reset-resume Mechanism
static struct usb_serial_driver option_1port_device = {
……
#ifdef CONFIG_PM
    .suspend = usb_wwan_suspend,
    .resume = usb_wwan_resume,
#if 1 //Added by Quectel
    .reset_resume = usb_wwan_resume,
#endif
#endif
};

1.3 Use MBIM, GobiNet or QMI_WWAN Driver
static int option_probe(struct usb_serial *serial, const struct usb_device_id *id) {
    struct usb_wwan_intf_private *data;
    ……
#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
    /* Store device id so we can use it during attach. */
    usb_set_serial_data(serial, (void *)id);
    return 0;
}

2. 打开[KERNEL]/drivers/usb/serial/usb_wwan.c
2.1 Add the Zero Packet Mechanism
[KERNEL]/drivers/usb/serial/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 *))
{
……
    usb_fill_bulk_urb(urb, serial->dev,
        usb_sndbulkpipe(serial->dev, endpoint) | dir,
        buf, len, callback, ctx);
        
    #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
    
    return urb;
}

3.内核添加USB网络配置选项,与EC20无太大差异:

总体来说是这几个驱动添加:
kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch kmod-usb-wdm
步骤:

1).顶层目录下执行:
# make menuconfig

2).配置 kmod-usb-serial:
Kernel modules ---> USB Support ---> <*> kmod-usb-serial..................... Support for USB-to-Serial converters

3). 配置 kmod-usb-serial-option
Kernel modules ---> USB Support ---> <*> kmod-usb-serial-option................... Support for Option HSDPA modems

4). 配置 kmod-usb-serial-wwan
Kernel modules ---> USB Support ---> -*- kmod-usb-serial-wwan..................... Support for GSM and CDMA modems
lede没有这个选项,因此我试下这几个可否替代wwan
Kernel modules ---> USB Support ---> -*- kmod-usb-net-rndis
Kernel modules ---> USB Support ---> -*- kmod-usb-serial-qualcomm

5). 配置 kmod-usb-net
Kernel modules ---> USB Support ---> <*> kmod-usb-net............... Kernel modules for USB-to-Ethernet convertors
Kernel modules ---> USB Support ---> <*> kmod-usb-wdm.............................. USB Wireless Device Management   //qmi_wwan_q 依赖

6). 配置 usb-modeswitch
Utilities ---> <*> usb-modeswitch................................ USB mode switching utility

7). 最后, 保存退出配置界面即可。

8).内核修改
# make kernel_menuconfig
Device Drivers ---> [*] USB support ---> <*> Support for Host-side USB

Device Drivers ---> [*] Network device support ---> <*> USB Network Adapters ---> <*> Multi-purpose USB Networking Framework
Device Drivers ---> [*] Network device support ---> <*> USB Network Adapters ---> <*> QMI WWAN driver for Qualcomm MSM based 3G and LTE modems //qmi Device Device Drivers ---> [*] Network device support --->  [*] PPP (point-to-point protocol) support
         <*>   PPP (point-to-point protocol) support                               │ │  
  │ │    <*>     PPP BSD-Compress compression                                      │ │  
  │ │    <*>     PPP Deflate compression                                           │ │  
  │ │    [*]     PPP filtering                                                     │ │  
  │ │    <*>     PPP MPPE compression (encryption)                                 │ │  
  │ │    [*]     PPP multilink support                                             │ │  
  │ │    <*>     PPP over Ethernet                                                 │ │  
  │ │    < >     PPP over IPv4 (PPTP)                                              │ │  
  │ │    <*>     PPP support for async serial ports                                │ │  
  │ │    <*>     PPP support for sync tty ports   
  
最后, 保存退出配置界面即可。

4. GobiNet Driver
[KERNEL]/drivers/net/usb/
4.1 添加源码到内核
把Quectel_Linux&Android_GobiNet_Driver_V1.6.2.9\GobiNet内的源文件和头文件都复制到[KERNEL]/drivers/net/usb/

4.2 修改同目录内的Makefile
添加
obj-y += GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o

5.  QMI_WWAN Driver
5.1 添加源码到内核
复制qmi_wwan_q.c到[KERNEL]/drivers/net/usb/

5.2 修改同目录内的Makefile
Please add the following statements to the file [KERNEL]/drivers/net/usb/Makefile.
# must insert qmi_wwan_q.o before qmi_wwan.o
obj-${CONFIG_USB_NET_QMI_WWAN} += qmi_wwan_q.o
obj-${CONFIG_USB_NET_QMI_WWAN} += qmi_wwan.o

6. 编译固件
make menuconfig
make -j2 V=s

用openwrt-bcm27xx-bcm2711-rpi-4-ext4-sysupgrade.img.gz。通过web可以更新固件。

[    8.365435] usbcore: registered new interface driver brcmfmac
[    8.372299] usbcore: registered new interface driver cdc_mbim
[    8.378841] usbcore: registered new interface driver option
[    8.384500] usbserial: USB Serial support registered for GSM modem (1-port)
[    8.391613] option 1-1.4:1.0: GSM modem (1-port) converter detected
[    8.398059] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0
[    8.405187] option 1-1.4:1.1: GSM modem (1-port) converter detected
[    8.411657] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[    8.418740] option 1-1.4:1.2: GSM modem (1-port) converter detected
[    8.425155] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
[    8.432228] option 1-1.4:1.3: GSM modem (1-port) converter detected
[    8.438647] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
[    8.447579] usbcore: registered new interface driver qcserial
[    8.453430] usbserial: USB Serial support registered for Qualcomm USB modem

7. 拨号工具
复制Quectel_QConnectManager_Linux_V1.6.0.16\quectel-CM到ubuntu18

交叉编译拨号工具
<1> lede arm交叉编译链配置
sudo  vi /etc/bash.bashrc
export PATH=$PATH:/home/xxjianvm/lede/staging_dir/toolchain-aarch64_cortex-a72_gcc-8.4.0_musl/bin/
source  /etc/bash.bashrc

<2> warning: environment variable 'STAGING_DIR' not defined  
sudo  vi /etc/bash.bashrc
export STAGING_DIR=$STAGING_DIR:/home/xxjianvm/lede/staging_dir/
source  /etc/bash.bashrc

<3> 修改Makefile
CROSS_COMPILE=aarch64-openwrt-linux-
make

把quectel-CM上传到板子上。

树莓派4+lede+移远5G模组RM500Q相关推荐

  1. 移远5G模组RM500U-CN在Win11下的短信和通话演示

    关键词:移远  5G  展锐芯片组  RM500U-CN  短信  text  通话  拨号   概述:5G模组主要用于跑数据流量,但其实基础的短信功能也还是支持的.而且,虽然没有音频接口,但是呼入呼 ...

  2. 移远BC20模组使用LwM2M协议接入华为IoT平台(NB-IoT专栏—进阶篇2)

    目录 1.背景 2.部署华为云 3.华为云与BC20模组进行数据收发实验 1.背景 最近在做一个智慧路灯项目,构思使用STM32结合NB-IoT模组实现数据上传和联动控制,并且可以使用GPS模块上传路 ...

  3. OpenHarmony3.1适配移远EC20模组4G上网功能

    OpenHarmony3.1适配移远EC20模组4G上网功能 一.概述 通过阅读本篇文档,您将学习到如何适配移远EC20模组到OpenHarmony3.1(以下简称OHOS),并添加4G上网功能. 本 ...

  4. 移远 EC200S 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程

    移远EC200S 4G Cat.1 模组 EC200S-CN 是移远通信推出的LTE Cat 1 无线通信模块,支持最大下行速率10Mbps 和最大上行速率5Mbps,具有超高的性价比. 同时在封装上 ...

  5. 移远BC35-G模组(NB-IoT 通信模组)AT指令测试 UDP 通信过程

    移远BC35-G NB-IoT模组 BC35-G 是一款高性能.低功耗的多频段 LTE Cat NB1 (NB-IoT) 无线通信模块,支持 B1/B3/B8/B5/B20/B28 频段,尺寸仅为23 ...

  6. 使用移远EC200N-CN模组PING谷歌

    目录 概述 AT指令 数据处理 提取数据 注意事项 概述 本文记录下使用EC200N-CN模组ping谷歌官网的测试过程.ping谷歌主要是摸底下设备在海外的联网丢包.延迟等情况.其实主要是为了记录下 ...

  7. 移远BC26模组使用MQTT协议接入阿里云(NB-IoT专栏—进阶篇4)

    目录 1.模块简介 2.阿里云物联网服务部署 3.BC26模组配置 4.数据上传 5.数据下发

  8. 移远RM500Q_5G模组规格书

    Quectel RM500Q是一个5G模块,专门为IoT/eMBB应用程序优化. 采用3GPP Rel. 15LTE技术,它支持5GNSA和SA模式. 设计在一个M.2的形式因素,RM500Q是 兼容 ...

  9. 移远BC35-G模组通过LWM2M协议接入OneNet教程

    首先平台配置: 1.注册OneNet账号(通过访问OneNet官网进入注册): 2.进入控制台,选择"全部产品服务"--"NB-IoT物联网套件": 3.添加产 ...

最新文章

  1. VBRK-RFBSK - 会計への転記ステータス
  2. 【文章】论文写作知识积累
  3. 《王者荣耀》主策划Xavier分享腾讯游戏10年在职经历
  4. 2、C#基础 - Visual Studio 的版本选择和下载
  5. 使用GZipStream实现压缩和解压缩
  6. ROBOTS.TXT屏蔽笔记、代码、示例大全
  7. python编辑编程器_用Python制作编辑器
  8. oracle sequences优化_性能优化-Oracle RAC中的Sequence Cache问题
  9. linux下如何运行脚本程序设计,Uboot 如何运行脚本
  10. 那些年踩过的坑(满目疮痍,一身狼狈)
  11. Jumony(二)jQuery的设计艺术和选择器
  12. c语言链表的数据结构,c语言实现通用数据结构(一):通用链表
  13. 日期 时间差 java_Java8中计算日期时间差
  14. 2018届华为网络技术大赛复赛组网(B)试题
  15. 【深度学习-数据加载优化-训练速度提升一倍】
  16. 7-1 约瑟夫环问题-hebust (10 分)
  17. Windows server 2019 网卡互联网检测服务
  18. Mac 下 VirtualBox ubuntu 共享空间
  19. 【目标检测】K-means和K-means++计算anchors结果比较(附完整代码,全网最详细的手把手教程)
  20. USB 电池充电规范

热门文章

  1. [英语] It_be_XXX_that_YYY强调句句式
  2. 多个安卓设备投屏到电脑_华为手机可以投屏到电脑,那其他安卓手机呢?其实非常简单...
  3. 树莓派系列(一)-——————树莓派usb串口的使用
  4. JS中1900-2100区间内的公历、农历互转的工具类
  5. ABP领域层——实体
  6. 3d打印测温模型单塔双塔tt pro专业版测温模型stl下载
  7. 四川华巨同诚:拼多多怎么规避店铺降权的问题
  8. java仿微信登录界面_android 界面设计潮流:仿微信5.2界面源码
  9. **caffe_vcpkg+vs2017+win7安装整理**
  10. 网速特别好但是访问网页特别慢