Chinaunix首页 | 论坛 | 博客
  • 博客访问: 247051
  • 博文数量: 26
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-14 23:54
文章存档

2010年(26)

我的朋友

分类: 嵌入式

2010-09-27 20:53:18


一、pppd相关文件
  
   Android ril相关的代码和脚本主要有:
   android/hardware/ril/reference_ril/   (reference_ril.c)
   android/hardware/ril/rild
   android/extern/ppp/pppd
   android/extern/ppp/chat
   android/data/etc/apn-conf-sdk.xml
   android/system/core/rootdir/etc/ppp/init.gprs-pppd
   android/system/core/rootdir/etc/ppp/peers/cmnet
   android/system/core/rootdir/etc/ppp/chat/cmtc-isp
   android/vendor/xxxxx/xxxx/system.prop
  
   1、reference_ril.c: RIL的一些AT命令操作,通过一些onRequest接口操作,对不同的硬件,需作一
      些修改调整。
  
   2、apn-conf-sdk.xml: 以下是一个例子,有些不支持的APN,需要自己加上去,否则在log中会出现类
      似:No APN found for carrier: 46xxx, 的错误。一般移动的TD USIM是46007, 有些是
      46000。
       
                           mcc="310"
                mnc="995"
                apn="internet"
                user="*"
                server="*"
                password="*"
                mmsc="null"
           />
                           mcc="310"
                mnc="260"
                apn="internet"
                user="*"
                server="*"
                password="*"
                mmsc="null"
           />
                           mcc="460"
                mnc="00"
                apn="cmnet"
                user="*"
                server="*"
                password="*"
                mmsc="null"
           />
                           mcc="460"
                mnc="07"
                apn="cmnet"
                user="*"
                server="*"
                password="*"
                mmsc="null"
           />
      

  
  3、init.gprs-pppd: 调用pppd GPRS拨号的初始化脚本。
         PPPD_PID=
         /system/bin/setprop "net.gprs.ppp-exit" ""
         /system/bin/log -t pppd "Starting pppd"
     
         /system/xbin/pppd call cmnet $* //调用脚本/system/etc/peers/cmnet
       或
         /system/xbin/pppd connect 'chat -v "" "AT" "ATDT#777 CONNECT"' user \
                     CARD password CARD /dev/ttyUSB2 115200 nodetach crtscts \
                                                debug usepeerdns defaultroute
       //直接用参数,其中/dev/USB2是控制端口。
         PPPD_EXIT=$?
         PPPD_PID=$!
         /system/bin/log -t pppd "pppd exited with $PPPD_EXIT"
         /system/bin/setprop "net.gprs.ppp-exit" "$PPPD_EXIT"
 
  4、cmnet:pppd拨号option脚本:
         /dev/ttyUSB3
         921600
         nocrtscts
         nocdtrcts
         local
         usepeerdns
         defaultroute
         noipdefault
         ipcp-accept-local
         ipcp-accept-remote
         user cmnet
         password cmnet
         lock
         nodetach
         connect "/system/xbin/chat -v -t 50 -f /system/etc/ppp/chat/cmtc-isp"
 
  5、cmtc-isp:
         ABORT 'BUSY'
         ABORT 'NO CARRIER'
         ABORT 'ERROR'
         ABORT '+CME ERROR: 100'
         ""    AT
         OK    AT+CGDCONT=1,"IP","CMNET"
         OK    AT+CGEQREQ=1,2,128,384,0,0,0,0,"0E0","0E0",,0,0
         OK    AT
         OK    AT
         OK    ATS0=0
         OK    AT
         OK    AT
         OK    ATDT*98*1# 
         CONNECT

    如果要连联通的WCDMA,就用
         OK    AT+CGDCONT=1,"IP","3GNET"
         OK    ATDT*99#  //拨号命令
    
  6、system.prop:
         rild.libpath=/system/lib/libreference-ril.so
         rild.libargs=-d /dev/ttyS0
         wifi.interface=eth1
 
二、RIL配置支持
 
    在Android中RIL是通过pppd实现的,要启动pppd,需要在init.rc中添加:
        service pppd_gprs /system/etc/init.gprs-pppd
            user root
            group radio cache inet misc
            disabled
            oneshot
         service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so --
                                  -d /dev/ttyUSB3 -u /dev/ttyUSB0
         socket rild stream 660 root radio
         socket rild-debug stream 660 radio system
         user root
         group radio cache inet misc audio
  
    Modem插入USB口模拟串口,驱动会检测到两个serial端口的,一个是控制的,一个是数据的。
    这里/dev/ttyUSB3表示控制端口。
 
