(重点看main_log与)

抓mtk log:

1、*#*#82533284#*#*      进入抓log UI

2、*#*#825364#*#*      进入工程模式

3、进入"Log and Debuging"栏  --> Telephony Log Setting -->ENABLE(然后重启生效,这样log会抓的全面,不会影藏信息,log等级会由I变成D)

A call B:

A put B on hold:

A call Conference Server:

A refer B:

流程图:

10010就是上图中的B;13267945631的号就是上图的C;18507524845就是上图的A。

注意:refer邀请成员与refer挂断成员的refer主要通过后面BYE区分,有BYE就是邀请,没有就是挂断成员。

关键AT指令:

//获取2G/3G/4G cell(包括服务和邻居 cell)信息,属性命令.//AT+ECELL=<mode>//mode:0 disable,1 enable//+ECELL:<num_of_cell>[,<Act>,<cid>,<lac_or_tac>,<mcc>,<mnc>,<sig2_in_dbm>,<ta>,<ext1>,<ext2>][,]//Act:0 GSM,2 UMTS ,7 LTE//cid:Cell Identity//mcc:mobile country code//mnc:mobile network code//lac_or_tac:GSM/UMTS ,location area code;LTE,tracking area code+ECELL: 1,7,"065F4402","25C7",460,1,448,54,29,-348,-22,0,,,,1650    

//用来使能VDM ADS支持报告URC +EVADSREP<domain>,该指令被VDM执行//+EVADSREP=<mode>//+EVADSREP:<domain>//0 disable,1 enable//domain :0 cs domain,1 volte (IMS call over volte)AT+EVADSREP=1
//用来设置VDM access domain 选择模式,该指令被VDM执行//0 自动模式(both IMS and cs domian),1 cs domain only.
AT+EVADSMOD=0,0

//VDM用来FDN检查和批准紧急号码,该指令被VDM执行//+EAPPROVE=<dial number>//+EAPPROVE: <is_allowed><is_emgerency><err>
AT+EAPPROVE="10010"
+EAPPROVE: 1,0,0

//+ECPI 属性命令,使能/禁止call处理信息//+ECPI:<call_id>,<msg_type>,<is_ibt>,<is_tch>,<dir>,<call_mode>,<number>,<type>,"<pau>"[,<disc_cause>]//+ECPI=<mode>//+ECPI? 可能响应+ECPI:<mode>//+ECPI=? 可能响应+ECPI:(0~4294967295)//mode:    bit1=1    CSMCC_SETUP_MSG(MT_CALL)    bit2=1    CSMCC_DISCONNECT_MSG    bit3=1    CSMCC_ALERT_MSG    bit4=1    CSMCC_CALL_PROCESS_MSG    bit5=1    CSMCC_SYNC_MSG    bit6=1    CSMCC_PROCESS_MSG    bit7=1    CSMCC_CALL_CONNECTED_MSG    bit8=1    CSMCC_ALL_CALLS_DISC_MSG    bit9=1    CSMCC_CALL_ID_ASSIGN_MSG    bit10=1    CSMCC_STATE_CHANGE_HELD    bit11=1    CSMCC_STATE_CHANGE_ACTIVE    bit12=1    CSMCC_STATE_CHANGE_DISCONNECTED    bit13=1    CSMCC_STATE_CHANGE_MO_DISCONNECTED//msg_type:CSMCC_ALL_CALLS_DISC_MSG    0    CLCC_MT_CALL    1    CSMCC_DISCONNECT_MSG    2    CSMCC_ALERT_MSG    3    CLCC_CALL_PROCESS_MSG    4    CSMCC_SYNC_MSG    5    CSMCC_PROCESS_MSG    6    CSMCC_CALL_CONNECTED_MSG    129    CSMCC_ALL_CALLS_DISC_MSG    130    CSMCC_CALL_ID_ASSIGN_MSG    131    CSMCC_STATE_CHANGE_HELD    132    CSMCC_STATE_CHANGE_ACTIVE    133    CSMCC_STATE_CHANGE_DISCONNECTED    134    CSMCC_STATE_CHANGE_MO_DISCONNECTED    135    CSMCC_STATE_HELD_BY_REMOTE    136    CSMCC_STATE_ACTIVE_BY_REMOTE//dir : 0 CLCC_MO ,1 CLCC_MT//call_mode:    0    CLCC_VOICE_CALL              1    CLCC_DATA_CALL              3    CLCC_VFD_VOICE              4    CLCC_AVD_VOICE              5    CLCC_AVF_VOICE              6    CLCC_AFD_DATA              7    CLCC_AVD_DATA              20    IMS_VOICE_CALL              21    IMS_VIDEO_CALL              22    IMS_VOICE_CONFERENCE//type: 145 国际呼叫,129 国内呼叫
+ECPI: 1,130,0,0,0,0,"10010",129,""   // MO  voice call 10010

