高新兴 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 ...
随机推荐
- vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦
最近新入职一家公司,后端造接口速度很慢,想来想去还是搞一套模拟接口,来满足开发需求,有人会问,我造一个死数据不就可以了吗?或者说,后端数据结构都没出来,字段我怎么定? 问这个问题的人不奇怪,我之前也有 ...
- 远程连接桌面报:这可能是由于credssp加密oracle修正
1.Win+R 输入regedit打开注册表 找到对应的以下目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Polic ...
- js中let和var的区别 不懂得加QQ 2270312758
js中使用let定义变量的时候,是需要使用严格模式的,我看到网上有的博客说:如果在不使用严格模式的情况下,使用let会报错,但是在实验的过程中,我直接定义了let变量而且也没有使用严格模式,并没有报任 ...
- ecstore中怎样使用ajax提交数据
//javascript代码 $$(".bb").addEvent('change',function(e){ var order_item_id = this.get('orde ...
- 关于在Idea 创建Maven项目时,无法在source文件下创建servlet文件问题解决!
很简单:打开.iml文件,
- 从零学习Fluter(六):Flutter仿boss直聘v1.0重构
今天继续学习flutter,觉得这个优秀的东西,许多方面还需要完善,作为一个后来者,要多向别人学习.俗话说,“学无先后,达者为师”.今天呢,我又重新把flutter_boss这个项目代码 从头到脚看了 ...
- Html5 Canvas介绍
1. 获取绘图上下文 var mycanvas = document.getElementById('mycanvas'); var context = mycanvas.getContext('2d ...
- Tableau环图可视化
1.选择"记录数",拖拽两个记录数放入列中,求总和,选择饼图: 2.选择"大小",调整两个饼图的大小: 3.点击第二个总和(行上的),选择“双轴”: 4.点击坐 ...
- C# 直接引用js文件,调js里的数据
C# 直接引用js文件,调js里的数据 引入命名空间 using System.IO; string path = AppDomain.CurrentDomain.BaseDirectory + &q ...
- SQL Server系统视图sys.master_files不能正确显示数据库脱机状态
最近发现在SQL Server数据库(目前测试过SQL Server 2008, 2012,2014,2016各个版本)中,即使数据库处于脱机(OFFLINE)状态,但是sys.master_file ...