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

参考:

Android 4G模块调试总结

高新兴 ME3630-W 4G 模块 Android 平台适配的更多相关文章

  1. Android平台介绍

    一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操 ...

  2. Android 平台 Native 代码的崩溃捕获机制及实现

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w 一.背景 ...

  3. 基于android平台的斗地主AI

    本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...

  4. dp和px,那些不得不吐槽的故事——Android平台图

    http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html 一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理 ...

  5. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  6. 嵌入式开发 迅为4418开发板Qt移植移动4G模块第一部分

    本文转自迅为论坛:http://topeetboard.com 了解更多:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-7744162139 ...

  7. dp和px,那些不得不吐槽的故事——Android平台图片文字元素单位浅析 (转)

    一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理由.作为移动产品的PM,也需要了解一些在UI设计中的基本知识. 1. px和pt,一对好伙伴 在视觉设计中 ...

  8. [转载]迅为4418开发板Qt移植移动4G模块第一部分

        本文转自迅为论坛:http://topeetboard.com   平台:iTOP-4418开发板   1.首先要配置内核,这个一步和Android系统移植3G或者4G模块是一样的.一般模块的 ...

  9. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

随机推荐

  1. AppBoxFuture(五): 分布式文件存储-Store Everything

      本来本篇是想介绍前端组件化开发用户界面,发现框架还未实现文件存储,原本计划是后续设计开发的,索性把计划提前,所以本篇将介绍基于Raft实现分布式的文件存储引擎. 一. 实现思路   既然是分布式存 ...

  2. WPR003N变成尸体的后记

    这是一个很悲哀的标题,尽管本来不想说还是打算写出来. 应小便的要求本文不加任何字体变化,不设置玄关来等大家破解,只是很自然的把悲剧和大家分享一下. 自上回2019 Valentine's Day 圣地 ...

  3. ACCP8.0 HTML标签

    ACCP8.0 HTML标签 第一章1.HTML超文本标记语言2.网页<html></html>3.网页头部<head></head>4.网页标题< ...

  4. shell 查找与替换

    grep sed 如果想把一个字符串中的一些字符删除可以如此:#Echo “2006-11-21 22:16:30” | sed ‘s/-//g’ | sed ‘s/ //g’ | sed ‘s/:/ ...

  5. 性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程

    基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程   By: 授客 QQ:1033553122     1. 测试环境 2. 实现功能 3. 使用前提 4. ...

  6. Android远程桌面助手(B1371)

    Android远程桌面助手(B1371),下载:https://files.cnblogs.com/files/we-hjb/ARDC%28B1371%29.7z 1.增加了对超大分辨率4320*21 ...

  7. Flask技术问题汇总

    1:Flask 使用 request对象代理了当前请求的上下文.这么做什么好处和坏处? 好处:flask封装了C端发起request对象,这样就可以使用上下文临时把某些对象变为全局可访问:如果不封装, ...

  8. 什么是Docker,它可干什么?

    定义我们知道,软件依赖的环境大致包括: 1• 配置文件2• 代码3• tomcat4• JDK5• 操作系统 Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包 ...

  9. 重庆3Shape CAMbridge都有哪些功能

    三维打印技术创新领导者Objet Geometries公司和牙科领域三维扫描仪.CAD/CAM软件解决方案供应商3Shape A/S公司日前宣布两家公司合作研发的牙科领域三维修复解决方案已付诸实施.此 ...

  10. C#零基础入门-1-安装IDE

    安装VS2017 下载安装,选择C#开发语言,过程略. 也可以使用VS2015