1 概述
平台:freescale i.MX 6Quad 4核开发板Sabrelite
操作系统:Android 4.0.4
内核:3.0.15
3G模块:中兴MG3732和UbloxLISA-U130
2 中兴MG3732模块移植
2.1 准备
准备一张可用的联通3G卡,放入SIM卡卡槽,接着把中兴MG3732开发板通过usb连接到主板上。
2.2 移植步骤
1) 拷贝libztewcdma-ril.so文件到 /system/lib目录下
2) 在/driver/usb/serial/option.c中添加pid,vid如下:
- {USB_DEVICE(0x19d2, 0xffff) },
- {USB_DEVICE(0x19d2, 0xfffe) },
- {USB_DEVICE(0x19d2, 0xfffd) },
- {USB_DEVICE(0x19d2, 0xfffc) },
- {USB_DEVICE(0x19d2, 0xfffb) },
- {USB_DEVICE(0x19d2, 0xfff1) },
- {USB_DEVICE(0x19d2, 0xfff6) },
- {USB_DEVICE(0x19d2, 0xfff7) },
- {USB_DEVICE(0x19d2, 0xfff8) },
- {USB_DEVICE(0x19d2, 0xfff9) },
- {USB_DEVICE(0x19d2, 0xffee) },
- {USB_DEVICE(0x19d2, 0xffed) },
- {USB_DEVICE(0x19d2, 0xffeb) },
- {USB_DEVICE(0x19d2, 0xffec) },
3) 拷贝chat, pppd到/system/bin目录下,确保/system/bin 目前下有pppd 和chat 两个程序,且可以运行
4) 添加ip-up到/system/etc/ppp/目录下
5) 在init.rc文件中添加
- chmod 0755 /system/lib/libztewcdma-ril.so
- chown root /system/bin/pppd
- chmod 4755 /system/bin/pppd
-
-
- service ril-daemon /system/bin/rild -l/system/lib/libztewcdma-ril.so -- -d /dev/ttyUSB0
- socket rild stream 660 root radio
- socket rild-debug stream 660 radio system
- user root group radio cache inet misc
6) 配置menuconfig如下:
- [*] Network device support --->
- <*> PPP (point-to-point protocol) support
- [*] PPP multilink support (EXPERIMENTAL)
- [*] PPP filtering
- <*> PPP support for async serial ports
- <*> PPP support for sync tty ports
- <*> PPP Deflate compression
- <*> PPP BSD-Compress compression
- <*> PPP MPPE compression (encryption)(EXPERIMENTAL)
- <*> PPP over Ethernet (EXPERIMENTAL)
- <*> PPP over L2TP (EXPERIMENTAL)
2.3 调试过程
1、 进入android系统后,首先查看模块的端口是否识别,如果能正确识别的话,可以看到以下4个端口:
- /dev/ttyUSB0
- /dev/ttyUSB1
- /dev/ttyUSB2
- /dev/ttyUSB3
2、 注意设置ril-daemon的端口为/dev/ttyUSB0,否则rild进程无法启动,在
logcat –b radio中会显示以下错误:
- I/RILJ ( 2392): Couldn't find 'rild' socket; retrying after timeout
- I/RILJ ( 2392): Couldn't find'rild' socket; retrying after timeout
- I/RILJ ( 2392): Couldn't find'rild' socket; retrying after timeout
- I/RILJ ( 2392): Couldn't find'rild' socket; retrying after timeout
- I/RILJ ( 2392): Couldn't find'rild' socket; retrying after timeout
3、 在调试过程中,模块可以拨打电话,但无法上网,用ps命令未发现pppd进程,log如下:
- D/RILJ ( 2369): 0: [77] SETUP_DATA_CALL
- E/RILD ( 2135): get exit sig 17
- E/RILD ( 2135): checkPPPConnection: pid_exit == 1
- E/RILD ( 2135): checkPPPConnection: interface[ppp0]information is not found
- E/RILD ( 2135): start_pppd: failed to check PPP interfaceUP
- E/RILD ( 2135): EVENT_PPPD_MANAGER_PPPD_EXIT
- E/RILD ( 2135): pppd exit. status = 1024
- E/RILD ( 2135): pppd exit . no restart pppd .
- E/RILD ( 2135): SetupDefaultPDP failed.
说明pppd进程启动失败。
后发现是pppd权限问题导致,解决方法如下:
启动系统后,在adb中执行以下命令修改pppd权限:
- chown root /system/bin/pppd
- chmod 4755 /system/bin/pppd
若系统是只读属性,需用remount命令重新挂载文件系统:
- mount –o remount,rw/dev/block/mmcblk0p5 /system/
3 ublox LISA-U130模块移植
3.1 准备
准备一张可用的联通3G卡,放入SIM卡卡槽,接着把ublox u130开发板通过usb连接到主板上。
3.2 移植步骤
1) 解压ublox提供的压缩文件如下:
- RIL_sc_<version>.zip
- ril_sc_<version> Source overlay for Android Platform
- build/target/product Device configuration folder files
- external/ppp/ Data connection files
- hardware/gsm0710muxd Channelmultiplexer
- hardware/ril/ublox_ril/ RIL core directory
- system/core/rootdir/Android.mk Compilation script
- system/core/init/property_service.c Set RIL services property
- system/core/liblog/logd_write.c Log configuration files
2) 把相关文件拷贝到android源码中
- cp –pvRf ril_sc_<version>/external/ppp/ <android_root>/external/ppp
- cp –pvRf ril_sc_<version>/hardware/ril/ublox_ril <android_root>/hardware/ril/
- cp –pvRf ril_sc_<version>/system/* <android_root>/system
- cp –pvRfril_sc_<version>/build/* <android_root>/build
3) 在device/fsl/imx6/AndroidProducts.mk中添加:
RIL_COM_INTERFACE := usb
4) 在init.rc文件中添加如下语句:
- # Changepermissions for modem
- chmod 0660 /dev/ttyACM0
- chown radio radio /dev/ttyACM0
- chmod 0660 /dev/ttyACM1
- chown radio radio /dev/ttyACM1
- chmod 0660 /dev/ttyACM2
- chown radio radio /dev/ttyACM2
-
- # Set permissions for u-blox RILRepository
- chown radio radio /system/etc/rril
- chmod 0770 /system/etc/rril
- chown radio radio/system/etc/rril/repository.txt
- chmod 0660/system/etc/rril/repository.txt
-
- # Set u-blox RIL repository state
- setprop net.rril.repository notready
-
- #Prepare u-blox RIL repository
- service rril-repo/system/bin/rril-repo.sh
- user root
- group radio
- oneshot
-
- # Load u-blox RIL
- service ril-daemon /system/bin/rild -l/system/lib/librapid-ril-core.so --
- -a /dev/ttyACM0 -n /dev/ttyACM1
- class main
- socket rild stream 660 root radio
- socket rild-debug stream 660 radiosystem
- user root
- group radio cache inet misc audio
-
- service pppd_data0/system/bin/init.gprs-pppd
- user root radio
- group radio cache inet misc
- disabled
- oneshot
-
- service pppd_data1/system/bin/init.gprs-pppd
- user root radio
- group radio cache inet misc
- disabled
- oneshot
-
- service pppd_term /system/bin/stop_pppd15
- class main
- disabled
- oneshot
-
- service pppd_kill /system/bin/stop_pppd 9
- class main
- disabled
- oneshot
5) 配置menuconfig如下:
- DeviceDrivers
- USB Support
- <*>USB Modem (CDC ACM)support
-
- DeviceDrivers
- Network device support
- <*>PPP (point-to-pointprotocol) support
- <*>PPP support for asyncserial ports
- <*>PPP support for sync ttyports
- <*>PPP Deflate compression
6) 重新编译系统,确保生成以下文件
- /system/lib/librapid-ril-core.so
- /system/lib/librapid-ril-util.so
- /system/lib/librapid-ril-oem.so
-
- /system/bin/pppd
- /system/bin/chat
-
- /system/bin/init.gprs-pppd
- /system/bin/ip-down
- /system/bin/ip-up
- /system/bin/stop_pppd
- /system/bin/rril-repo.sh
-
- /system/etc/rril/repository.txt
-
- /system/etc/ppp/ chap-secrets
- /system/etc/ppp/ chat-isp1
- /system/etc/ppp/ chat-isp2
- /system/etc/ppp/ ip-down-ppp0
- /system/etc/ppp/ ip-up-ppp0
- /system/etc/ppp/ ip-up-vpn
- /system/etc/ppp/pap-secrets
-
- /system/etc/ppp/peers/gprs1
- /system/etc/ppp/peers/gprs2
-
3.3 调试过程
1、 启动系统后,确保3G模块端口可以被系统识别:
- /dev/ttyACM0
- /dev/ttyACM1
- /dev/ttyACM2
- /dev/ttyACM3
- /dev/ttyACM4
- /dev/ttyACM5
2、 用ps命令查看rild进程是否启动,如果已启动,此时一般拨打电话是没问题的。
3、 在调试过程中发现不能上网,用ps命令查看,发现pppd进程未启动。在adb中用logcat –b radio查看日志发现有两处错误:
第一处错误:
- E/RILR ( 2109):CRepository::OpenRepositoryFile() - ERROR: Could not open file"/data/rril/repository.txt" - No such file or directory
第二处错误:
- I/pppd.gprs( 3262): Configure pppd securityoptions
- I/pppd.start( 3271): Starting pppd
- E/pppd ( 3272): unrecognizedoption 'gprs1'
- I/pppd.start( 3279): pppd exited with2
第一处错误could not find /data/rril/repository.txt的原因是/system/bin/rril-repo.sh脚本未得到执行,解决方法是修改/system/bin/rril-repo.sh的权限,以及在init.rc中添加servicerril-repo的class属性:
- # Prepare u-blox RIL repository
- service rril-repo /system/bin/rril-repo.sh
- class main
- user root
- group radio
- oneshot
第二处错误unrecognizedoption 'gprs1'的原因是执行/system/bin/init.gprs-pppd脚本时出错,当$ppp_usr为空字符串时,脚本执行以下语句:
- /system/bin/pppd user $ppp_usr call gprs$(( $ppp_if + 1 ))
- =》
- /system/bin/pppd user call gprs1
此语句执行失败,所以pppd进程无法启动。
修改后的正确的脚本为:
- case $ppp_auth in
- 0)
- /system/bin/log -t pppd.start "/system/bin/pppd call gprs$(( $ppp_if+ 1 ))"
- /system/bin/pppd call gprs$(( $ppp_if + 1 ))
- ;;
- *)
-
- if [ "$ppp_usr" = "" ];then
- /system/bin/log -t pppd.start "/system/bin/pppd call gprs$(( $ppp_if+ 1 ))"
- /system/bin/pppd call gprs$(( $ppp_if + 1 ))
- else
- /system/bin/log -t pppd.start "/system/bin/pppd user $ppp_usr callgprs$(( $ppp_if + 1 ))"
- /system/bin/pppd user $ppp_usr call gprs$(( $ppp_if + 1 ))
- fi
-