针对一些运营商的锁网需求,MTK平台已经对其有很好的支持。绝大多数的海外需求可以通过直接配置相关文件来完成。这里简单描述一下配置方法,不做原理分析。
相关数据结构分析:
Modem中与SML锁网配置相关的数据结构有:
Sml_context_struct:SML上下文,
cat:SML种类,目前MTK平台共支持7种锁网方式(Network Lock,Network Subset Lock,Service Provider Lock,Corporate Lock,IMSI Lock,Linked NS-SP Lock,Linked SIM-C Lock)
key:modem侧解锁密钥配置
Code_cat_n:Network Lock锁网参数配置
Code_cat_ns:Network Subset Lock锁网参数配置
……
Sml_category_meta_struct:锁网种类
State:锁定状态,枚举值:
Typedef enum{
SML_STATE_NULL,
SML_STATE_LOCK,
SML_STATE_UNLOCK,
SML_STATE_AUTOLOCK,
SML_STATE_DISABLE
} sml_state_enum;
通常,锁定该类别配置SML_STATE_LOCK(0x01),否则选择SML_STATE_UNLOCK(0x02)即可。
Retry_count:可以retry的次数。
Autolock_count:
Num:锁网参数表有效集合个数。
Sml_control_key_struct:解锁密钥
State:SML_KEY_EMPTY/SML_KEY_SET,
这里我们一致取值SML_KEY_SET(0x01),
Key:解锁密钥值。
如何完成锁网功能(配置相关值)
通过代码配置:
主要涉及到的文件有:
图表 1 modem 中与锁网配置相关的文件
通过前面对SIM-ME Lock主要数据结构的分析,我们可以来简单配置一个锁网需求,如mexico Telcel需求:配置334020/00101的Network锁。
l 配置cat:
图表 2 SML配置(一)
四个参数分别为:锁定状态(SML_STATE_LOCK),retry次数(根据需求来定),autolock(目前统一为0),有效锁网个数(如果锁46000/46002,就写2即可)
l 配置key:
图表 3 SML配置(二)
参数:KEY状态(目前统一配置为SML_KEY_SET),解密密钥(目前同意配置为35574126)
l 配置锁网列表:把需求表中需要锁定的MCC/MNC值写入即可。
图表 4 SML配置(三)
对于两位的MNC,最后一位直接补充F就可以了。
至此,modem代码端的配置工作已经做完。So easy!
通过meta工具来配置锁网
终端连接上meta工具之后,读取NVRAM_EF_SML_LID
图表 5 meta读取SML参数
通过工具,我们可以直接修改相关参数。主要有:
Cat[0]:state -- 0x01(锁网),0x02(不锁网);Retry_count -- 可以解锁的次数;Num -- code_cat_n中有效集合个数
Code_cat_n:配置锁网列表
在产线通过生产工具来配置锁网参数
- 初步配置文件设计:
基于上述的分析,初步设计的锁网配置文件格式如下:
<WindSmlConf>
<WindCateIndex>0</WindCateIndex> // 锁网类别取值0-6,分别对应7种锁网方式,如锁定Network则取值0
<WindCategory> // 根据前面的index来确定配置哪个cat
<state>0x01/0x02</state> // 锁定状态(01锁定,02不锁)
<retry-count></retry-count> // 解锁次数
<autolock-count>0x00</autolock-count> // 固定为0
<num></num> // 有效结合个数
</WindCategory>
<WindCode>
<item>XX</item> // 详述所有的锁定列表
……
</WindCode>
</WindSmlConf>
例子:(mexico telcel的锁网需求)
<WindSmlConf>
<WindCateIndex>0</WindCateIndex>
<WindCategory>
<state>1</state>
<retry-count>5</retry-count>
<autolock-count>0</autolock-count>
<num>2</num>
</WindCategory>
<WindCode>
<item>334020</item>
<item>00101F</item>
</WindCode>
</WindSmlConf>
- 更新配置文件设计:
由于在进行数据擦除的时候,会将所有的数据清0,这样会导致一些使用默认值的参数也变得没有意义。
经最后与生产部同仁讨论,现将所有的锁网参数全部写进配置文件中;并且为了后续扩展需要,将code_cat_n扩充到15个元素。如下:
[SIMLOCKCFG]
Magic_head = 0x000000CC // magic_head
WindCateIndex = 0 // 锁网类别取值0-6,分别对应7种锁网方式,如锁定Network则取值0
State = 1 // 锁定状态(01锁定,02不锁)
Retry-count = 5 // 解锁次数
Autolock-count = 0 // 固定为0
Num = 4 // 有效集合个数
Key_state = 1 // modem端密钥状态,固定为1
Key = 0x53751462FFFFFFFF // modem端密钥,固定为该值
Item1 = 334020 // 详述所有的锁定列表
……
Magic_tail= 0x26598088 // magic_tail
Simlockmodel = 1 // 1表示普通算法,2代表Yoigo解锁算法
Meta截图: