[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668

按照FIBOCOM给的Android适配文档进行操作即可。其中有几个坑会在描述过程中标注出来。

一、添加USB驱动。

直接将FIBOCOM的NL668模块接上,插上卡,是检测不到卡的。串口调试模式下,输入指令:

$ su
# cd dev
# ls

查看设备节点,是没有ttyUSB0-4的。

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第1张图片

各个设备节点功能如下图所示:

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第2张图片

其中ttyUSB2为AT指令端口。

 

因此第一步是添加ttyUSB0-4的设备节点。

cd kernel
make menuconfig
device drivers->usb support->usb serial converter support 
选中如下组件:
USB driver for GSM and CDMA modems 
选中后保存配置。

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第3张图片

 

增加设备支持
1:打开内核源码文件 option.c(路径一般为 drivers/usb/serial/option.c)。在源码中找到 option_ids 数组,在数组中添加 NL668 产品的 VID(0x1508)和 PID(0x1001);  (添加到数组的最后)

static const struct usb_device_id option_ids[] = {
… …
#if 1
{ USB_DEVICE(0x1508, 0x1001) },
#endif
… …


2:在 USB 串口驱动中,过滤 NDIS 接口。由于 USB 串口跟 NDIS 都属于非标准 CDC 设备,需要防止 NDIS口被 USB 串口驱动加载而导致无法正常加载 NDIS 口驱动。

比较新的 kernel 版本(3.8 以上),在 option.c 中的 opiton_ids 中添加 blacklist,驱动在加载时会自动跳过 blacklist 指定的 interface,设置 interface 4 不加载 otpion 驱动,具体代码如下:  (添加在上一数据上边即可)

#if 1
static const struct option_blacklist_info fibocom_blacklist = {
 .reserved = BIT(4),
};
#endif


添加 blacklist 到 option_ids 数组中(上第一步添加的地方下添加即可,注意格式),具体代码如下:

#if 1
{ USB_DEVICE(0x1508, 0x1001),
 .driver_info = (kernel_ulong_t)&fibocom_blacklist
}
#endif

按照文章刚开始的操作,即可看到设备节点。

$ su
# cd dev
# ls

 

二、加载库文件。

驱动加载好后,看到ttyUSB0-4的设备节点,此时就可以通过该节点和4G模块通信了,可以简单的测试一下:

$ su
# chmod 777 /dev/ttyUSB2
# echo -e "AT\r\n" > /dev/ttyUSB2
# cat /dev/ttyUSB2

# echo -e "AT+CSQ\r\n" > /dev/ttyUSB2
# cat /dev/ttyUSB2

# echo -e "AT+CPIN?\r\n" > /dev/ttyUSB2
# cat /dev/ttyUSB2

其中 “AT\r\n”指令为测试指令,会返回OK,说明链路通了,如果不同,则需检查硬件是否正常工作;

“AT+CSQ\r\n”指令为信号强度指令,会返回 CSQ:  23,99,其中第一个数值在1-31之间,数值越大信号越强,99表示无信号。

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第4张图片

“AT+CPIN?\r\n”指令会返回READY。

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第5张图片

此时,调试模式下输入指令,会返回如下信息:

getprop |grep ver

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第6张图片

因为库文件还没有替换,ril信息还是其他厂家的信息,因此无法完成ttyUSB设备节点的调用,无法检测到卡,必须替换NL668的库文件才能正常调用ttyUSB设备节点,ril信息也会更新为NL668的信息。替换后如下图:

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第7张图片

替换库文件信息后,显示为NL668-RIL_V8X.06.15

 

替换库文件的方式为:

安装RE文件管理器;

将厂家提供给的 “libreference-ril.so”库文件拷贝到 /system/lib文件夹下,注意,芯片为64位的安卓系统,应拷贝到 /system/llib64文件夹下。

拷贝完成后,一定要确认是否拷贝成功,我的第一次没有拷贝成功,查了半天才发现,重新拷贝一次后正常了。

 

三、修改rild.c

在 rild.c 的 main 函数中,去掉 switchuser 函数的调用,如下图:

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第8张图片

四、修改Android启动脚本init.rc

通过RE文件管理器修改init.rc,修改后,重启,发现恢复了,所以我是通过修改源文件实现的,具体路径根据自己工程确定。 

/proj/firefly-rk3399/device/rockchip/rk3399/rk3399_firefly_box$ vim init.rc

修改启动脚本加载 NL668 模块的设备,并且设置使用的 RIL 库与相应的端口号。
service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -w 0 -d /dev/ttyUSB2 -m 
/dev/ttyUSB1
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

注:-w 参数配置的是拨号方式,0----ppp 拨号,2---NDIS 拨号。根据实际情况选择-w 的参数。

[RK3399][Android7.1]适配 FIBOCOM的4G模块 NL668_第9张图片

修改后编译整个工程,重新下载,下载后别忘了替换库文件。

 

到这里基本就结束了。最后还有一个坑,所有的配置工作完成后,可以检测到中国移动,但是提示无服务。

NL668默认为网络为3G,居然搜索不到,到设置里面,找到网络选择,选择为网络LTE后,可正常上网。

 

附上驱动包的网盘链接,需要的提取就OK了。

链接:https://pan.baidu.com/s/1H8MS39KccSvN5QxHaDQemQ 
提取码:qqgu

 

你可能感兴趣的:(Android,RK3399,Android7.1,4G模块,NL668,移植)