i.max6 e9 android系统添加3G模块支持 上


分类: android定制   151人阅读  评论(0)  收藏  举报
imax6 e9 freescale 3G

目录(?)[+]

        本文为中兴MG3732为例,介绍3G模块在android系统上的移植过程。

         大部分3G模块厂商已经提供了3G模块的移植方法和需要的相关库,只需要按照手册中的步骤一步一步操作即可,下面一部分摘抄自中兴提供的说明,一部分是个人移植过程中遇到问题的一些解决方法,供大家参考。

        MG3732ZTEMT的一款移动终端,可以通过usb接口接入具备usb主机控制器功能的PCAndroidPAD等其他终端设备。基于WCDMA无线通信技术,实现语音、短信、无线数据业务。

           作为一个USB设备,它包括了几个接口。

  • 接口0:实现了一个modem, 用于AT控制指令的发送和接收,完成拨号上网功能。

  • 接口1实现的串口用做serviceport,用于发送和接收终端服务,短信、电话等控制指令(DM/AT)的响应。

  • 接口2:实现的串口作为接收和发送pcm语音数据。

  • 接口34(如果有)则作为diagnosticsportGPSport,目前基本不使用该串口。

对应Linux串口设备文件分别是:/dev/ttyUSB0/dev/ttyUSB1/dev/ttyUSB2/dev/ttyUSB3

MG3732在我电脑上的显示如下:

[html]  view plain copy
  1. lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$ ls /dev/ttyUSB*  
  2. /dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3  
  3. lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$  

     1、使用内核默认option驱动(推荐)

          我们推荐的最方便简单的方法是,使用(AndroidLinux内核自带的option.c模块;其中已经支持了不少usb3G模块设备。为了支持本公司新的模块,只需在option.c文件中添加对应的设备IDS就行了。

           查询模块设备IDS的方法很简单,只需要lsusb命令就能列出Linux系统下的所有USB设备IDS了。

[html]  view plain copy
  1. lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$ lsusb  
  2. Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub  
  3. Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub  
  4. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
  5. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
  6. Bus 002 Device 008: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB  
  7. Bus 002 Device 004: ID 046d:c05a Logitech, Inc. Optical Mouse M90  
  8. Bus 002 Device 009: ID 05e3:0723 Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader  
  9. Bus 002 Device 010: ID 19d2:ffeb ZTE WCDMA Technologies MSM   
  10. lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/TQIMX6_android-4.2.2$   

[html]  view plain copy
  1. Bus 002 Device 010: ID 19d2:ffeb ZTE WCDMA Technologies MSM   
        即为MG3732模块的信息,需要关注的是 19d2:ffeb,将MG3732 IDS 都加入drivers/usb/serial/ option.c 文件中,如下:
实际上,内核中已经添加好了的。
[html]  view plain copy
  1.        { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffff, 0xff, 0xff, 0xff) },  
  2. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffe, 0xff, 0xff, 0xff) },  
  3. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffd, 0xff, 0xff, 0xff) },  
  4. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffc, 0xff, 0xff, 0xff) },  
  5. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffb, 0xff, 0xff, 0xff) },  
  6. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff1, 0xff, 0xff, 0xff) },  
  7. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff6, 0xff, 0xff, 0xff) },  
  8. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff7, 0xff, 0xff, 0xff) },  
  9. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff8, 0xff, 0xff, 0xff) },  
  10. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff9, 0xff, 0xff, 0xff) },  
  11. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffef, 0xff, 0xff, 0xff) },  
  12. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffee, 0xff, 0xff, 0xff) },  
  13. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffed, 0xff, 0xff, 0xff) },  
  14. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffeb, 0xff, 0xff, 0xff) },  
  15. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffec, 0xff, 0xff, 0xff) },  
  16. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffea, 0xff, 0xff, 0xff) },  
  17. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffe9, 0xff, 0xff, 0xff) },  
  18. { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffe8, 0xff, 0xff, 0xff) },  
[html]  view plain copy
  1. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">       </span>  

    加入ID后,重新编译内核即可。新的内核就能支持这些模块了。

