打印
[无线通信]

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

[复制链接]
29626|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjtech|  楼主 | 2017-3-21 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近来公司业务发展比较顺利,我的可用时间也开始多了起来;想起两年前自己立下的开源梦想还未实现,zcore开源核心板和Tigerboard都没有精力去推广。就想把之前所做的一些工作资料进行整理。
由于alan工作的关系,经常要用到各种4G模块。市面上4G模块比较多,贵的便宜的都有,很多合作伙伴初次接触4G模块时有很多困惑。
在这里把自己的一些经历整理下来。

关于4G模块常见的品牌与型号:
  
品牌
  
型号
芯片组
状态
HUAWEI
ME909s-821
海思芯片,只有五模
在售
HUAWEI
ME909s-521
高通芯片
在售
中兴
ME3760
中芯微
停产
中兴
MW3630
高通9x07
在售
移远
EC20
高通9x15
在售
移远
EC20 V2.0
高通9x07
在售
龙尚
8300系列
高通9x15
停产
龙尚
U9300系列
高通9x07
在售

综合分析:今年和接下来的时间里基本会是高通9x07和海思方案的天下,由于海思基本是华为在用;其它厂家基本转向9x07了。还有一些品牌,因为没怎么用过表里没有。
        移远在几家中技术支持算是最好的了,加上性价比较好。后面慢慢变成了我们用的主要模块。今天就以移远模块为例,说说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的钽电容,有了这个设计基本上可以兼容市面上大部分的模块了。

相关帖子

沙发
tt朝花夕拾| | 2017-4-20 16:07 | 只看该作者
顶;

使用特权

评论回复
板凳
szostar| | 2017-6-22 18:25 | 只看该作者
我之前买的中兴4g路由器,我想换个全网通的模块上去,这个怎么来添加驱动呢?

使用特权

评论回复
地板
szostar| | 2017-6-24 18:48 | 只看该作者
楼主看见,麻烦给个回复,方便的话留个联系方式

使用特权

评论回复
5
zjtech|  楼主 | 2017-9-3 22:19 | 只看该作者
szostar 发表于 2017-6-24 18:48
楼主看见,麻烦给个回复,方便的话留个联系方式

貌似太晚了,

使用特权

评论回复
6
289811230| | 2017-9-5 13:54 | 只看该作者
我也在做模块的移植工作,不过没有用移远的quectel-CM源码移植,是用的AT指令QCRMCALL和udhcpc拨号方法实现的,因为移远那个只有他自己的模块能用,我们还要同一设备兼容很多型号的模块。那么有个难搞的问题就是,虚拟网卡断线了驱动感知不到。以前pppd拨号,一旦断了,pppd就自动结束,所以我们监测pppd进程的pid是否存在就行,但是dhcp的进程就算没网了它还是存在的,监测pid也不好使,不知道楼主是怎么解决的。

使用特权

评论回复
7
hw145| | 2017-9-8 20:21 | 只看该作者
楼主,能否共享一下Quectel_Linux_GobiNet_SR01A02V15.zip。谢谢!

使用特权

评论回复
8
289811230| | 2017-9-11 10:00 | 只看该作者
hw145 发表于 2017-9-8 20:21
楼主,能否共享一下Quectel_Linux_GobiNet_SR01A02V15.zip。谢谢!

不知道你的工作是不是也是维护拨号相关代码。V15只能用quectel-CM 去拨号,这个版本去掉了QCRMCALL命令的支持,新出的V16版本可以在编译的时候切换quectel-CM 和QCRMCALL两种拨号方式。另外,如果你所在的公司不能获取FAE支持的话,那建议你换个有实力让FAE支持的公司。

使用特权

评论回复
9
zjtech|  楼主 | 2017-9-26 21:47 | 只看该作者
hw145 发表于 2017-9-8 20:21
楼主,能否共享一下Quectel_Linux_GobiNet_SR01A02V15.zip。谢谢!

可以私信我,搞不懂论坛的规则好像发联系方式会封贴。

使用特权

评论回复
10
zjtech|  楼主 | 2017-9-26 21:48 | 只看该作者
zjtech 发表于 2017-9-26 21:47
可以私信我,搞不懂论坛的规则好像发联系方式会封贴。

貌似我们都还在用V15

使用特权

评论回复
11
nelsonleezonhat| | 2018-3-19 18:01 | 只看该作者
楼主,我一切顺利都跑起来了,然后一上网就过热,是怎么回事?正常吗?还是都要用专门的散热设计的?

使用特权

评论回复
12
shkhlove| | 2018-3-20 13:51 | 只看该作者
群主Quectel_Linux_GobiNet_SR01A02V15.zip 发我下,QQ 851383581 感激不尽!

使用特权

评论回复
13
6688hyc| | 2018-7-5 17:10 | 只看该作者
加油啊 推广zcore开源核心板和Tigerboard啊。。。。。。。。。。。。。。。。。。。。。

使用特权

评论回复
14
冷画| | 2018-7-7 14:25 | 只看该作者
6688hyc 发表于 2018-7-5 17:10
加油啊 推广zcore开源核心板和Tigerboard啊。。。。。。。。。。。。。。。。。。。。。 ...

活捉一个妹子

使用特权

评论回复
15
shw_0320| | 2018-7-12 17:02 | 只看该作者
289811230 发表于 2017-9-5 13:54
我也在做模块的移植工作,不过没有用移远的quectel-CM源码移植,是用的AT指令QCRMCALL和udhcpc拨号方法实现 ...

可以每隔一段时间PING一次网络,这样比较直接

使用特权

评论回复
16
shw_0320| | 2018-7-12 17:05 | 只看该作者
shkhlove 发表于 2018-3-20 13:51
群主Quectel_Linux_GobiNet_SR01A02V15.zip 发我下,QQ 851383581 感激不尽!

不晓得还能用到吗,用不到留给后人吗。 Quectel_WCDMA&LTE_Linux&Android_GobiNet_Driver_V1.3.0.zip (1.07 MB)

使用特权

评论回复
17
zjtech|  楼主 | 2018-11-14 23:44 | 只看该作者
6688hyc 发表于 2018-7-5 17:10
加油啊 推广zcore开源核心板和Tigerboard啊。。。。。。。。。。。。。。。。。。。。。 ...

好的,谢谢了。社区这块确实拉下了。。。

使用特权

评论回复
18
子非云| | 2018-11-16 16:58 | 只看该作者
楼主,你好,我最近在ububtu下搞龙尚u9300的4g模组,添加了pid和vid,但一直没有端口加载出来,楼主能和你交流下吗?

使用特权

评论回复
19
royal90| | 2018-12-3 17:51 | 只看该作者
谢谢!!!!

使用特权

评论回复
20
javon| | 2019-2-22 11:00 | 只看该作者
需要移远模组或者资料,请联系我,QQ/微信541591695

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

53

帖子

8

粉丝