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

摘要:
所以我想写一个在Linux上移植4G模块驱动程序的更全面的方法。可以识别4G模块的常见品牌和型号。你也可以找到pid和vid。2.配置内核和在主机中编译的Linux内核源代码的根目录。执行以下命令,并添加USB串行端口驱动程序的配置选项:一些关于ppp驱动程序的在线护送需要安装ppp驱动,但事实上,我的内核已经支持ppp驱动程式,因此您不需要安装另一个ppp驱动程序。

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
在售
等等,我在这里以移植ME909s-821和MU609模块为例;
 
 一、识别pid  vid

  肯定要知道模块的产品id和供应商id,即:idVendor idProduct ,一般来说。同一个厂商的模块vid是一样的,不同的是pid。

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

板子控制终端输入:lsusb

如下:

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

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

二、配置内核与编译

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

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

配置CDC驱动,依次选择

       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)
linux4.1.4上移植ME909s-821,MU609 4G模块驱动第3张

 还有一个重要的设置,就是关于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

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

在  static const struct usb_device_id option_ids[] 

 中添加:

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

 到这里,make 之后,开发板就能够支持ME909s-821模块了。

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

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

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

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

关于为什么还需要设置:

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

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

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

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

各端口功能描述如下:

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

免责声明:文章转载自《linux4.1.4上移植ME909s-821,MU609 4G模块驱动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇30天敏捷生活(4): 撰写个人使命宣言Qt中indexOf()和lastIndexOf()查找字符串位置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

2018年全国职业院校技能大赛(中职组)网络空间安全赛题解析

2019年12月2号 星期一 CQCET 2018年全国职业院校技能大赛中职组 “网络空间安全”赛卷一 一、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 单兵模式系统渗透测试 任务1 ARP扫描渗透测试 100分钟 100 任务2 漏洞扫描与利用 100 任务3 MSSQL数据库渗透测试 100 任务4 主机发现与信息收 100 任...

在 Node.js 中引入模块:你所需要知道的一切都在这里

本文作者:Jacob Beltran 编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58eaf471a58c240ae35bb8e3 英文连接:Requiring modules in Node.js: Everything you need to know Node 中有两个...

LINUX内核分析第四周——扒开系统调用的三层皮

LINUX内核分析第四周——扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、用户态、内核态和中断处理过程 1. 用户态和内核态 CPU指令执行级别: 执行特权指令,访问任意的物理地址——内核态。 低级别:代...

Dockerfile参考

Docker可以通过阅读a的指示自动构建图像Dockerfile。Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令。使用docker build用户可以创建一个自动构建,连续执行几条命令行指令。 该页面描述了您可以在Dockerfile中使用的命令。阅读本页后,请参阅Dockerfile面向提示的指南的最佳做法。 用法...

suricata的模块和插槽

参考资料 suricata官方文档https://suricata.readthedocs.io/en/latest/performance/runmodes.html#different-runmodes suricata的源代码https://blog.csdn.net/shenwansangz/article/details/37900875?utm...

嵌入式软件机器编程为啥选择梯形图作为编程语言?

(机器编程系列文章二)   嵌入君   上一篇《机器人程序员正朝我们走来,大家准备好了吗?》文章中,谈到了我个人的观点,在一个编程平台中,是否算是机器编程,需要看机器完成的代码占总编码的量和对编程人员的技术要求。那么,我们在设计机器人程序员系统时,需要刻意的设计,尽量让编程者只利用很少的知识,轻松掌握编程技能,同时尽量减少编程者的工作量。   梯形图(LA...