//该URC被用来告知AP,UA从NW接收的响应码//+ESIPCPI:<call_id>,<dir>,<sip_msg_type>,<method>,<response_code>,"<reason_text>"//call_id:0~255整数//dir:0 send,1 receive//sip_msg_type:0 request,1 response//method:  1 INVITE           2 REFER         3 UPDATE         4 CANCEL         5 MESSAGE         6 ACK         7 BYE         8 OPTIONS         9 SUBSCRIBE         10 NOTITY         11 PUBLISH         12 INFO         13 PRACK//response_code:method为0时,100~600,request时为0.
+ESIPCPI: 1,0,0,1,0,""        

 //+EIMSCI=<ims_call_status>,<is_emergency>,<ims_access_rat>ims_call_status: 0 IMS stop or SRVCC to CS call                 1 IMS call ongoingis_emergency:    0 no                 1 yes ims_access_rat:  0  LTE                 1  WIFI                 2  eHRPD
AT+EIMSCI=1,0,0

// start , end 智能缓解阻塞,该指令不被用在UTRAN、GERAN 的UE
//+CSCM=<application>,<start-end_indication>application:    0    MMTEL voice    1    MMTEL video    2    SMS over IPstart-end_indication:    1    start 指示    2    end 指示AT+CSCM= 0,1

//IMS call 信息,该指令被用来告知协议栈IMS call信息//+EIMSCI=<ims_call_status>,<is_emergency>,<ims_access_rat>ims_call_status:   0 IMS stop or SRVCC to CS call  1 IMS call ongoingis_emergency:      0 no  1 yes ims_access_rat:    0  LTE  1  WIFI  2  eHRPD
AT+EIMSCI=1,0,0

//IMS 会议控制,该指令被IMC处理,用在PS(IMS)call domain 的call的 hold\resume。在cs call,用AT+CHLD指令。//+ECCTRL=<call_id>,<call_state>//call_state:131 hold,132 activeAT+ECCTRL=1,131+ECCTRL:0,131

//Call相关的SS(补充业务)//+CHLD=[<n>]//+CHLD=? 可能响应[+CHLD:<n>]//n:    0    释放所有的hold calls,或对于waiting call设置用户决定用户忙(UDUB)    1    释放所有的active calls并接受其他waiting or held call.    1x   释放特定的active call    2    放所有的active call在 hold并接受其他的waiting or held call.    2x   除了特定call x,放其余所有active call在hold    3    add a held call 到会议电话中    4    连接2个calls并断开这两个calls subscriber.    5    主动完成对占线用户的呼叫请求(CCBS)AT+CHLD=3

//该URC由IMC发送,被用来告知AP call改变源于哪里//+EIMSCMODE:<call_id>,<call_mode>,<camera_direction>,<audio_direction>,"<p_assert_url>",<audio_codec>//call_mode:    20  IMS_VOICE_CALL    21    IMS_VIDEO_CALL    22    IMS_VOICE_CONFERENCE    23    IMS_VIDEO_CONFERENCE    24    IMS_VOICE_CONFERENCE_PARTICIPANT    25    IMS_VIDEO_CONFERENCE_PARTICIPANT//camera_direction\audio_direction:    0    inactive    1    sendonly    2    recvonly    3    sendrecv//audio_codec:    1    AMR    2    AMR-WB    3    H264    16    H265    17    EVS+EIMSCMODE: 3,22,0,3,"",2

//+CEER 错误报告+CEER:<cause>,<report>+CEER: 16,CM_NORMAL_CALL_CLR

