高新兴 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 ...
随机推荐
- Spring注解AOP及单元测试junit(6)
2019-03-10/20:19:56 演示:将xml配置方式改为注解方式 静态以及动态代理推荐博客:https://blog.csdn.net/javazejian/article/details/ ...
- CSS的使用方法
参考资料:http://css.cuishifeng.cn/ 一.CSS的四种引入方式 1.行内式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用(与链接式 ...
- Dynamics 365-为什么查到的Record的Id是Guid初始值
通过代码查询CRM数据,这个是开发经常会碰到的情况,获取返回的EntityCollection之后,我们会拿Entity.Id做进一步操作.笔者最近碰到的情况,是Entity.Id是个初始值.先上一段 ...
- Android串口通讯
今天在整一个项目,需要利用串口通讯在网上看了好多人的帖子才稍微整出了一点头绪. 首先串口代码就是利用谷歌自己的api,将java代码放在java/android_serialport_api目录下,如 ...
- 16进制字符串转QByteArray,char转16进制字符串
直接上代码,看代码你们就懂了 1.16进制QString转QByteArray QString str = "01 a5 1e 02"; QByteArray tmpBy; Str ...
- Visual Studio插件开发基础
Visual Studio插件主要有两种:Add-in 和 VSX(Visual Studio eXtensibility) 两者区别可参考这篇文章:Visual Studio Extensions ...
- python函数与函数式编程
https://www.cnblogs.com/evablogs/p/6699515.html 在理解函数式编程之前,我还是对函数的调用,参数传递以及函数的嵌套调用一头雾水,还是花了点时间整理了写思绪 ...
- Python迭代器详解
最近在看两个github项目的代码时对迭代器有些困惑,因此写一篇笔记以理清脉络,经过两天的修改完善对迭代器有了一个初步的理解,相信会比网上绝大多数笔记有用些. 一.基础概念 在进行具体的迭代类和迭代函 ...
- 根据Webservice地址,动态传入参数(Webservice代理类)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sunlib; ...
- Windows Cluster 在群集管理器下 集群或可用性组 都不显示的问题
作为一个IT成员,特别是偏支持的.很多时候就是和各种异常打交道,总会碰到一些奇奇怪怪的问题.很多时候,可能是一个小小的异常都需要花费很长时间去解决. SQL Server AlwaysOn 是建立在W ...