linux上4G模块是比较常用的,刚开始移植4G模块驱动的时候,废了比较多心思和时间,但也收获了很多,经过这个过程更加认识到4G模块在linux上的工作。
网上资料也比较多,但是比较杂,经过一番折腾,所以想写一个比较全面的关于linux上移植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
|
在售
|
肯定要知道模块的产品id和供应商id,即:idVendor idProduct ,一般来说。同一个厂商的模块vid是一样的,不同的是pid。
在开发板上插入4G模块,正常的板子,只要能识别usb驱动的,都能够识别到模块的id。
板子控制终端输入:lsusb
如下:
就会识别到产品的id ,或者插入模块的时候,板子输出的一堆信息,里面也会可以找到pid和vid
二、配置内核与编译
配置CDC驱动,依次选择
还有一个重要的设置,就是关于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匹配函数中修改添加匹配。
三、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 ,等待编译内核完成。
四、识别usb设备
经过以上的步骤,已经能够正常识别usb ,这里来是第一步也是关键。以为识别出usbs才能继续下面的
插入模块,会虚拟出0~4五个usb
查看/dev下面是否生成设备节点:
各端口功能描述如下: