AM335x移植EC20 4G模块驱动简易教程

AM335x移植EC20 4G模块驱动简易教程

  • 秀才40分

        近来公司业务发展比较顺利,我的可用时间也开始多了起来;想起两年前自己立下的开源梦想还未实现,zcore开源核心板和Tigerboard都没有精力去推广。就想把之前所做的一些工作资料进行整理。
        由于alan工作的关系,经常要用到各种4G模块。市面上4G模块比较多,贵的便宜的都有,很多合作伙伴初次接触4G模块时有很多困惑。
    在这里把自己的一些经历整理下来。

    关于4G模块常见的品牌与型号:

      
    品牌
      
    型号
    市场价格
    芯片组
    状态
    HUAWEI
    ME909s-821
    210-260
    海思芯片,只有五模
    在售
    HUAWEI
    ME909s-521
    400左右,没用过
    高通芯片
    在售
    中兴
    ME3760
    260左右
    中芯微
    停产
    中兴
    MW3630
    210左右
    高通9x07
    在售
    移远
    EC20
    240-290
    高通9x15
    在售
    移远
    EC20 V2.0
    190-240
    高通9x07
    在售
    龙尚
    8300系列
    260左右
    高通9x15
    停产
    龙尚
    U9300系列
    200左右的区间
    高通9x07
    在售


    综合分析:今年和接下来的时间里基本会是高通9x07和海思方案的天下,由于海思基本是华为在用;其它厂家基本转向9x07了。
    中兴一代的3760、龙尚的8300系列产品是市场上最早见的模块;技术相当不成熟,加上原厂的支持较差,不建议使用。
    还有一些品牌,因为市场占有率较小未统计在表格中。
            移远在几家中技术支持算是最好的了,加上性价比较好。后面慢慢变成了我们用的主要模块。今天就以移远模块为例,说说linux驱动的移植。

    平台:TI AM3352
    OS:ubuntu 12.04 arm
    内核:3.2.0

    第一步:内核驱动的修改。
            相关的配置项位于menuconfig的Device Drivers->USB Support-> USB Serial Converter support-> USB driver for GSM and CDMA modems
            在上面的配置项中可以看到USB Serial Converter,实际上4G模块在操作系统中的介面就是串口设备(USB转的Serial),所谓的内核驱动移植其实就是在USB转串口驱动中加上对应usb设备的pid和vid,具体可以通过lsusb查询得到。
            具体代码修改:
            1、在”#define QUALCOMM_VENDOR_ID                        0x05C6”下面加上移远模块的PID和VID。

    //add by alan 150820
    #define QUECTEL_VENDOR_ID                        0x2C7C

    #define QUECTEL_PRODUCT_UC15                        0x9090
    #define QUECTEL_PRODUCT_UC20                        0x9003
    #define QUECTEL_PRODUCT_EC20                        0x9215
    #define QUECTEL_PRODUCT_EC25                        0x0125
    #define QUECTEL_PRODUCT_EC21                        0x0121

    2、在“static const struct usb_device_id option_ids[]”函数中的
    “{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */”后面加上

            //add by alan 150820
            { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)}, /* QUECTEL UC15 */
            { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20)}, /* QUECTEL UC20 */
            { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_EC20)}, /* QUECTEL EC20 */
            { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25)}, /* QUECTEL EC25 */
            { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21)}, /* QUECTEL EC21 */

    3、在” option_probe”函数的”         data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);”前面加上
            // Add to cancel the binding of UC20 NDIS interface -> start
            if (serial->dev->descriptor.idVendor == 0x05c6 &&
            serial->dev->descriptor.idProduct == 0x9003 &&
            serial->interface->cur_altsetting->desc.bInterfaceNumber == 4)
            return -ENODEV;
            // Add to cancel the binding of UC20 NDIS interface -> end
            // Add to cancel the binding of EC20 NDIS interface -> start
            if (serial->dev->descriptor.idVendor == 0x05c6 &&
            serial->dev->descriptor.idProduct == 0x9215 &&
            serial->interface->cur_altsetting->desc.bInterfaceNumber == 4)
            return -ENODEV;
            // Add to cancel the binding of EC20 NDIS interface -> end
            // Add to cancel the binding of EC25 NDIS interface -> start
            if (serial->dev->descriptor.idVendor == 0x2C7C &&
            serial->interface->cur_altsetting->desc.bInterfaceNumber == 4)
            return -ENODEV;
            // Add to cancel the binding of EC25 NDIS interface -> end
    注:其实在步骤1、步骤2中增加的代码已经足够将模块驱动起来了,这里的代码主要是为了NDIS方式拨号。

    4、模块一般有多种拨号方式,比较老的有PPP方式拨号,很多用过3G模块的朋友都会知道这个方法。由于4G模块的上下行速度都非常快,用PPP方式受协议限制速率跑不高,一般现在建议用NDIS或QWAN方式。移远模块自带了一套驱动和拨号软件叫GobiNet。将
    Quectel_Linux_GobiNet_SR01A02V15.zip解压到内核的drivers/net/usb/目录下,并修改Makefile,添加:
    obj-$(CONFIG_USB_GOBI_NET)       += Quectel_GobiNet_SR01A02V13/
    修改Kconfig文件,在endmenu前加上:
    config USB_GOBI_NET
            tristate "Gobi USB Net driver for Quectel module"
            help
                    Support Quectel module.
                    
                    A modem manager with support for GobiNet is recommended.
                    To compile this driver as a module, choose M here: the module will be called GobiNet.

    5、做完这些,就可以进行内核的配置了。
            Make menuconfig,确认以下选项:
    Device Drivers->USB Support-> USB Serial Converter support-> USB driver for GSM and CDMA modems       选择为M或*
    Device Drivers->Network device support->USB Network Adapters->Gobi USB Net driver for Quectel module       选择为M

    6、编译并下载到目标机上测试
    Make uImage && make modules

    7、系统启动后,ls /dev/ttyUSB*,正如驱动正常一般会有/dev/ttyUSB0到ttyUSB3的接口出现,说明USB Serial的驱动已正常工作。

    8、编译quectel-CM拨号程序。这个软件的使用比较简单,直接执行就行了,软件帮你自动识别APN。

    写在最后:这个文档主要目的是把整个移植的流程进行说明,实际应用中使用其它模块也可以的。以前3G时代的PPP尽量不要用在4G模块上,否则模块的性能根本跑不出来。
            至于模块的硬件电路,供电部分非常重要。最好采用独立电源,而且最大电流能支持3A,并就近加上470的钽电容,有了这个设计基本上可以兼容市面上大部分的模块了。
            模块的驱动资料,可以加我的QQ 2598681740。我会尽快发给你.

  • 榜眼42335分

    谢谢您的分享,我们会建议管理员加精。

  • 秀才630分

    您好,请问调试过sim7100ce么?您调试过的4G模块里哪款信号好呢?