linux4.1.4上移植ME909s-821,MU609 4G模块驱动

linux上4G模块是比较经常使用的,刚开始移植4G模块驱动的时候,废了比较多心思和时间,但也收获了不少,通过这个过程更加认识到4G模块在linux上的工做。html

网上资料也比较多,可是比较杂,通过一番折腾,因此想写一个比较全面的关于linux上移植4G模块驱动的方法linux

 

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

  
品牌
  
型号
市场价格
芯片组
状态
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
在售
等等,我在这里以移植ME909s-821和MU609模块为例;
 
 1、识别pid  vid

  确定要知道模块的产品id和供应商id,即:idVendor idProduct ,通常来讲。同一个厂商的模块vid是同样的,不一样的是pid。网络

在开发板上插入4G模块,正常的板子,只要能识别usb驱动的,都可以识别到模块的id。app

板子控制终端输入:lsusbless

以下:ide

就会识别到产品的id ,或者插入模块的时候,板子输出的一堆信息,里面也会能够找到pid和vid函数

2、配置内核与编译ui

在宿主机的Linux内核源码根目录执行如下指令,配置内核。添加USB串口驱动的配置选项:
host$ makeARCH=arm menuconfig
       依次选择:
       Device Drivers  --->
               USB support  --->
                     <*>   USB Serial Converter support  --->
                            <*>USB driver for GSM and CDMA modems

 

配置CDC驱动,依次选择spa

       Device Drivers  --->
               Network device support  --->
                     USB Network Adapters  --->
                            <*> Multi-purpose USB NetworkingFramework
                                   <*>  CDC Ethernet support (smart devices such ascable modems) (NEW)
                                   -*-   CDC NCM support
                                   <*>   Huawei NCM embedded AT channel support
                                   <*>   Simple USB Network Links (CDC Ethernetsubset) (NEW)

 

 还有一个重要的设置,就是关于ppp驱动的  有的网上护送须要安装ppp驱动,可是实际上个人内核已经支持ppp驱动,并且不少内核也会支持,因此只要在make menuconfgi里面配置好,就不须要再另外安装ppp驱动,关于另外安装的p'p'p驱动 能够参考:https://www.linuxidc.com/Linux/2016-03/129581.htm

 在这里,我只须要配置内核支持ppp就能够 

make menuconfig Device Drivers --->

           [*] Network device support --->

// 将这里面全部的ppp 相关的支持都选上

到这里,关于内核的配置,已经配置完成,可是还不能make,还须要再usb匹配函数中修改添加匹配。

3、usb匹配列表添加pid  vid

若是这路不添加,依然没法识别,觉得4G模块做为usb驱动添加,u's'b匹配的时候须要添加匹配列表;

再kernel目录:

vim drivers/usb/serial/option.c

关于:ME909s-821

在  static const struct usb_device_id option_ids[] 

 中添加:

 

 到这里,make 以后,开发板就可以支持ME909s-821模块了。

同理,关于MU609,方法同样:

首先添加vid  我这里直接修改 厂商的vid  其实就是宏定义而已,能够不定义,下面你直接添加给值传入就行。

 

关于为何还须要设置:

ME909s-821的端口的赋值,由厂商提供,请《HUAWEIModule USB Interface Descriptor Guide》中的3.7.3节,“MODEM Serial Port ”、“DIAG Serial Port ”、“PCUI Serial Port ”、“Ctrl Serial Port ”、“Serial B Port ”各表格的值

请参考:https://blog.csdn.net/yuzhou_zang/article/details/78286875

这里说明了 为何,对于其余的模块移植颇有参考意义。

到这里 ,就能够直接make ,等待编译内核完成。

4、识别usb设备

 通过以上的步骤,已经可以正常识别usb ,这里来是第一步也是关键。觉得识别出usbs才能继续下面的

 插入模块,会虚拟出0~4五个usb

查看/dev下面是否生成设备节点:

各端口功能描述以下:

USB0: MODEM:MODEM串口,用于拨号上网
USB1: DIAG:普通串口,用于调试和收集日志信息
USB2:PCUI:用于应用程序进行AT指令 通讯
USB3:Ctrl:用于eCall业务
USB4:Serial B:用于配合Diag端口用于模块log收集
使用NDIS协议,在评估板给MODEM端口发送AT指令链接4G网络:
 
到这里,模块的已经支持完成,这里只是举例两个模块me909s-821和mu609,其余的其实也是同样的。
相关文章
相关标签/搜索