Sofia_3gx 系统启动和telephony验证流程

为了3Gx项目正常power on,简单整理了工厂板子上电到telephone基本功能验证的基本流程。希望基于整理的内容,在遇到实际问题的时候,能够快速定位出当前板子卡在那一步,便于下面进一步定位解决。

我这边整理内容分为两个部分:

1.      系统启动流程

2.      Telephone模块基本功能验证步骤

 

下面是详细内容:

一、系统启动流程

1.      bootloader启动:引导过程可归纳为:CPU加载BIOSBIOS加载内核引导程序,内核引导程序加载压缩内核,压缩内核加载解压内核

·        CPU自身初始化:

CPU自身的初始化是引导过程的第一步,如果有多个CPU,即多处理器系统,则每个CPU都要进行自身初始化。接下来,CPU从某个固定位置(一般是0Xfffffff0)取得指令并执行。该指令为跳转指令,跳转到BIOS代码的首部

·        BIOS

BIOS被固化于主板上一个容量相对较小的只读存储器(Read-OnlyMemoryROM)中,它的工作主要有两个:加电自检,即进行所谓的POSTPower OnSelf Test);加载内核引导程序

·        内核引导程序

比如u-boot,将Linux内核映像加载到内存中并执行,并将控制权转交给内核

·        Linux内核

内核映像被加载到内存并获得控制权之后,内核阶段开始工作。通常,内核映像以压缩形式存储,并不是一个可执行的内核。因此,内核阶段的首要工作是自解压内核映像

最后,init/main.c中的start_kernel函数被调用,进入体系结构无关的内核部分

 

2.      kernel启动:内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中start_kernelrest_initkernel_initinit_post4个函数构成了整个初始化过程的主线

·        start_kernel

start_kernel函数开始,内核即进入了C语言部分,它完成了内核的大部分初始化工作

1)      init_IRQ:初始化系统中所有的中断描述结构数组

2)      softirq_init:内核的软中断机制初始化函数

3)      console_init:初始化系统的控制台结构

4)      profile_init:对系统剖析做相关初始化,系统剖析用于系统调用

5)      vfs_caches_init

6)      mem_init:内存初始化

·        rest_init

创建两个线程:1号和2号线程

·        kernel_init

注册系统设备的驱动程序,并调用init_post函数启动用户空间的init进程

·        init_post

寻找和启动init程序

init进程是linux起来之后启动的第一个用户进程,android系统也就是在这个进程的基础上启动的。进程号是1

 

3.      android启动

·        init进程

1)      重新设置子进程终止时信号SIGCHLD的处理函数

2)      kernel启动过程中建立好的文件系统框架mount到相应目录

3)      open_devnull_stdio:将init进程的标准输入、输出、出错设备设置为新建的设备节点/dev/__null__

4)      读取并解析rc配置文件:init.rc

·        init中启动的各种服务:

1)      一些基本服务:voldnetdusbdadbddebuggerdmediabtwifi

2)      Servicemanager:这个服务管理着系统内所有binderservices

3)      Zygote:这是一个非常重要的服务app_processstartAndroid  Java Runtime  and start systemserver

4)      Rildtelephone相关功能后台服务

5)      Modem相关服务:sockclisocksrvril-daemon

·        Zygote:这个进程起来才会建立起真正的Android运行空间,初始化建立的Service都是Navtiveservice

AndroidRuntimec++java,会新建并启动一个虚拟机实例来执行ZygoteInit

ZygoteInitfork一个子进程来启动systemserver,父进程就作为真正的孵化进程存在了,每当系统要求执行一个 Android应用程序,Zygote就会收到socket消息FORK出一个子进程来执行该应用程序

Systemserver:启动android管理服务,如ActivityManagerPower Manager PackageManagerNetworkManagementConnectivityMountNotification

·        启动home界面启动

 

 

二、Telephone模块基本功能验证步骤

1.      bootloader启动,如果有问题需要查看串口log

2.      kernel启动,开始打印aplog

·        kernel启动打印pid =0  KERNEL log

01-02 09:48:21.000     0    0 I KERNEL  : [    0.000000] logger: register logcat console

·        运行到Android启动,打印log

---------beginning of system

01-0209:48:31.579   162   162 I Vold   : Vold 2.1 (the revenge) firing up

3.      Modem正常:

·        连接phonetool工具,正常发送AT指令,回应OK

·        MSM模块:

01-02 09:48:31.489   164  164 D MSM     : intMEH++

