高新兴 ME3630-W 4G 模块 Android 平台适配
2019-04-26
关键字:高新兴 ME3630-W 适配、rk3128 移植 4G 模块
本篇文章系笔者在移植 高新兴物联 ME3630-W 4G 模块到运行着 Android4.4 操作系统的 rk3128 开发板上的一篇日志。文章以快速适配为目的进行讲解,不涉及一些步骤的原理讲解。
这款 4G 模块是一个全网通模块,它在 rk 平台的适配资料并不多,难得的几篇博文讲的也比较片面。笔者在适配移植的过程中遇到了不少的问题,现将解决过程记录一下,以期能帮到有需要的同学。
首先,没有官方提供的适配文档是很难完成适配工作的,这款模块的官方网站为:高新兴物联 ME3630-W 官方网站 。官网中下部给出了很全面的文档。
如果没有办法直接在网上下载文档,可以要求采购向厂家索要。
硬件排查
硬件虐我千百遍,我待硬件如初恋!
这块不打算详细聊,总之您想办法确保硬件电路 OK 就好。祝好运!
软件排查
1. 内核支持
要调 4G 模块,首先需要确保对应的内核功能模块是可用的。一般可以在 menuconfig 作如下配置( 在 kernel 目录下执行 make menuconfig 命令 ),将下面标红的选项都选上。
在保存了上面的配置以后,还可以去 ./kernel/.config 文件下检查一下,看是否有如下图所示的配置
需要注意的是:一定要确保 make menuconfig 对内核功能模块做出的更改是 “最终更改” 。因为笔者这边的情况就是可以通过 make menuconfig 来更改内核功能模块,然后再编译大包的时候还会再从另外一个地方读取一下内核功能配置模块。对于这种有多处可以修改内核功能模块的情况,一定要保证好上面的配置项不会被重置掉! 这个很重要。
2. 注册模块
这款 4G 模块会以 ttyUSB0 ~ ttyUSB2 的形式注册在 /dev 目录下。所以我们在板子启动以后首先要检查 /dev 目录,看是否有下图所示的几个设备节点
如果没有,则是没有配好相应的 vendor id 和 product id 。此时,我们就需要操作这个文件了
.\kernel\drivers\usb\serial\option.c
在 option.c 的 option_ids[] 中添加您模块对应的 VID 和 PID 。
static const struct usb_device_id option_ids[] = {
// ... { USB_DEVICE(0x19d2, 0x1476) }, // ...
}
如果您不知道您手里的模块的 VID 和 PID ,有官方适配文档的直接参考官方适配文档,没有的则可以上网查一下,实在不行,可以看串口的打印,通常在内核打印中都会将新设备的 vid , pid 打印出来的。中兴集团的 VID 固定为 0x19d2 。
然后,最好再在 option.c 文件中的 option_probe 函数中添加下面一段代码,这一步的目的是为了防止用来传输上网数据的 USB 口被映射成普通 USB 串口。
static int option_probe(struct usb_serial *serial, const struct usb_device_id *id)
{ // ... printk("idVendor=%x, idProduct=%x, bInterfaceNumber =%d\n\n",
serial->dev->descriptor.idVendor,
serial->dev->descriptor.idProduct,
serial->interface->cur_altsetting->desc. bInterfaceNumber); if (serial->dev->descriptor.idVendor == 0x19d2 &&
serial->dev->descriptor.idProduct == 0x1476 &&
serial->interface->cur_altsetting->desc. bInterfaceNumber == )
return -ENODEV; if (serial->dev->descriptor.idVendor == 0x19d2 &&
serial->dev->descriptor.idProduct == 0x1476 &&
serial->interface->cur_altsetting->desc. bInterfaceNumber == )
return -ENODEV; if (serial->dev->descriptor.idVendor == 0x19d2 &&
serial->dev->descriptor.idProduct == 0x1476 &&
serial->interface->cur_altsetting->desc. bInterfaceNumber == )
return -ENODEV; // ... }
3. 预置驱动文件
按照下表将对应的文件预置到系统中。
这些文件都是模块厂商提供的。
4. 系统配置
在您的 init.rc 文件中添加以下信息
service ril-daemon /system/bin/rild -l /system/lib/libreference-ril-gosuncn.so
class main
socket rild stream root radio
socket rild-debug stream radio system
user root
group radio cache inet misc audio log service pppd_gprs /system/etc/init.gprs-pppd
user root
group radio cache inet misc log
disabled
oneshot
对了,或许您还需要再关注一下 APN 的配置。
./device/rockchip/common/phone/etc/apns-full-conf.xml
关于 APN 信息,笔者这边也不是很清楚,因为笔者没有配置过 APN 信息。
这边贴一个简要参考,可以通过 Android 系统启动以后在系统设置中配置一下 APN 信息
电信 --> ctnet
联通 --> 3gnet
移动 --> cmnet
5. 调试
此时,我们的基本适配工作就做完了。编译系统并烧写。首先可以来检查我们的 4G 模块是否被正确识别到。可以查看内核打印来检查。
dmesg
通常,如果您能看到类似下面所示的打印,就稳的了。
usb -: new high-speed USB device number using rockchip_ehci_host
usb -: New USB device found, idVendor=19d2, idProduct=
usb -: New USB device strings: Mfr=, Product=, SerialNumber=
usb -: Product: Android
usb -: Manufacturer: Android
usb -: SerialNumber: d6ee6d9b
idVendor=19d2, idProduct=, bInterfaceNumber =
option -:1.0: GSM modem (-port) converter detected
usb -: GSM modem (-port) converter now attached to ttyUSB0
idVendor=19d2, idProduct=, bInterfaceNumber =
option -:1.1: GSM modem (-port) converter detected
usb -: GSM modem (-port) converter now attached to ttyUSB1
idVendor=19d2, idProduct=, bInterfaceNumber =
option -:1.2: GSM modem (-port) converter detected
usb -: GSM modem (-port) converter now attached to ttyUSB2
cdc_ether -:1.3 usb0: register 'cdc_ether' at usb-101c0000.usb-, CDC Ethernet Device, c6:::::
如果很不幸您 /dev 目录下并没有 ttyUSB0 ~ ttyUSB2 这 3 个节点,那就得再回去好好检查检查了。
然后这个时候,如果有屏幕的话就可以去屏幕上确认确认,所插的 SIM 卡是否成功入网,并且能够通过蜂窝网络访问互联网了。
如果这个时候发现所插 SIM 卡无法正确入网,常用的检测手段是可以通过如下命令查看电话网络的打印
logcat -b radio
对应地,清日志缓冲区的命令是
logcat -c -b radio
如果您的适配过程并不那么顺利,那就需要对照着官方提供的适配文档来排错了。
关于官方提供的文档与驱动,笔者这边碍于版权问题,就不提供下载链接了。
6. ttyUSB 释义
这里再解释一下 ttyUSB0, ttyUSB1, ttyUSB2 各自有什么作用,看下表
型号 | 设备号 | 作用 |
ME3630-W ( pid: 0x1476 ) |
ttyUSB0 | DIAG |
ttyUSB1 | AT | |
ttyUSB2 | MODEM | |
3 | ECM | |
4 | ECM |
7. 自定义拨号流程
如果您的业务需要客制化拨号流程,或者您怀疑系统的拨号流程有问题,可以关注下这块代码
./hardware/ril/
入网拨号流程一般是首先走
./rild/rild.c
里的 main() 函数。然后在 main() 函数中调用到
./reference-ril/reference-ril.c
里面的 RIL_Init 函数。在这个 reference-ril.c 里面比较重要的函数还有 mainLoop 、initializeCallback 、 onUnsolicited 、 onRequest 。
其实 Android 原生的入网流程就已经很完善了,如果是排查问题的话,笔者建议可以不用看这里的代码,大概率是没有什么结果的。
如果要查看拨号日志,使用如下命令
logcat -s pppd
参考:
高新兴 ME3630-W 4G 模块 Android 平台适配的更多相关文章
- Android平台介绍
一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操 ...
- Android 平台 Native 代码的崩溃捕获机制及实现
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w 一.背景 ...
- 基于android平台的斗地主AI
本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...
- dp和px,那些不得不吐槽的故事——Android平台图
http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html 一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
- 嵌入式开发 迅为4418开发板Qt移植移动4G模块第一部分
本文转自迅为论坛:http://topeetboard.com 了解更多:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-7744162139 ...
- dp和px,那些不得不吐槽的故事——Android平台图片文字元素单位浅析 (转)
一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理由.作为移动产品的PM,也需要了解一些在UI设计中的基本知识. 1. px和pt,一对好伙伴 在视觉设计中 ...
- [转载]迅为4418开发板Qt移植移动4G模块第一部分
本文转自迅为论坛:http://topeetboard.com 平台:iTOP-4418开发板 1.首先要配置内核,这个一步和Android系统移植3G或者4G模块是一样的.一般模块的 ...
- [译]:Xamarin.Android平台功能——位置服务
返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...
随机推荐
- Neo4j入门之中国电影票房排行浅析
什么是Neo4j? Neo4j是一个高性能的NoSQL图形数据库(Graph Database),它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持 ...
- 《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny
问题 执行若干个任务,只需要对其中任意一个的完成进行响应.这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成.例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的. ...
- Odd-e CSD Course Day 5
因為今天是最後一天了,我趕緊在這次結束前提出一些前一晚上想到的問題 1. 在TDD的循環中有重構,那 DB 也會進行重構嗎? 在TDD 的重構的過程,其實也經常會重構資料庫 , 但重構資料庫這裡有一個 ...
- List去重的实现
List<T> 当T为值类型的时候 去重比较简单,当T为引用类型时,一般根据业务需要,根据T的中几个属性来确定是否重复,从而去重. 查看System.Linq下的Enumerable存在一 ...
- Centos7上安装docker
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器 ...
- 基于IIS的WCF
(1)创建WCF服务应用程序 (2)配置IIS 将WCF服务应用程序配置IIS网站,需要使用.net4.0集成版本的程序池 (3)使用SvcUtil.exe生成客户端代码和配置 SvcUtil.exe ...
- EF 外键不显示、如何让外键显示!增、删、改 操作时,外键不显示,只显示导航属性!
一.问题描述:EF 外键不显示.如何让外键显示!增.删.改 操作时,外键不显示,只显示导航属性! EF 添加.增加.插入数据时,外键不显示! 二.解决方案:在根据数据库生成模型的时候,选中“在模型中” ...
- SharePoint代码建表(实战)
分享人: 广州华软 无名 一. 前言 虽然SharePoint提供可视化界面建表,但是,不利于开发自动化部署.通常,如果通过手动建表,我们先在测试环境建表,然后存为模板,再上传到实际环境,最后根据模板 ...
- 【设计模式】适配器模式 Adapter Pattern
适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...
- 微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异
微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异 前言:由于开发人员要靠工具吃饭,可能和开发工具.语言.环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多 ...