最近调试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
其实就是默认开机就打开了上网流量开关;手机的4G上网开关;
还有个关键点:apns-conf.xml
根据你使用的SIM修改apns-conf.xml文件;就是apn接入点;如果apns-conf.xml文件里面没有相应的核心网的mcc和mnc则Android系统不能自动拨号;如下图;
注意点:
如果有些4G模式使用软卡、或者硬件是在4G模块初始化的时候决定的;修改相应的AT指令;在initializeCallback()函数里;