【玩转开源】BPI-M64 Android6.0 USB Dongle 4G(EC2X)+GPS功能支持移植
1. 移植Linux驱动,这部分可以参考供应商提供的驱动文档(不做过多描述)
一般来说主要添加这几部分:
1.1 添加USB驱动
1.2 配置内核选项
具体参考可以看这里:https://github.com/garywangcn/bpi-r2_lede/commit/8cb7cc2b8b667d2d692b8787ad87046f1a349026
2. 移植GPS,模块厂商会提供相应的文档和驱动,所以难度应该不大
2.1 添加编译:android/hardware/libhardware/modules/Android.mk
2.2 把gps驱动代码放置在路径:android/hardware/libhardware/modules/gps下,如果没有gps目录则新建
3. GPS驱动移植完成后,接下来移植RIL到Android支持4G,这部分一般来说模块供应商也会提供驱动文档(也不做过多描述)
3.1 不过几个注意事项
3.1.1 在添加service到rc文件,如果开发板是64bit的比如M64, rc文件路径:android/device/softwinner/bpi-m64-hdmi/init.sun50iw1p1.rc
则注意libreference-ril.so需要用64位的:
4. 编译镜像
4.1 如果顺利的话,这个Android镜像就可以使用4G功能了,如果发现该镜像没有4G上网功能怎么办,或者是有些sim卡支持,有些不支持,原因很可能是因为没有配置好APN导致的。
比如我使用的是移动的物联网卡,先通过AT指令读出sim卡的信息,这里需要配置mcc和mnc,可以通过AT+CIMI读出:
前5位数字是:46004,那么MCC=460,MNC=04
接下来在android/device/softwinner/common/rild/apns-conf_sdk.xml里面去添加apn,添加后就可以实现该卡4G上网了
4.2 Android菜单“Android Settings->WIRELESS & NETWORKS->More->Mobile Networks->设置首选网络”没有4G选项,怎么办?
4.2.1 配置:android/packages/services/Telephony/res/values/config.xml
配置后UI则会出现4G选项了:
4.2.2 设置首选网络是4G,配置文件:android/frameworks/base/telephony/java/com/android/internal/telephony/RILConstants.java
把NETWORK_MODE_WCDMA_PREF替换为:NETWORK_MODE_LTE_GSM_WCDMA
当然也可以通过AT指令来设置优先网络:
AT+QCFG="NWSCANMODEEX",63 4G优先
AT+QCFG="NWSCANMODEEX",47 3G优先
实物图如下:
测试GPS:
4G上网: