搜网与网络选择,是指在手机开机过程中,确定注册或者附着到哪个运营商网络及哪个制式的过程,也就是选择PLMN 以及RAT 的过程。
RPLMN(Registered PLMN):是指手机上一次成功注册的网络,需要注意的是,这里必须是成功注册的网络,且需要样机正常关机才会将RPLMN写入到SIM卡中;
HPLMN(Home PLMN):是指归运营商的归属网络,例如联通卡的HPLMN一般是46001
EHPLMN(Equivalent Home PLMN):是指运营商的等效归属网络,例如,中国联通的MCC和MNC有46001、46007等,这些网络均属于EHPLMN;但需要注意的是,国内的SIM卡可能并没有将EHPLMN写入到SIM卡文件系统中;
VPLMN(Visited PLMN):是指UE所访问的PLMN,即当前所在的网络
EFs SIM卡存储信息
EFIMSI – IMSI
EFPLMNwAcT – User-controlled PLMN selector with Access Technology
EFHPPLMN – Higher-priority PLMN search period
EFFPLMN – Forbidden PLMNs
EFLOCI – Location information
EFOPLMNwACT – Operator-controlled PLMN selector with Access Technology
EFHPLMNwAcT – Home HPLMN selector with Access Technology
EFEHPLMN – Equivalent HPLMN
EFLRPLMNSI – Last RPLMN selection indication
EFPSLOCI – Packet-switched location information
NVs Used by the UE
NV 1190, NV_RPLMNACT_I – Stores the last RPLMN RAT information
NV 849, NV_NET_SEL_MODE_PREF_I – 手动选网还是自动选网
NV 850, NV_SERVICE_DOMAIN_PREF_I – Domain CS or PS
EFS Used by the UE
/sd/rat_acq_order :PLMN选择中的rat 优先级列表(LTE UMTS GSM )
REG模块
代码路径在:mmcp\nas\reg
入口函数 reg_main
void reg_main(dword dummy)
{
reg_init_before_task_start();//初始化queue 在reg_put_cmd中填充
reg_timers_initialize();//初始化timer
reg_create_efs_config();//init efs
reg_ulog_register();
reg_initialize();
reg_nv_initialize_cache();//init nv
reg_sim_mmgsdi_init();//建立与MMGSDI 的通信,接受sim 卡消息
for(;;)
{
sigs = reg_wait(REG_CMD_Q_SIG);//监听signal
if (sigs & REG_CMD_Q_SIG)
{
(void) rex_clr_sigs( reg_tcb_ptr,REG_CMD_Q_SIG);//清空signal
while ((reg_cmd_p = (reg_cmd_type*)q_get(®_cmd_q) ) != NULL)
{
reg_state_main(reg_cmd_p); //核心函数,处理各种signal
}
}
}
函数的核心函数的reg_state_main 函数,主要处理REG接收到的SIGNAL,主要有以下几个信号
MS_CM_REG/* messages between CM and REG */
MS_MM_REG/* messages between MM and REG */
MS_GSDI/* messages from/to GSDI */
MS_TIMER/* Messages indicating timeouts */
MS_REG_REG/* Messages REG to REG internal */
具体的信号我们可以从QXDMlog 来看,从Call manager 收到信号,到发送拨号请求给RRC,整个流程如下:
//REG Queries the SIM
21:18:51.779 reg_sim.c 1072 SIM card mode (USIM)
21:18:51.779 reg_sim.c 1576 HPLMN(001-001)
21:18:51.781 reg_nv.c 289 Read GPRS_ANITE_GCF -1
//REG →MM; SIM availability
00:00:01.126 reg_state.c 9179 =REG= CM_SIM_AVAILABLE_REQ mode_pref:2,
21:18:51.787 reg_send.c 821 MMR_SIM_AVAILABLE_REQ
21:18:51.788 mmcoord.c 465 MM received MMR_SIM_AVAILABLE_REQ
21:18:51.805 reg_state.c 2713 MMR_SIM_AVAILABLE_CNF
//REG reads PLMN information from SIM
21:18:51.828 reg_sim.c 1836 CS RPLMN(1-1)
21:18:51.829 reg_sim.c 1576 HPLMN(001-001)
21:18:51.829 reg_sim.c 2406 Forbidden PLMN list (length = 4)
21:18:51.829 reg_sim.c 2410 # MCC-MNC
21:18:51.829 reg_sim.c 2423 0 310-017
21:18:51.829 reg_sim.c 2423 1 000-000
21:18:51.829 reg_sim.c 2423 2 000-000
21:18:51.829 reg_sim.c 2423 3 000-000
21:18:51.830 reg_sim.c 2031 RPLMN RAT Search Order (UMTS-GSM)
//REG → MM
21:18:51.830 reg_send.c 786 MMR_REG_REQ PLMN(1-1) RAT(UMTS)
21:18:51.830 mmcoord.c 922 MM received MMR_REG_REQ [0 f1 10]
//MM →RRC
21:18:51.831 mmrrcconn.c 316 MM sent RRC_SERVICE_REQ to RRC
21:18:51.831 rrcdispatcher.c 3432 Recd: RRC_SERVICE_REQ
从整个交互来看 REG主要是与CM 和MM 进行交互,CM 就是上层Call Manager MM是底层NAS的模块,与RRC通信
整个拨号过程核心signal就是CM_SERVICE_REQ,是CM发起拨号选网,而reg_state_main处理的函数就是reg_state_process_cm_service_req
函数比较复杂,这个流程如下
reg_state_process_cm_service_req
reg_sim_is_hplmn_to_be_selected //首先检查EF_LRPLMNSI;如果为 1 ,PLMN 使用HPLMN,如果为0,PLMN使用RPLMN
CASE 0
PLMN选择
reg_sim_read_sim_rplmn 检查NV_RPLMNACT_I
如果为LTE,则RPLMN 从EF_EPSLOCI中读取;
如果为UMTS 和GSM ,则通过NV_SERVICE_DOMAIN_PREF_I 选择从EF_PSLOCI还是EF_LOCI中读取RPLMN
函数中reg_sim_rplmn_rat_search_order 其实是REG模块启动时调用reg_sim_load_card_mode,从NV_RPLMNACT_I获取的
RAT选择
由NV_RPLMNACT_I和SIM卡中EF_RPLMNAcT来决定
reg_mode_get_3gpp_rat_capabilty ,转换rat_acq_order
reg_mode_determine_first_plmn 确认RPLMN是否valid ,如果invalid 就选用HPLMN
reg_sim_read_rplmn_rat_search_order,从sim卡中读取EF_RPLMNAcT,再EFS rat_acq_order 做并集
reg_sim_combined_rat_search_order如果读取失败,使用NV_RPLMNACT_I
CASE 1
PLMN
reg_sim_load_card_mode 中读取EF_IMSI 赋值HPLMN
RAT
reg_sim_read_hplmn_rat_search_order 中读取EF_HPLMNWACT
参考文档:
80-N0608-1_B_UMTS_Cell_Select_Reg
80-N9533-2_D_PLMN_RAT_Selection_GSM_WCDMA_LTE_TD-SCDMA
80-N9811-1_C_LTE_Cell_Select_Registration_TAU