Platform:rk3399
Os:android7.1
Kernel:4.4
1.1 在内核中添加USB串口驱动和USB网卡驱动
通过指令make ARCH=arm64 menuconfig,配置内核:
添加 USB 串口驱动:
device drivers--> usb support--> usb serial converter support--> USB driver for GSM and CDMA modems
添加 USB 网卡驱动
device drivers--> Network device support--> usb Network Adapters--> Mulil-purpose USB Networking Framework
总之,要确保源文件中的 option.c 及其相关的部分(USB 串口驱动),cdc_ether.c 及其相关部分
(USB 网卡驱动)参与编译即可。
1.2 在内核中添加PPP组件
device drivers--> Network device support--> ppp support--> ppp filtering ppp support for async serial ports ppp support for sync tty ports ppp deflate compression ppp BSD-compress compression
1.3 在内核驱动源文件中添加模组相关的信息:
在内核驱动源文件中添加模组相关的信息:USB 网卡驱动可以自动识别到 GOSUNCN
模组,因此,其对应的 cdc_ether.c 文件中不需要添加任何内容。但是 USB 串口驱动不能
自动识别,必须要添加 GOSUNCN 模组的设备信息到源文件 option.c 中。
文件路径:/kernel/drivers/usb/serial/option.c
GM510 的 VID 和 PID 分别是 0x305a 和 0x1415, 添加如下:
static const struct usb_device_id option_ids[] = {
。。。。
{ USB_DEVICE(ZTE_GM510_VENDOR_ID, ZTE_PRODUCT_GM510_X) },//wmc add by ZTE GM510
。。。。
}
添加黑名单信息,上面添加模组信息时只添加了设备的 VID 和 PID,没有附加任何额外的端口信息,这样会导致设备的网卡也被加载成为 USB 串口。以下提供一种类似于黑名单的方式,在 option_probe 函数中,将网卡对应的端口加入黑名单,防止 USB 网卡被加载成为 USB 串口。
在 ECM 端口模式下,GM510 网卡对应的端口为 0、1,请将以下代码添加到option_probe 函数中。
1.4在Android系统的init.rc中添加服务
在以下路径\system\core\rootdir\init.rc中修改:
ril-daemon 服务(添加前注释掉原来的 ril-daemon 服务)
pppd_gprs 服务
1.5修改分配ip地址是挂接到usb0:
没修改之前,ip地址是挂接到eth0上,都没有接网线,这样肯定不对。
kernel\drivers\net\usb\usbnet.c中:
eth改为usb。用ifconfig查看ip地址:
1.6打包相关文件到系统中
以上文件是模组厂提供的,只需要预置到系统对应的文件下就可以了。
1.7 apn配置
一般是修改apns-conf.xml文件,一般常用的卡比如移动、联通、电信都是有已经配置好在里面了。特殊的卡才需要自己再继续添加。
1.8 buil.prop里面设置网络的优先等级
ro.telephony.default_network=22
这个对应frameworks\base\telephony\java\com\android\internal\telephony\RILConstants.java
2、调试
此时,我们的基本适配工作就做完了。编译系统并烧写。首先可以来检查我们的4G模块是否被正确识别到。可以查看内核打印来检查。
通常kernel启动时候打印以上信息,说明驱动没问题了。
抓取Radio log的方法:adb logcat -b radio -v time,如果上不了网,可以通过这个打印信息来分析问题。
几条调试可能用到的AT指令:
AT+CPIN? //SIM 卡状态
AT+CSQ //信号强度
AT+ZPAS? //注册状态
echo -e "AT+ZSNT?" > /dev/ttyUSB1//查看模块是什么模式
echo -e "AT+ZSNT=0,0,0" > dev/ttyUSB1//这个是自动模式
注意:模块要设置成自动模式才可以用。
总结:按照以上的步骤来调试,sim卡装上移动卡和联通卡发现都可以上网,但是装上电信物联卡就不行,经了解原来电信物联卡具有绑定设备的功能,也就是此卡已经绑定之前在用的ec20模块,要在其他设备上使用的话,需要解锁才可以。果然,解锁了之后,插上马上就有信号出来了。
参考:https://www.cnblogs.com/chorm590/p/rk3128_me3630-w.html
官方文档:高新兴物联模组Android系统RIL适配参考_V1.6-20190315