高新兴 ME3630-W 4G 模块 Android 平台适配

news/2024/12/29 12:59:59/

 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 == 3)return -ENODEV;if (serial->dev->descriptor.idVendor == 0x19d2 &&serial->dev->descriptor.idProduct == 0x1476 &&serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)return -ENODEV;if (serial->dev->descriptor.idVendor == 0x19d2 &&serial->dev->descriptor.idProduct == 0x1476 &&serial->interface->cur_altsetting->desc. bInterfaceNumber == 5)return -ENODEV;// ...
    
}

 

3. 预置驱动文件

按照下表将对应的文件预置到系统中。

这些文件都是模块厂商提供的。

 

4. 系统配置

在您的 init.rc 文件中添加以下信息

service ril-daemon /system/bin/rild -l /system/lib/libreference-ril-gosuncn.soclass mainsocket rild stream 660 root radiosocket rild-debug stream 660 radio systemuser rootgroup radio cache inet misc audio logservice pppd_gprs /system/etc/init.gprs-pppduser rootgroup radio cache inet misc logdisabledoneshot

 

对了,或许您还需要再关注一下 APN 的配置。

./device/rockchip/common/phone/etc/apns-full-conf.xml

关于 APN 信息,笔者这边也不是很清楚,因为笔者没有配置过 APN 信息。

 

这边贴一个简要参考,可以通过 Android 系统启动以后在系统设置中配置一下 APN 信息

电信  -->  ctnet
联通  -->  3gnet
移动  -->  cmnet

 

5. 调试

此时,我们的基本适配工作就做完了。编译系统并烧写。首先可以来检查我们的 4G 模块是否被正确识别到。可以查看内核打印来检查。

 dmesg

通常,如果您能看到类似下面所示的打印,就稳的了。

usb 1-1: new high-speed USB device number 2 using rockchip_ehci_host
usb 1-1: New USB device found, idVendor=19d2, idProduct=1476
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: Android
usb 1-1: Manufacturer: Android
usb 1-1: SerialNumber: d6ee6d9b
idVendor=19d2, idProduct=1476, bInterfaceNumber =0
option 1-1:1.0: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
idVendor=19d2, idProduct=1476, bInterfaceNumber =1
option 1-1:1.1: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
idVendor=19d2, idProduct=1476, bInterfaceNumber =2
option 1-1:1.2: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
cdc_ether 1-1:1.3 usb0: register 'cdc_ether' at usb-101c0000.usb-1, CDC Ethernet Device, c6:92:10:17:52:43

如果很不幸您 /dev 目录下并没有 ttyUSB0 ~ ttyUSB2 这 3 个节点,那就得再回去好好检查检查了。

 

然后这个时候,如果有屏幕的话就可以去屏幕上确认确认,所插的 SIM 卡是否成功入网,并且能够通过蜂窝网络访问互联网了。

 

如果这个时候发现所插 SIM 卡无法正确入网,常用的检测手段是可以通过如下命令查看电话网络的打印

logcat -b radio

对应地,清日志缓冲区的命令是

logcat -c -b radio

 

如果您的适配过程并不那么顺利,那就需要对照着官方提供的适配文档来排错了。

 

关于官方提供的文档与驱动,笔者这边碍于版权问题,就不提供下载链接了。

 

6. ttyUSB 释义

这里再解释一下 ttyUSB0, ttyUSB1, ttyUSB2 各自有什么作用,看下表

型号设备号作用

ME3630-W ( pid: 0x1476 )

ttyUSB0DIAG
ttyUSB1AT
ttyUSB2MODEM
3ECM
4ECM

 

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模块调试总结

 

转载于:https://www.cnblogs.com/chorm590/p/rk3128_me3630-w.html


http://www.ppmy.cn/news/190294.html

相关文章

电话单POJ3630

电话单POJ3630 思路 题干在这&#xff1a;POJ3630 依次把电话号码插入字典树。如果一个号码插入过程中到了一个结束节点&#xff0c;或者插完这个号码并没有建立新节点&#xff0c;说明是no&#xff1b;否则是yes。 ac代码 #include<cstdio> #include<iostream>…

ME3630模块常用指令介绍

1、基本指令 ATCPIN &#xff1f; 该指令用于查询SIM卡的状态&#xff0c;主要是PIN码&#xff0c;如果该指令返回&#xff1a;CPIN:READY&#xff0c;则表明SIM卡状态正常&#xff0c;返回其他值&#xff0c;则有可能是没有SIM卡。 ATCSQ 该指令用于查询信号质量&#xff0c;返…

POJ3630

Tire树裸题&#xff0c;一开始写动态的字典树&#xff0c;然后TLE&#xff0c;每次new一个新节点耗费时间较多。后来改成数组模拟的。 //#include <bits/stdc.h> #include <cstdio> #include <cstring> #include <algorithm>using namespace std ; co…

ibm3630m4服务器装系统,ibm x3630m4安装Windows2008R2系统

服务器型号&#xff1a;IBM X3630 M4 系统&#xff1a;Windowsserver2008R2 需求&#xff1a; 远程指导客户在IBM system x3630 M4服务器上安装windowsserver2008R2系统&#xff0c;用时1个多小时&#xff0c;顺利安装上操作系统。 标准2U机架式 配置1个四核英特尔至强处理器E5…

ZTE ME3630 4G模块在Hi3559AV100平台上拨号指令流程

ZTE ME3630 4G模块在Hi3559AV100平台上拨号指令流程 驱动配置 内核版本linux-4.9.37 CONFIG_USB_SERIALy CONFIG_USB_SERIAL_OPTIONy CONFIG_USB_SERIAL_WWANy CONFIG_USB_USBNETy CONFIG_NETDEVICESy CONFIG_USB_NET_CDCETHERy 驱动打印 ~ # usb 1-1:…

【POJ No. 3630】 电话表 Phone List

【POJ No. 3630】 电话表 Phone List 北大OJ 题目地址 【题意】 给出一个电话号码列表&#xff0c;确定它是否满足一致性&#xff08;没有号码是另一个号码的前缀&#xff09;。假设电话目录列出了这些数字&#xff1a;紧急911、爱丽丝97625999、鲍勃91125426&#xff0c;则在…

Phone List POJ - 3630(字典树模板题)

题意 给定 n个长度不超过 10的数字串&#xff0c;问其中是否存在两个数字串S&#xff0c;T &#xff0c;使得 S是 T的前缀&#xff0c;多组数据。 题目 Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of anothe…

Linux 线程池

目录 传统艺能&#x1f60e;概念&#x1f60d;线程池应用场景&#x1f618;实现&#x1f923; 静态方法的执行例程&#x1f923;设计任务类型&#x1f601;主线程设计&#x1f602; 传统艺能&#x1f60e; 小编是双非本科大二菜鸟不赘述&#xff0c;欢迎米娜桑来指点江山哦 1…