7 linux EC20 4G模块移植

4G网络连接简介

大部分4G模块实际的通信接口都是USB,所以4G模块的驱动就转换为了USB的驱动,而这些4G模块厂家都提供了详细的文档讲解如何在Linux下使用4G模块,以及修改Linux内核加入4G模块驱动。下面介绍如何移植 Linux USB 转串口驱动USB 网卡驱动。

USB转串口驱动

EC20 4G模块驱动修改

添加USB设备信息(VID/PID)

根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备。VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID,以便区别相同厂家的不同设备。
我们需要在Linux内核中添加EC20的USB设备信息,因为EC20 4G模块使用的是USB接口。打开 Linux 源码的 drivers/usb/serial/option.c 文件,首先定义 EC20 的 ID 宏。
在这里插入图片描述

添加USB零包机制

对于 USB 请求块批量输出,如果发送的数据长度是 USB 数据包长的整数倍,需要额外再发送一个长度为零的数据包以通知对端数据传送完毕。
对 于 Linux 内 核 2.6.35 及以上版本,添加如下语句至文件
[KERNEL]/drivers/usb/serial/usb_wwan.c。
在这里插入图片描述
在这里插入图片描述

static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
                                      int endpoint,
                                      int dir, void *ctx, char *buf, int len,
                                      void (*callback) (struct urb *))
{
        struct usb_serial *serial = port->serial;
        struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
        struct urb *urb;
        struct usb_device_descriptor *desc = &serial->dev->descriptor;

        urb = usb_alloc_urb(0, GFP_KERNEL);     /* No ISO */
        if (!urb)
                return NULL;

        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

增加复位恢复机制

当 MCU 进入挂起或睡眠模式时,某些 USB 主机控制器或 USB 集线器可能会断电或复位,且 MCU 退出挂起或睡眠模式后无法自动恢复 USB 设备。请添加以下语句以使能复位恢复流程。
对于 Linux 内核 3.5 及以上版本,请添加如下语句至文件[KERNEL]/drivers/usb/serial/option.c。
在这里插入图片描述

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
};

使能内核配置项

⚫ CONFIG_USB_SERIAL
⚫ CONFIG_USB_SERIAL_WWAN
⚫ CONFIG_USB_SERIAL_OPTION

Device Drivers  --->  
	 [*] USB support  --->   
	 		 <*>   USB Serial Converter support  --->
	 		 		 <*>   USB driver for GSM and CDMA modems

配置完成
在这里插入图片描述

USB网卡驱动移植

  1. 进入到kernel目录
  2. 执行如下命令设置环境变量并导出用户设备操作系统的 defconfig 文件。
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make rv1126_defconfig

在执行make rv1126_defconfig的时候,可能会把刚才配置usb转串口驱动的使能项给覆盖掉,所以,可以在rv1126_defconfig文件里面打开使能项。
在这里插入图片描述

  1. 执行如下命令通过如下图所示选项启用 USB 网卡功能。
> Device Drivers
  > Network device support
    	 [*]   Wireless LAN  --->    
    	 	 <*>   Wireless RNDIS USB support

这里需要先打开,不然后面的配置项不会出现。
在这里插入图片描述

使能PPP拨号

PPP 拨号相对于 USB 网卡上网方式,有如下缺点:
⚫ 使用方式更复杂
⚫ 相同网速下会消耗更高的 CPU
⚫ 数据传输达不到理论速率
因此,不推荐使用 PPP 拨号。如果确实需要,则必须使能以下 Linux 内核配置项:
⚫ CONFIG_PPP
⚫ CONFIG_PPP_ASYNC
⚫ CONFIG_PPP_SYNC_TTY
⚫ CONFIG_PPP_DEFLATE

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<( ̄︶ ̄)Okay.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值