01-0209:48:36.529   164   517 D MSM    : pingModemRsp OK received

01-0209:48:40.539   164   164 D MSM    : handleClientEvents state --> E_MODEM_UP

4.      Imei修改:

连接phonetool工具,成功修改imei

5.      确认RADIO POWER ON ,正常获取到BASEBANDIMRI信息,

01-22 02:32:19.271  1561 1561 D RILJ    : [3664]>RADIO_POWER on [SUB0]

01-22 02:32:19.287  1561 2286 D RILJ    : [3664]<RADIO_POWER  [SUB0]

01-22 02:32:19.801  1561 1561 D RILJ    : [3669]>BASEBAND_VERSION [SUB0]

01-22 02:32:19.803  1561 1561 D RILJ    : [3670]>GET_IMEI [SUB0]

01-22 02:32:19.805  1561 1561 D RILJ    : [3671]>GET_IMEISV [SUB0]

01-22 02:32:19.808  1561 2286 D RILJ    : [3669]<BASEBAND_VERSION ASU_SF_3GR_MAINT_01.1603.03 [SUB0]

01-22 02:32:19.927   183  994 D RPC-RIL : IMEI NUM = 004999010641230

01-22 02:32:19.927   183  994 D RPC-RIL : IMEISV NUM = 00

01-22 02:32:19.928  1561 2286 D RILJ    : [3670]<GET_IMEI  [SUB0]

01-22 02:32:20.019  1561 2286 D RILJ    : [3671]< GET_IMEISV  [SUB0]

 

6.      确认CS/PS注网成功,通过下面status来查看CS/PS网络注册状态

·        CS registration status

RILJ   : [3789]> VOICE_REGISTRATION_STATE [SUB0]

RPC-RIL : net_read_cs_registration_status: status = 1 lac = 43021cellid = 13349839 net_act = 15,cs_registration_reject_cause = 17, sim_id = 0

RILJ   : [3789]< VOICE_REGISTRATION_STATE {1, a80d, cbb3cf, 15, 11, null, null, null, null, null, null, null, null, 0, 1d8} [SUB0]

·        PS registration status

RILJ   : [3788]> DATA_REGISTRATION_STATE [SUB0]

RPC-RIL : net_read_ps_registration_status: ps_status = 1, lac =43021, cellid = 13349839, net_act = 15, sim_id = 0

RILJ   : [3788]< DATA_REGISTRATION_STATE {1, a80d, cbb3cf, 15, 255, 2} [SUB0]

                注(返回结果以及参数说明):

·        VOICE_REGISTRATION_STATE返回结构:

                                typedefstruct

{

    char* pszStat;

    char* pszLAC;

    char* pszCID;

    char* pszNetworkType;

    char* pszBaseStationID;

    char* pszBaseStationLat;

    char* pszBaseStationLon;

    char*pszConcurrentServices;

    char* pszSystemID;

    char* pszNetworkID;

    char* pszTSB58;

    char* pszPRL;

    char* pszDefaultRoaming;

    char* pszReasonDenied;

    char*pszPrimaryScramblingCode;

} S_ND_REG_STATUS_POINTERS, *P_ND_REG_STATUS_POINTERS;

·        DATA_REGISTRATION_STATE返回结构:

                                typedefstruct

{

    char* pszStat;

    char* pszLAC;

    char* pszCID;

    char* pszNetworkType;

    char* pszReasonDenied;

    char* pszNumDataCalls;

} S_ND_GPRS_REG_STATUS_POINTERS, *P_ND_GPRS_REG_STATUS_POINTERS;

·        pszStat参数说明:

 public static final int RIL_REG_STATE_NOT_REG= 0;

 public static final intRIL_REG_STATE_HOME = 1;

 public static final intRIL_REG_STATE_SEARCHING = 2;

 public static final intRIL_REG_STATE_DENIED = 3;

 public static final intRIL_REG_STATE_UNKNOWN = 4;

 public static final intRIL_REG_STATE_ROAMING = 5;

 public static final intRIL_REG_STATE_NOT_REG_EMERGENCY_CALL_ENABLED = 10;

 public static final intRIL_REG_STATE_SEARCHING_EMERGENCY_CALL_ENABLED = 12;

 public static final intRIL_REG_STATE_DENIED_EMERGENCY_CALL_ENABLED = 13;

public static final int RIL_REG_STATE_UNKNOWN_EMERGENCY_CALL_ENABLED= 14;

