RK3288 Android7.1 4G模块 NL668 调试记录

RK3288下调试4G模块 NL668 记录
1.增加支持设备
  1)打开内核源码option.c 路径:kernel/driver/usb/serial/option.c
在源码中找到option_ids数组,在数组中添加NL668产品的VID(0x1508)和PID(0x1001);

static const struct usb_device_id option_ids[] = {
... ...
    /***********Add NL668 by hl********************/
    #if 1
    { USB_DEVICE(0x1508,0x1001)},
    #endif
... ...

任何一个USB设备都有一个PID和VID,若不知道模块的PID和VID,可以通过以下方式获取:
  a.模块使用手册
  b.adb调试查找:
  先将模块电源脚(IO口)拉低,通过
  adb shell busybox lsusb
  会列举出当前bus下挂载USB设备的PID和VID,
  再将模块电源脚拉高,
  adb shell busybox lsusb
  看看那个usb设备是新增的,则其后的PID和VID就是当前模块的,再将PID和VID添加到option.c 的option_ids数组中。
修改IO口状态方式:
(1)adb调试中修改IO口状态
查看IO口状态命令:shelll模式下-> io -option address,option表示显示位数 address:GPIO地址(基址寄存器)

修改IO口状态命令:shell模式下-> io -option address value
value:要写入的值

这里衍生出一个问题:如何通过RK3288的参考手册查找某个GPIO的基址寄存器?
方法:先在手册中查找到Address mapping,通过基址寄存器表来查找GPIO对应的基址,部分表如下图所示:
Address mapping
找到Address mapping后,如何计算寄存器基址?
如何计算寄存器基址??
例:gpio0 5
从图中找出gpio0,可知是0Xff750000, 则基址0xff750000的值即表示gipo5 A0到D7的值,可以通过以下命令在adb中读值和写值:
io -r -4 xxxx(寄存器地址):读
io -4 xxxx(寄存器地址) xxxx(值):写
如:
adb shell
io -4 0xff750000
得出 ff750000 :00007241 转换成二进制 0000 0000 0000 0000 1111 0010 0100 0001,
1-8位表示A0到A7,9-16表示B0到B7,17-24表示C0到C7,25-32表示D0到D7,gpio0 5 为第六个io口,上面的第六位的值是0,值为0,表示低电平,若为1,高电平

基址加4后=0xff750004,设置0xff750004的值,表明A0-D7这些gpio的状态是输入还是输出。
如:0xff750004=0x00040000 表示gpio5 C2为输出(0表示输入,1表示输出)
2)在USB串口驱动中,过滤NDIS接口,相关代码如下:
   

/********************Add NL668 by hl*******************/
#if 1
static const struct option_blacklist_info fibocom_blacklist= {
    .reserved = BIT(4),
};
#endif

  3)添加blacklist到option_ids数组中,具体代码如下:
  

static const struct usb_device_id option_ids[] = {
... ...
    /***********Add NL668 by huling********************/
    #if 1
    { USB_DEVICE(0x1508,0x1001),
        .driver_info = (kernel_ulong_t)&fibocom_blacklist },
    #endif
... ...

注:以上方法使用于比较新的kernel版本(3.8以上),对于低版本kernel解决办法见 附件“FIBOCOM NL668应用指南_Linux下GobiNet驱动加载_V1.0.1.pdf”

2.USB串口驱动加载
adb shell ls /dev
出现以下端口映射:
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4
表明驱动加载成功,则编译linux内核烧录到目标设备。

3.加载库文件
模块厂为了公司保密可能会直接给编译好的libreference.so文件,可以直接将该文件adb push 到 /system/lib/ 路径下,或者模块厂给了驱动源码,可将驱动编译之后生成libreference.so文件push到目标设备。

4.修改rild.c
  在rild.c的main函数中,去掉switchUser()函数的调用,相关代码如下:
  

OpenLib:
#endif
    //hl add
    //switchUser();

    dlHandle = dlopen(rilLibPath, RTLD_NOW);

    if (dlHandle == NULL) {
        RLOGE("dlopen failed: %s", dlerror());
        exit(EXIT_FAILURE);
    }

5.修改android启动脚本
路径:/system/core/rootdir/init.rc 编译之后会在out/target/product/rk3288/root目录下生成Init.rc 可直接修改out目录下的init.rc再adb push 到目标设备的根目录。
  实际操作中遇到一个问题:adb push init.rc文件时,出现readonly file system ,通过chmod修改文件权限为可读写,但是依旧没有,所以采用第二种方法:修改/system/core/rootdir/init.rc后编译、下载到目标机器
修改内容如下:

service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -d /dev/ttyUSB2 -m /dev/ttyUSB1 -w 2
    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

以上修改作用:修改启动脚本加载NL668模块设备,并且设置使用的RIL库与相应的端口号

注:init.rc文件中只允许出现一个service ril-daemon

以上步骤完成,一般情况下可以在设置中查看到基带版本信息,若调试时只有一块板子,没有接LCD显示屏,可以通过以下方式查看基带版本信息:
adb shell
:su : s u getprop |grep ver,会列举出一些版本信息:
 version infomation

6.APN设置
开发板插入SIM卡,开机后设置android的APN,
设置—》无线和网络(更多)—》移动网络—》接入点名称(APN)
新建APN,输入Name,APN,MCC,MNC,保存
重启目标设备

开发板不能进入android设置时,可通过修改:
/system/etc/apns-conf.xml文件对APN进行修改

备注:
移动使用cmnet APN
联通使用 3gnet APN
电信CDMA/EVDO/LTE使用ctnet APN,用户名使用ctnet@mycdma.cn,密码使用vnet.mobi

注意事项:
system.prop中要有以下设置:
rild.libpath=/system/lib/libreference-ril.so
rild.libargs=-d /dev/ttyUSB0

RIL层打印命令:
adb shell logcat -b radio >

遇到的问题:
1.驱动加载成功,已经出现基带版本,但是无法识别SIM卡。
原因:SIM_DATA没有上拉到SIM_VCC
解决办法:USIM_DATA上拉10K电阻到USIM_VDD

2.插入SIM卡后,能识别到但是没有信号
原因:经过检查是因为没有接天线
解决办法:外接一个4G天线

3.同过原厂那边工程师硬件电路检查,发现模块内部信号脚短路

参考资料:
FIBOCOM NL668应用指南_Linux下GobiNet驱动加载_V1.0.1.pdf
FIBOCOM NL668 应用业务流程手册_V2.0.1.pdf
FIBOCOM NL668 Android RIL适配指导手册_V1.0.1.pdf
其他参考资料:
上海域格9X07模块Android使用手册 1.20.pdf
Simcom Android ril 适配1.12.pdf

相关文档有时间再上传。

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页