三、RIL流程分析
    一开机启动pppd后,如果检测到Modem(通过/dev/ttyUSB*设备来判断),pppd_gprs daemon就调用
    init.gprs-pppd连接,
    正常通信后,会显示连接到3G网络标志。
    然后设置APN,保存好之后重启,就会自动连接到internet。
四、手动测试3G modem
  
    1、加载驱动
       如果驱动加载成功,会出现/dev/ttyUSB*设备的。
    
    2、进入/etc/ppp/peers目录,执行
       pppd call cmnet &
   
       这里cmnet是一个包含拨号命令的文件。
 
    3、设置DNS
       把由pppd自动产生的/etc/ppp/resolv.conf复制到/etc/resolv.conf。
    
    4、前面都成功的话,这是应该能ping通网络的。
 
 

 
阅读(15270) | 评论(24) | 转发(3) |
给主人留下些什么吧!~~

chinaunix网友2010-12-08 11:54:59

xmfish01,您好。2.1和2.2都没有chat了,启动pppd后就会触发底层的ril,不用chat也是可以的。

chinaunix网友2010-12-08 11:37:00

博主你好,我刚开始做android 2.0 eclair的一些工作,现在需要在开发板上接一个3G的手机模块,可以上网,打电话。看到你写的文章,让我有了一个方向。有几个问题想请教下: 1,android有自带完整的拨号程序吗?我定制内核时添加了ppp的相关选项,但是系统里只有一个pppd程序,找不到chat程序 2,可能是因为版本的不同,在你提到的目录位置下找不到这个文件init.gprs- pppd,apn-conf等文件。 我想自己移植ppp,但是怎么才能将编译好的pppd和chat融合到android系统里?? 3,是不是只需要通过脚本配置后,接入3G手机模块,在系统启动后就能拨号上网了? 你所提到的ril守护进程跟这个有关系吗? thanks in advance. 登录博客时总是提示用户名密码不对,没办法了,只好匿名留言试试了。

chinaunix网友2010-12-05 00:16:10

你好,现在我跟踪发现出错的地方在返回网络相应时,但是我不知道怎么解决,前辈可以指点一下吗? 当在RIL_REQUEST_REGISTRATION_STATE下, reference-ril.c发送指令: cmd = "AT+CREG?"; prefix = "+CREG:"; err = at_send_command_singleline(cmd, prefix, &p_response); 返回的err是-6,这就是出错的根源,我查过-6的意思是AT_ERROR_INVALID_RESPONSE,具体解析为an at_send_command_singleline that did not get back an intermediate response,请问这是什么问题呢?困扰了我很久希望前辈能帮忙,谢谢!

chinaunix网友2010-12-04 12:15:07

您好,我现在网络注册不了,出现以下情况,请您帮忙看一下,谢谢! 1.在onRequest: GPRS_REGISTRATION_STATE时出现以下问题: E/RIL ( 967): requestRegistrationState must never return an error when radio is on这是什么意思呢? 2.同样是在注册网络的时候发现这个错误,是因为reference_ril.c下的注册网络的AT指令不对吗? D/RIL ( 967): onRequest: REGISTRATION_STATE D/RILJ ( 1138): [0018]< GPRS_REGISTRATION_STATE error: com.android.internal.telephony.CommandException: GENERIC_FAILURE 请指点,谢谢!!

chinaunix网友2010-12-02 16:14:57

前辈,您好! 1.启动的时候我用logcat -b radio查看发现这样错误,不知道您有没遇到? I/RILJ ( 1104): Couldn't find 'rild' socket; retrying after timeout 2.我用pppd call gprs测试(gprs为我写的脚本文件,在linux下测试可以拨号成功): E/pppd ( 1354): Connect script failed 只出现以上错误,没有其他信息输出,我不知道如何下手啊,能指点一下吗? 3.另外,我在网上看到一些人可以打印AT指令的输出,可是我的却没有,是因为我没打开AT debug吗?如果是,请问开关在哪呢?谢谢!