·        pszNetworkType参数说明:

typedef enum RAT

{

     RAT_UNKNOWN = 0,           /**< Unknow RAT */

     RAT_GPRS = 1,              /**< GPRS RAT */

     RAT_EDGE = 2,              /**< EDGE RAT */

     RAT_UMTS = 3,              /**< UMTS RAT */

     RAT_IS95A = 4,             /**< IS95A RAT */

     RAT_IS95B = 5,             /**< IS95B RAT */

     RAT_1xRTT =  6,           /**< 1xRTT RAT */

     RAT_EVDO_0 = 7,            /**< EVDO 0 RAT */

     RAT_EVDO_A = 8,            /**< EVDO A RAT */

     RAT_HSDPA = 9,             /**< HSDPA RAT */

     RAT_HSUPA = 10,            /**< HSUPA RAT */

     RAT_HSPA = 11,             /**< HSPA RAT */

     RAT_EVDO_B = 12,           /**< EVDO B RAT */

     RAT_EHRPD = 13,            /**< EHRPD RAT */

     RAT_LTE = 14,              /**< LTE RAT */

     RAT_HSPAP = 15             /**< HSPA+ RAT */

 #if defined(ANDROID_JB) ,

     RAT_GSM = 16               /**< GSM RAT, only supportsvoice */

 #endif   

}T_RAT;

 

7.      查看sim卡状态,判断是否READY状态

01-22 02:32:20.795  1561 1561 D RILJ    : [3690]>GET_SIM_STATUS [SUB0]

01-22 02:32:20.811   183  994 D RPC-RIL : sim_request_read_pin: SIM READY

01-22 02:32:20.814  1561 2286 D RILJ    : [3690]<GET_SIM_STATUS IccCardState {CARDSTATE_PRESENT,PINSTATE_UNKNOWN,num_apps=1,gsm_id=0{APPTYPE_USIM,APPSTATE_READY,pin1=PINSTATE_DISABLED,pin2=PINSTATE_ENABLED_NOT_VERIFIED},cdma_id=-1,ims_id=-1}[SUB0]

 

8.      验证Phone基本功能

·        MO CALL,用户主动发起DIAL请求

01-22 10:33:38.026  1561 1561 D RILJ    : [3906]> DIAL[SUB0]

01-22 10:33:38.119  1561 2286 D RILJ    : [3906]<DIAL  [SUB0]

·        MT CALL收到modem上报来来电电铃声消息

RILJ   : [UNSL]<  UNSOL_CALL_RING

·        挂断和接通操作

01-22 10:33:45.859  1561 1561 D RILJ    : [3915]> HANGUP1 [SUB0]

01-22 10:33:45.873  1561 2286 D RILJ    : [3915]<HANGUP  [SUB0]

RILJ   : [3789]> ANSWER

RILJ   : [3789]< ANSWER

9.      SMS RILJ关键log

·        发送SMS

RILJ   : [3789]> SEND_SMS

RILJ   : [3789]< SEND_SMS

·        接收SMS

RILJ    : [UNSL]< UNSOL_RESPONSE_NEW_SMS

10.      MMS & Data RILJ关键log

01-22 10:33:03.425  1561 2294 D RILJ    : [3847]>SETUP_DATA_CALL 3 0 3gnet   0 IP [SUB0]

01-22 10:33:04.862  1561 2286 D RILJ    : [3847]<SETUP_DATA_CALL DataCallResponse: {version=6 status=0 retry=-1 cid=1 active=2type=IP ifname=veth0 mtu=0 addresses=[10.53.153.75]dnses=[210.22.70.3,210.22.84.3] gateways=[10.53.153.1] pcscf=[]} [SUB0]

注:结构和参数说明

·        发送结构以及参数说明

struct PdpData

{

    char* szRadioTechnology;//表示网络类型,

    char* szRILDataProfile;

    char* szApn;

    char* szUserName;

    char* szPassword;

    char* szPAPCHAP;

    char* szPDPType;         

};

参数值(当前取值)分别为:

   stPdpData.szRadioTechnology = ((char**)pData)[0]; //3这些值都是从前面找网中得到的参数

   stPdpData.szRILDataProfile  =((char**)pData)[1]; //0

    stPdpData.szApn             = ((char**)pData)[2]; //3gnet

    stPdpData.szUserName        = ((char**)pData)[3]; //

    stPdpData.szPassword        = ((char**)pData)[4]; //

    stPdpData.szPAPCHAP         = ((char**)pData)[5]; //0

    stPdpData.szPDPType         = ((char**)pData)[6]; //IP //apn协议

 

