Android 4G模块调试总结

转自:http://www.lai18.com/content/1208530.html

最近调试Android的4G模块;这里做个总结;走个流程;代码就不贴了;公司保密;驱动方面没什么好说的;一般都是厂家会提供文档;其实也就是把4G模块虚拟机成ttyUSB0~ttyUSB5等几个虚拟串口;再打开CDC_NCM虚拟网卡绑定到某一个虚拟串口;产生虚拟网卡usb0或者什么的;

先走个大概流程;其实主要就是hardware/ril/几个库文件;修改的也不多;有些公司主要是修改reference-ril.so库的修改;有些公司为了公司保密直接给编译好的reference-ril.so文件;那更简单了;直接添加进系统就OK了;

hardware/ril/rild/rild.c => main()
main()打开reference-ril.so库;调用reference-ril.so库里面的RIL_Init()函数;
RIL_Init()函数创建线程调用mainLoop()函数;

mainLoop()函数打开4G模块的虚拟串口;然后:首先调用onUnsolicited()函数监听4G模块主动上报的信息;再调用initializeCallback()函数初始化4G模块;
onRequest()函数接收上层传下来的指令转换成AT指令拨号等;

关键函数:

initializeCallback()4G 模块初始化函数;里面就是一些发给4G模块的AT指令;不能出错;

onUnsolicited()函数接收4G模块对AT指令的返回值;可以在里面添加根据返回值相应的动作;比如根据拨号成功返回值做出绑定网卡分配IP的动作;

onRequest()主动拨号、上层发下来的所有AT指令都在这里;

一般调试4G模块就是修改上面的三个文件;

开机自动拨号实现:

frameworks/base/services/java/com/android/server/ConnectivityService.java

public boolean getMobileDataEnabled() {
        // TODO: This detail should probably be in DataConnectionTracker's
        //       which is where we store the value and maybe make this
        //       asynchronous.
        enforceAccessPermission();
        boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(),
                Settings.Secure.MOBILE_DATA, 1/*默认是0,改为1就可以了*/) == 1;
        if (VDBG) log("getMobileDataEnabled returning " + retVal);
        return retVal;
    }


其实就是默认开机就打开了上网流量开关;手机的4G上网开关;

还有个关键点:apns-conf.xml

根据你使用的SIM修改apns-conf.xml文件;就是apn接入点;如果apns-conf.xml文件里面没有相应的核心网的mcc和mnc则Android系统不能自动拨号;如下图;


Android 4G模块调试总结_第1张图片

注意点:

如果有些4G模式使用软卡、或者硬件是在4G模块初始化的时候决定的;修改相应的AT指令;在initializeCallback()函数里;

你可能感兴趣的:(Android 4G模块调试总结)