//(1)For network attachment:+CGEV:NW DETACH,网络已强制PS分离,这意味着所有活动上下文已停用,这些没有单独报告。+CGEV:ME DETACH,移动终端已强制PS分离,这意味着所有活动上下文已停用,这些没有单独报告。//(2)For PDP context activation+CGEV:NW PDN ACT <cid>,其中<cid>参考+CGDCONT,这事件不被用于EPS,PDP context是在GSM/UMTS.+CGEV:ME PDN ACT <cid>[,<reason>],PDN 连接在LTE,PDP context是在GSM/UMTS.reason:网络为指定的PDP类型为IPV4或IPV6。  0    IPV4 only allowed  1    IPV6 only allowed  2    single address bearers only allowed.  3    single address bearers only allowed and MT initated 第二地址类型承载器的模拟上下文未成功。.+CGEV:ME ACT <p_cid>,<cid>,<event_type>  +CGEV:NW ACT <p_cid>,<cid>,<event_type> event_type:    0    information event_type    1    information request:acknowledgement required,acknowledgement 能够被接受或拒绝,see +CGANS.+CGEV:ME PDN DEACT <cid>+CGEV:NW PDN DEACT <cid>+CGEV:NW DEACT <p_cid>,<cid>,<event_type>+CGEV:ME DEACT <p_cid>,<cid>,<event_type>//(3)For PDP context modification,+CGEV:NW MODIFY <cid>,<change_reason>,<event_type>+CGEV:ME MODIFY <cid>,<change_reason>,<event_type>change_reason:    1    TFT only changed    2    Qos only changed    3    both TTF and Qos changed    //(4)For other PDP context handling+CGEV:REJECT<PDP_type>,<PDP_addr>,参数see+CGDCONT,当MT无法报告上下文激活时,发生了一个网络请求向TE发出+CRING URC并被自动拒绝。+CGEV:NW REJECT<PDP_type>,<PDP_addr>[,<cid>]+CGEV: NW MODIFY 10, 0, 0

//该URC由IMC发送,被用来告知IMS会议电话的subscription状态,URC(unsolicited result code)//+ESUBCTRL:<call_id>,<event>,<result>,<cause>//event:0 unknown, 1 conference//result:0 成功,1 失败//cause:参考+ECONF URC+ESUBCTRL: 3,1,0,0

//IMS会议操作,该命令被IMC执行//add or remove 会议成员//+ECONF=<conf_call_id><operation><num>[,<joined_call_id>]//operation:0 add,1 removeAT+ECONF=3,1,"13267945631"

//该URC由IMC发送,被用来响应IMS会议电话控制指令AT+ECONF//+ECONF:<conf_call_id>,<operation>,<num>,<result>,<cause>[,<joined_call_id>]//operation:0 add ,1 remove//result:0 success ,1 failure//cause:    NORMAL=0,    ABNORMAL,    NONNUMBER,    UNREGISTERED,    DISCONNECT,    BECANCEL,    BEREJECT,    BEREJECT_380,    BEREJECT_380_EMERGENCY_TO_CS,    BEREJECT_380_EMERGENCY_TO_REREG,    BEREJECT_480,    BEREJECT_503,    TX_TIMEOUT,    NO_PRIVACY,    PRECONDFAIL,    SECONDCALL,    NOMEDIACONTENT,    INVALIDMSG,    INVALIDCMD,    INVALIDIDX,    SRVCC,    FACILITY_REJECTED,    DEDICATED_BEARER_TIMEOUT,    UA_MAX,    UNAVAILABLE_OF_CALLS,    IMS_CC_CAUSE_MAX+ECONF: 3,0,"",0,0,2

常见log分析:

  1、在mobilelog(主要是main_log、radio_log、sys_log)中查找“AT+CHLD”,有:

- ::   I AT      : [] AT> AT+CHLD= (RIL_CMD_RT_7 tid:)   //add a held call 到会议电话中
- ::   I AT      : [] AT> AT+CHLD= (RIL_CMD_RT_7 tid:) //释放特定的active call 

2、在mobilelog(主要是main_log、radio_log、sys_log)中查找“ImsConference”,有:

main_log:

    Line : - ::   I MtkImsCall: callSessionConferenceStateUpdated ::           state=[ImsConferenceState <              ***:user-entity=tel:+, status=connected, user=***, display-text=+, endpoint=***,               ***: user-entity=tel:, status=connected, user=***, display-text=, endpoint=***,                       ***: user-entity=tel:+,  onHold:N mute:N mCallProfile:{ serviceType=, callType=, restrictCause=,        mediaProfile={ audioQuality=, audioDirection=, videoQuality=, videoDirection=, rttMode=, hasRttAudioSpeech=, emergencyUrns=[], emergencyCallRouting=, emergencyCallTesting= state:ESTABLISHED callId:] transientSession:null]//////可以看到一个成员断开连接(+8613267945631)
    Line : - ::   I MtkImsCall: callSessionConferenceStateUpdated ::      state=[ImsConferenceState <          ***: user-entity=tel:+, status=connected, user=***, display-text=+, endpoint=***,           ***: user-entity=tel:, status=connected, user=***, display-text=, endpoint=***,                 ***: user-entity=tel:+, onHold:N mute:N mCallProfile:{ serviceType=, callType=, restrictCause=, mediaProfile={ audioQuality=, audioDirection=, videoQuality=, videoDirection=, rttMode=, hasRttAudioSpeech=, emergencyUrns=[], emergencyCallRouting=, emergencyCallTesting= state:ESTABLISHED callId:] transientSession:null]
sys_log:

I Telephony: ImsConference: handleConferenceParticipantsUpdate: size=3
I Telephony: ImsConference: handleConferenceParticipantsUpdate: size=2   //成员只有2个(包括host)
I Telephony: ImsConference: startEmulatingSinglePartyCall: conference has a single participant; downgrade to single party call.
radio_log:

D RfxRoot : processMessage() msg = [type=REQUEST, source=GSM, dest=GSM,...D RtcImsConference: firstMerge, callId_1: +86*****945631, callId_2: +86*****945631, num_1: +86*****945631, num_2: +86*****945631D RtcCC   : [0] generateImsConference() slot: 0D RfxRoot : processMessage() msg = [type=RESPONSE, source=GSM, dest=GSM,...D RtcImsConference: modifyParticipantCompleteD RtcImsConference: modifyParticipantComplete: mLocalParticipants:752*****752D RtcImsConference: modifyParticipantComplete: mLocalParticipants:+86*****945631D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM,...D RtcImsConference: handleVolteConfCallMessageD RtcImsConference: startElement Conference uri: xmlns  //---会议信息描述D RtcImsConference: :startElement mCEPState: 1D RtcImsConference: :startElement version: 0D RtcImsConference: startElement MaxUserCount: 0D RtcImsConference: startElement MaxUserCount: 6D RtcImsConference: startElement user - entity: tel*****8507524845D RtcImsConference: startElement display-text: **D RtcImsConference: startElement display-text: +86*****524845D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 1D RtcImsConference: startElement user - entity: tel***010D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 2D RtcImsConference: startElement user - entity: tel*****3267945631D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 3      //和上面描述类似D RtcImsConference: cepState: 1D RtcImsConference: setupHostD RtcImsConference: getUserNameFromSipTelUriString uriString: **D RtcImsConference: setupHost: mHostAddr: **D RtcImsConference: fullUpdateParticipantsD RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****8507524845  //HostD RtcImsConference: getUserNameFromSipTelUriString uriString: tel***010D RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****3267945631D RtcImsConference: isPartialCEP: 0D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: notifyConfStateUpdate()D RtcImsConference: isEmptyConferenceD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isEmptyConference, userCount: 2  (会议成员,不包括host)D RtcImsConference: isEmptyConference, set mHaveUpdatedConferenceWithMember = trueD RILC    : imsConferenceInfoIndicationD RtcImsConference: updateConferenceStateWithLocalCacheD RILC    : controlImsConferenceCallMember: serial 587, controlType 0D RfxRoot : processMessage() msg = [type=REQUEST, source=GSM, dest=GSM, p...D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****945631D RfxRoot : processMessage() msg = [type=RESPONSE, source=GSM, dest=GSM,..D RtcImsConference: modifyParticipantCompleteD RtcImsConference: modifyParticipantComplete: mLocalParticipants:752*****752D RtcImsConference: modifyParticipantComplete: mLocalParticipants:+86*****945631D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM,..D RtcImsConference: startElement Conference uri: xmlnsD RtcImsConference: :startElement mCEPState: 1D RtcImsConference: :startElement version: 1D RtcImsConference: startElement MaxUserCount: 0D RtcImsConference: startElement MaxUserCount: 6D RtcImsConference: startElement user - entity: tel*****8507524845D RtcImsConference: startElement display-text: **D RtcImsConference: startElement display-text: +86*****524845D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 1D RtcImsConference: startElement user - entity: tel***010D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: connectedD RtcImsConference: endElement end user mUsers.size: 2D RtcImsConference: startElement user - entity: tel*****3267945631D RtcImsConference: startElement endpoint - entity: sip*****0.0:65535D RtcImsConference: startElement status: D RtcImsConference: startElement status: disconnectedD RtcImsConference: endElement end user mUsers.size: 3D RtcImsConference: cepState: 1D RtcImsConference: setupHostD RtcImsConference: getUserNameFromSipTelUriString uriString: **D RtcImsConference: setupHost: mHostAddr: **D RtcImsConference: fullUpdateParticipantsD RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****8507524845D RtcImsConference: getUserNameFromSipTelUriString uriString: tel***010D RtcImsConference: getUserNameFromSipTelUriString uriString: tel*****3267945631D RtcImsConference: isPartialCEP: 0D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: updateLocalCache: remove +86*****945631D RtcImsConference: notifyConfStateUpdate()D RtcImsConference: isEmptyConferenceD RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): address: **, mHostAddr: **D RtcImsConference: getUserNameFromSipTelUriString uriString: +86*****524845D RtcImsConference: isSelfAddress(): falseD RtcImsConference: isEmptyConference, userCount: 1D RILC    : imsConferenceInfoIndicationD RtcImsConference: updateConferenceStateWithLocalCacheD RtcImsConference: closeConference()D RfxRoot : processMessage() msg = [type=URC, source=GSM, dest=GSM...D RtcImsConference: handleVolteConfCallMessage

 

3、在mobilelog(主要是main_log、radio_log、sys_log)中查找“Telecom :  | Telephony:”,有:

D Telecom : Logging: START_SESSION
I Telecom : Event: RecordEntry ...: REQUEST_DISCONNECT,I Telecom : Call: Send disconnect to connection service for call:       [Capabilities: CAPABILITY_HOLD CAPABILITY_SUPPORT_HOLD CAPABILITY_MUTE],        [Properties: PROPERTY_HIGH_DEF_AUDIO PROPERTY_IMS]]D Telecom : ConnectionServiceWrapper: Telecom -> ConnectionService   TelephonyConnectionService]: disconnect        D Telecom : Logging: END_SESSIOND Telecom : Adapter: disconnect call DisconnectCause [ Code: (LOCAL) Label: () Description: () Reason: (LOCAL) I Telecom : CallsManager: setCallState ACTIVE -> DISCONNECTED, call:...I Telecom : InCallController: Sending updateCallD Telecom : ConnectionServiceFocusManager: handleCallStateChanged I Telecom : PhoneStateBroadcaster: Broadcasted state change: 0I Telecom : IncomingCallNotifier: updateIncomingCallI Telecom : InCallController: onCallAdded:I Telecom : CallsManager: Creating a new outgoing call with handle: tel:***10

4.修改log等级(V>D>I)

adb shell setprop log.tag.Telecom V
adb shell setprop log.tag.Telephony V
adb shell setprop log.tag.TelecomFramework V 
adb shell setprop persist.log.tag.RtcCC V
adb shell setprop persist.log.tag.RtcImsConference V

常见问题FAQ:

Q1: UE在建立conference call失败。Log中看UE 去refer其他成员时,无响应。

A1: 可以查看REFER中的Call-ID和之前的INVITE的是否一样。如果不一样,可以和网络侧确认他们需要的是in-dialog还是out-dialog的REFER请求。并修改工模中的refer_dialog_to_server值。0表示out-dialog,1表示in-dialog。

Q2: UE显示的成员号码不对

A2: 常见的是网络给的不对。可以在会议建立成功后,网络给的成员信息NOTIFY中的XML查看,网络给的号码是否正确?

mtk 的conferrence call建立流程的更多相关文章

  1. java项目建立流程

    spring mvc 书籍Spring in Action, 4th Edition java项目建立流程 1 使用maven来管理项目中的库.先用marven建立一个框架mvn archetype: ...

  2. TCP建立流程 【转】

    解决TCP连接数过多的问题 TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题 TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基 ...

  3. SIP中第三方呼叫控制(3PCC)建立流程

    1.引言 在传统的电话网环境中,第三方呼叫控制允许一个实体(这里称为控制器- controller) 建立并管理另外的两方或多方之间的通信关系,而其本身并不参与通信. 第三方呼叫控制经常用于运营商业务 ...

  4. mtk lcm驱动加载流程 (转载)

    平台:mt6582 + Android 4.4 前面就说过,在mtk代码中支持屏是可兼容的,通过调用驱动中的compare_id函数来匹配驱动和屏,这里来细看一下代码. 1. LK部分(mediate ...

  5. Git代码仓库的建立流程

    Git作为现在比较流行的版本管理工具,其配置非常简单.方便. 下面举一个简单例子,说明如何在服务器上建立一个公共的git代码仓库. 1.确保服务器上已经打开ssh服务,可以用ps -e | grep ...

  6. mtk lk阶段的lcm流程

    一.lk进入kmain() 1. vendor/mediatek/proprietary/bootable/bootloader/lk/arch/arm/srt0.S bl kmain 二.初始化lk ...

  7. BPM端到端流程解决方案分享

    一.需求分析 1.企业规模的不断发展.管理水平的不断提升,通常伴随着企业各业务板块管理分工更细.更专业,IT系统同样越来越多.越来越专 业化.不可避免的,部门墙和信息孤岛出现了,企业的流程被部门或者I ...

  8. 深入浅出 Redis client/server交互流程

    综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...

  9. 制造行业流程管理的“IPO”思维

    流程管理是企业从流程角度出发,关注流程是否增值的一套管理体系.从认识流程.到建立流程.到管理流程.再到优化流程,企业管理人员要去除不增值和低价值的流程,减少员工犯错误的机会,建立一套卓越的流程体系. ...

随机推荐

  1. java笔试之从单向链表中删除指定值的节点

    输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复 构造过程,例如 1 -> 2 3 -> 2 5 -> 1 4  ...

  2. iOS开发系列-定时器强引用问题

    概述 iOS开发中常用的定时器NSTimer.CADisplayLink. NSTimer 和 CADisplayLink 基本使用 NSTimer的创建方法有两个scheduledTimerWith ...

  3. shell 基本系统命令,关机重启,查看版本,查手册,日期,磁盘,历史命令

    1. 查看系统版本及内核版本 cat /etc/issue  查看系统版本 uname -r     查看内核版本 2. 关机重启命令 关机: shutdown -h now    立即关机 shut ...

  4. JS事件 什么是事件?JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

  5. EntityFrameworkCore 根据实体类自动创建数据库

    1.首先新建 Asp.Net Core WebApi 项目 2.添加一下引用 : 2.1   Pomelo.EntityFrameworkCore.MySql(我用的Mysql 根据自己情况引用就行) ...

  6. Mysql查漏补缺

    Mysql查漏补缺 存储引擎 数据库使用存储引擎来进行CRUD的操作,不同的存储引擎提供了不同的功能.Mysql支持的存储引擎有InnoDB.MyISAM.Memory.Merge.Archive.F ...

  7. <a>标签中的href=""

    href="javascript:;",其中javascript:是伪协议,它可以让我们通过一个链接来调用javascript函数.而采用这个方式 javascript:;可以实现 ...

  8. RabbitMQ探索之路(二):RabbitMQ在Linux下的安装

    引言 消息队列现在在互联网项目中应用的还是非常多的,在接下来的博客中小编会深入的了解MQ的实现过程,在此博客中将介绍如何在centos7下面安装MQ以及遇到的问题. 第一步:安装Erlang 因为ra ...

  9. WPF 新突破

    刘琦告诉我  需要改变哪个属性哪个属性就需要实现InotifyPropertyChanged 董秀伟告诉我  界面改变会立即传输到属性上,并不需要实现InotifyPropertyChanged,只有 ...

  10. GCRoots 对象

    GC Roots 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 原生方法栈(Native Method Stack)中 JNI 中引用的对象 可 ...