Android 6.0 适配4g模组
文章目录
本次移植的是Quectel的4G模组EC200S-CN,其实具体型号不重要,基本上都是通用的步骤,只不过不同型号芯片的RIL库不一样,但这个都是编译好的,我们不需要去关心,直接放到指定位置即可;
一、资料
RIL库源码一般是不开放的,我们需要厂家提供给我们so库(根据系统位数选择)和指导文档;如下图:
上图绿色框内的是通用命令(chat ip-up ip down),如果系统已经集成过了,可不再添加,主要把 libreference-ril.so 放到指定位置;
二、Android RIL Architecture
大致明了RIL的框架即可,不需要深究;
三、命令文件路径(系统已有跳过)
- 参考下一步库文件的拷贝代码,里面有写,这里只说明其具体路径;
四、库移植路径
- RIL 库放到下图写的路径中,64位系统放到 /system/lib64 , 32位系统放到 /system/lib 下面;
- 具体代码示例
-
路径 android/device/softwinner/产品名/产品名.mk
-
这部分代码可以将需要的文件,拷贝到目标板指定路径,如果chat ip-up ip-down 系统中没有,可以参考下面代码
# mobile Quectel one PRODUCT_COPY_FILES += \ device/softwinner/tulip-ads/mobile/quectel/libreference-ril.so:system/lib64/libreference-ril.so \ device/softwinner/tulip-ads/mobile/quectel/chat:system/bin/chat \ device/softwinner/tulip-ads/mobile/quectel/ip-down:system/etc/ppp/ip-down \ device/softwinner/tulip-ads/mobile/quectel/ip-up:system/etc/ppp/ip-up
-
五、启动文件配置服务
- 命令和RIL 配置好后,就看怎么启动使用了,在安卓的启动文件中,添加系统启动服务和添加一些必要权限即可;
- 模组有串口通信,有USB通信,这里仅着重介绍串口的,具体依据硬件设计;
USB
串口
-
具体代码示例
-
路径:android/device/softwinner/tulip-ads/init.sun50iw1p1.rc
service ril-daemon /system/bin/rild -l /system/lib64/libreference-ril.so -- -d /dev/ttyUSB2 class main socket rild stream 660 root radio socket rild-debug stream 660 radio system user root group radio cache inet misc audio sdcard_rw log
-
添加权限
- 路径:android/device/softwinner/tulip-ads/init.sun50iw1p1.rc
#mobile chmod 777 /system/lib/libreference-ril.so chmod 777 /system/bin/chat chmod 777 /system/etc/ppp/ip-down chmod 777 /system/etc/ppp/ip-up
- 路径:android/device/softwinner/tulip-common/sepolicy/rild.te
- 最后一行添加
allow rild self:packet_socket { create bind write read };
- 最后一行添加
- 路径:android/device/softwinner/tulip-ads/init.sun50iw1p1.rc
六、修改rild.c
七、权限
SELINUX(如果系统中已有,可不用添加)
- 文件:a64/android/device/softwinner/tulip-ads/ueventd.sun50iw1p1.rc
八、小结
至此,4G模组适配完成,其实针对不需要深度开发公司而言,4G模组的适配底层程序员需要做的不多,不论哪个厂家的模组基本上都是这一套,如果适配过一种模组,后续如果出现模组替换非常容易,基本上只要替换RIL库即可。