Android img中的/dev/socket/qemud是用来和qemu虚拟机中的/system/bin/qemud通信的,这个不需要修改,需要做的工作是将qemu虚拟机中的qemud中的gsm channel和串口连接起来,使用./emulator @wulc -radio /dev/ttyS0的方式是正确的,不能收到信号的原因可能是串口的波特率和Modem的不匹配,可以修改位于qemu_char_android.c中的函数qemu_chr_open_tty()中的波特率试试,默认是115200,希望对您有所帮助,谢谢。

解决方案 »

  1.   


    首先谢谢哥们儿的回复:
    1.用原态代码编译,波特率改为跟我的modem(9600)匹配时,页面显示依旧是没信号,此时做MT call, logcat -b radio 显示的log中能看到RING上来,短信也能上来,log 如下:cs@cs-MS-7156:~/work/sdk/android-sdk_eng.csw_linux-x86/platform-tools$ ./adb logcat -b radio
    D/RILD    (   32): overriding with -s /dev/socket/qemud
    I/RIL     (   32): Opening socket /dev/socket/qemud
    D/AT      (   32): AT> ATE0Q0V1
    D/AT      (   32): AT< ATE0Q0V1
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> ATE0Q0V1
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> ATS0=0
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CMEE=1
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CREG=2
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CGREG=1
    D/AT      (   32): AT< +CREG: 1,"040A","9DE7"
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CCWA=1
    D/AT      (   32): AT< +CGREG: 0
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CMOD=0
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CMUT=0
    D/AT      (   32): AT< +CME ERROR: 3
    D/AT      (   32): AT> AT+CSSN=0,1
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+COLP=0
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CSCS="HEX"
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CUSD=1
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CGEREP=1,0
    D/AT      (   32): AT< +CME ERROR: 3
    D/AT      (   32): AT> AT+CMGF=0
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CFUN?
    D/AT      (   32): AT< +CFUN: 1
    D/AT      (   32): AT< OK
    D/AT      (   32): AT> AT+CPIN?
    D/AT      (   32): AT< +CPIN: READY
    D/AT      (   32): AT< +CREG: 1,"040A","52E7"
    D/AT      (   32): AT< +CREG: 1,"040A","9DE7"
    I/PHONE   (  145): Network Mode set to 0
    I/PHONE   (  145): Cdma Subscription set to 1
    I/RILJ    (  145): Connected to 'rild' socket
    I/PHONE   (  145): Creating GSMPhone
    D/PHONE   (  145): mDoesRilSendMultipleCallRing=true
    D/PHONE   (  145): mCallRingDelay=3000
    W/GSM     (  145): Can't open /system/etc/voicemail-conf.xml
    W/GSM     (  145): Can't open /system/etc/spn-conf.xml
    D/GSM     (  145): [DSAC DEB] registerForPsRestrictedEnabled 
    D/GSM     (  145): [DSAC DEB] registerForPsRestrictedDisabled 
    D/GSM     (  145): [GsmDataConnection-1] DataConnection constructor E
    D/GSM     (  145): [GsmDataConnection-1] clearSettings
    D/GSM     (  145): [GsmDataConnection-1] DataConnection constructor X
    D/GSM     (  145): [GsmDataConnection-1] Made GsmDataConnection-1
    D/RILJ    (  145): [0000]> RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING
    D/RILJ    (  145): [0001]> GET_CURRENT_CALLS
    E/GSM     (  145): Wrong network type: 0
    E/GSM     (  145): Wrong network type: 0
    D/GSM     (  145): Poll ServiceState done:  oldSS=[1 home null null null  Unknown CSS not supported 0 0RoamInd: 0DefRoamInd: 0EmergOnly: false] newSS=[1 home null null null  Unknown CSS not supported -1 -1RoamInd: -1DefRoamInd: -1EmergOnly: false] oldGprs=1 newGprs=1 oldType=unknown newType=unknown
    D/GSM     (  145): [GsmDataConnection-1] DcInactiveState: msg.what=EVENT_RESET, ignore we're already reset
    D/GSM     (  145): [GsmDataConnection-1] NotifyDisconnectCompleted
    D/GSM     (  145): [DataConnection] Stop poll NetStat
    D/GSM     (  145): [GsmDataConnection-1] clearSettings
    D/GSM     (  145): [DataConnection] Stop poll NetStat
    D/GSM     (  145): [DSAC DEB] trySetupData with mIsPsRestricted=false
    D/GSM     (  145): [IccCard] Broadcasting intent ACTION_SIM_STATE_CHANGED NOT_READY reason null
    D/RILJ    (  145): WAKE_LOCK_TIMEOUT  mReqPending=0 mRequestList=2
    D/RILJ    (  145): 0: [0] RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING
    D/RILJ    (  145): 1: [1] GET_CURRENT_CALLS
    MT call
    D/AT      (   32): AT< RING
    D/AT      (   32): AT< RING

    D/AT      (   32): AT< RING短信
    D/AT      (   32): AT< +CMTI: "SM",11
    D/AT      (   32): AT< +CREG: 1,"040A","52E7"
    D/AT      (   32): AT< +CREG: 1,"040A","9DE7"
    D/AT      (   32): AT< +CREG: 1,"040A","52E7"
    D/AT      (   32): AT< +CREG: 1,"040A","9DE7"
    D/AT      (   32): AT< +CREG: 1,"040A","64F3"
    D/AT      (   32): AT< +CREG: 1,"040A","F196"
    D/AT      (   32): AT< +CREG: 1,"040A","9DE7"
    D/AT      (   32): AT< +CREG: 1,"040A","52E7"
    D/AT      (   32): AT< +CREG: 1,"040A","9DE7"2. 另外做了个实验,改了下reference-ril.c 和rild.c中的代码,
    把RIL_Init()中个设备号强行改为串口/dev/ttyS2(Unbuntu 上是ttyS0 ,映射到模拟器是ttyS2)
    在mainLoop()中 把s_device_path 也强行改为/dev/ttyS2
    把rild.c main()中的arg_overrides 也强行改为/dev/ttyS2
    用 ./emulator @wulc -qemud -serial /dev/ttyS0 启动, 也是能在log中看到MT call ring,UI显示无信号。
      

  2.   

    在init.rc 中的service ril-daemon /system/bin/rild
    后面添加了 -l /system/lib/libreference-ril.so -- -d /dev/ttyS2 -u /dev/ttyS2没什么作用
      

  3.   

    这两种方法应该都可行,无非就是把一个设备跟rild接起来
    敢问楼主这么做的目的是什么?调试modem?还是双模?
      

  4.   

    您好,楼主,请教下怎么替换模拟机中的库文件的,把新的libril.so和libreference.so adb push 到system/lib/下面,但模拟机重启后libril.so和libreference.so 又变回原来模拟机自带的库文件,不是你所上传上去的,不知道你是怎么替换模拟机system/lib 和system/bin下面的文件的?
      

  5.   


    如果你也在调类似的功能,加我msn:[email protected] 咱们一起讨论!