2、无线接口层介绍

当模块驱动被内核加载并正确驱动后,该3G模块才能进行无线通信功能的应用开发。这在Android系统下称为无线接口层——RIL。即该文档所要说明的RIL驱动。

i.max6 e9 android系统添加3G模块支持 上_第1张图片

        android的ril位于应用程序框架与内核之间,分成了两个部分,一个部分是rild,它负责socket与应用程序框架进行通信。另外一个部分是Vendor RIL,这个部分负责向下是通过两种方式与radio进行通信,它们是直接与radio通信的AT指令通道和用于传输数据包的通道,数据通道用于手机的上网功能。
也就是我们所提供的RIL驱动,是实现通信业务的核心功能模块。
        对于RIL的java框架部分,也被分成了两个部分,一个是RIL模块,这个模块主要用于与下层的rild进行通信,另外一个是Phone模块,这个模块直接暴露电话功能接口给应用开发用户,供他们调用以进行电话功能的实现。这是属于Android应用程序的开发部分,简单了解即可。
所以RIL驱动模块,必需是针对不同的3G模块(模块)指令和通信业务功能定制的,以支不同应用需求。建议开发人员在使用我们的RIL驱动前,先了解下“3G模块的特点和构造”。

3、模块RIL驱动使用说明

      3.1、目录结构说明
              在我们提供的附件压缩包中,一般包含如下文件和目录:
ppp 目录为pppd拨号脚本目录(该目录文件为测试脚本,可能不提供)
ril目录为启动ril所需的相关文件(文件名可能会根据版本不同进行修改),主要包括以下几个:
libzteevdo-ril.so:支持evdo制式的ril动态链接库
libztewcdma-ril.so:支持wcdma制式的ril动态链接库
zterilPara:参数配置文件
ip-up:pppd连接之后调用的脚本文件
注:libzteevdo-ril.so和libztewcdma-ril.so并不一定会同时提供,根据模块的制式通常只会单独提供其中一个。

    3.2、 RIL驱动使用说明 
1、拷贝libzteevdo-ril.so (libztewcdma-ril.so)以及zterilPara到 /system/lib目录下。
确保/system/bin 目录下有pppd 和chat 两个程序,且具有执行权限。
添加ip-up到/system/etc/ppp/目录下。
2、修改系统初始化配置init.rc,将原本的rild服务
        service ril-daemon /system/bin/rild
class main
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
socket rild-ppp stream 660 radio system
user root
group radio cache inet misc audio sdcard_rw log
      修改为
       service ril-daemon /system/bin/rild -l /system/lib/libztewcdma-ril.so 
 class main
 socket rild stream 0660 root radio
 socket rild-debug stream 0660 radio system
 user root

 group radio cache inet misc audio sdcard_rw log

           3.3、修改相应的设备读写权限

            包括/dev/ttyUSB0~/dev/ttyUSB3,有时会包括/dev/ttyUSB4和/dev/ttyUSB5,因此我们建议将所有的ttyUSB设备修改为radio用户可读写权限。修改init.freescale.rc文件,添加如下:

    chmod 0777 /dev/ttyUSB0
    chmod 0777 /dev/ttyUSB1
    chmod 0777 /dev/ttyUSB2
    chmod 0777 /dev/ttyUSB3
    chmod 0755 /system/lib/usiuna-ril.so
    chmod 0644 /system/lib/zterilPara
    chmod 0755 /system/lib/libztewcdma-ril.so
    chmod 0755 /system/lib/libzteevdo-ril.so
    chown root /system/bin/pppd
    chmod 4755 /system/bin/pppd
    chown root /system/bin/chat
    chmod 4755 /system/bin/chat
    chmod 755 /system/etc/ppp/ip-up
    setprop gsm.ril.delay 15
    setprop ro.ril.wake_lock_timeout 300
          3.4、  修改hardware/ril/rild/rild.c文件,以加载zte库,源码就不列了,等下以附件的形式供下载。
                       下载链接

你可能感兴趣的:(android定制)