stPdpData.szRadioTechnology的取值范围,这个值需要减2,对应下面的网络类型

 

    public static final int RIL_RADIO_TECHNOLOGY_UNKNOWN= 0;

    public static final intRIL_RADIO_TECHNOLOGY_GPRS = 1;

    public static final intRIL_RADIO_TECHNOLOGY_EDGE = 2;

    public static final intRIL_RADIO_TECHNOLOGY_UMTS = 3;

    public static final int RIL_RADIO_TECHNOLOGY_IS95A= 4;

    public static final int RIL_RADIO_TECHNOLOGY_IS95B= 5;

    public static final int RIL_RADIO_TECHNOLOGY_1xRTT= 6;

    public static final int RIL_RADIO_TECHNOLOGY_EVDO_0= 7;

    public static final int RIL_RADIO_TECHNOLOGY_EVDO_A= 8;

    public static final int RIL_RADIO_TECHNOLOGY_HSDPA= 9;

    public static final intRIL_RADIO_TECHNOLOGY_HSUPA = 10;

    public static final int RIL_RADIO_TECHNOLOGY_HSPA= 11;

    public static final int RIL_RADIO_TECHNOLOGY_EVDO_B= 12;

    public static final int RIL_RADIO_TECHNOLOGY_EHRPD= 13;

    public static final intRIL_RADIO_TECHNOLOGY_LTE = 14;

    public static final int RIL_RADIO_TECHNOLOGY_HSPAP= 15;

    public static final intRIL_RADIO_TECHNOLOGY_GSM = 16;

 

stPdpData.szRILDataProfile的取值

    /** Data profile forRIL_REQUEST_SETUP_DATA_CALL */

    public static final intDATA_PROFILE_DEFAULT   = 0;

    public static final intDATA_PROFILE_TETHERED  = 1;

    public static final intDATA_PROFILE_IMS       = 2;

    public static final intDATA_PROFILE_FOTA      = 3;

    public static final intDATA_PROFILE_CBS       = 4;

    public static final intDATA_PROFILE_MMS       = 5;

    public static final intDATA_PROFILE_SUPL      = 6;

    public static final intDATA_PROFILE_HIPRI     = 7;

    public static final intDATA_PROFILE_OEM_BASE  = 1000;

·        返回结构以及参数说明

/*

 * Returned byRIL_REQUEST_SETUP_DATA_CALL, RIL_REQUEST_DATA_CALL_LIST

 * andRIL_UNSOL_DATA_CALL_LIST_CHANGED, on error status != 0.

 */

typedef struct {

    int             status;     /* A RIL_DataCallFailCause, 0 which isPDP_FAIL_NONE if no error */

    int             suggestedRetryTime; /* If status!= 0, this fields indicates the suggested retry

                                          back-off timer value RILwants to override the one

                                          pre-configured in FW.

                                           Theunit is miliseconds.

                                           Thevalue < 0 means no value is suggested.

                                           Thevalue 0 means retry should be done ASAP.

                                           Thevalue of MAX_INT(0x7fffffff) means no retry. */

    int             cid;        /* Context ID, uniquely identifies thiscall */

    int             active;     /* 0=inactive, 1=active/physical linkdown, 2=active/physical link up */

    char *          type;       /* One of the PDP_type values in TS27.007 section 10.1.1.

                                  For example, "IP","IPV6", "IPV4V6", or "PPP". If status is

                                  PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED this is the type supported

                                  such as "IP" or "IPV6" */

    char *          ifname;     /* The network interface name */

    char *          addresses;  /* A space-delimited list of addresses withoptional "/" prefix length,

                                  e.g., "192.0.1.3" or "192.0.1.11/16 2001:db8::1/64".

                                  May not be empty, typically 1 IPv4 or 1 IPv6 or

                                  one of each. If the prefix length is absent the addresses

                                  are assumed to be point to point with IPv4 having a prefix

                                   length of 32 and IPv6 128. */

    char *          dnses;      /* A space-delimited list of DNS serveraddresses,

                                  e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".

                                  May be empty. */

    char *          gateways;   /* A space-delimited list of default gatewayaddresses,

                                  e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".

                                  May be empty in which case the addresses represent point

                                  to point connections. */

} RIL_Data_Call_Response_v6;

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值