-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMBN_settings.txt
More file actions
310 lines (217 loc) · 14.5 KB
/
MBN_settings.txt
File metadata and controls
310 lines (217 loc) · 14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
===MBN的加载和激活===
我们前面提到过,因为mbn_ota的存在,default的MBN和mbn_ota.txt文件中包含的MBN都会被自动加载,当我们需要加载新的MBN验证问题或者是去掉某一些MBN时就可以借用PDC工具,利用QPST里的PDC工具可以很直观方便的完成,这里只提一下如何打开相应的rmnet端口,让PDC工具能够检测到手机的存在。
【1】打开MBN的rmnet端口
adb root
adb shell setprop sys.usb.config diag,serial_smd,rmnet_bam,adb //8939
adb shell setprop sys.usb.config diag,serial_smd,rmnet_qti_bam,adb //8976
===MBN Auto-select功能===
当手机中同时存在多个MBN时,如何去选择合适的mbn激活就是很重要的一件事,高通同样提供了一个可供我们操作的NV-71546,来控制MBN的选择方式。
基于IIN(ICCID)字段的自动选择:
IIN字段一般是指ICCID的前6/7位数字,分别由国际编号,国家编码,运营商编码组成的6位或7位数,每一个MBN文件中也有对应的IIN字段,通过对比MBN和当前sim的ICCID中的IIN,如果相同即会把“IIN_flag”标志位置为1,即可判断出应该选择的MBN是哪一个,如果sim卡的IIN字段和MBN都不匹配则会去选择ROW对应的MBN(ROW的MBN里应该没有IIN字段的具体信息),这个MBN包含了基础的3GPP的网络参数配置和参考IR92标准的IMS配置。
带有Flex映射的自动选择:
在前者基础上新加了一个功能,此功能仅限于DSDS模式的设备中,如果人为操作修改了某一个sim卡对应的网络模式,它会自动去切换激活适合的MBN。例如将两张sim卡的网络模式互换,则之前对应两张sim卡的MBN也会进行互换激活。
NV-70266 device-mode
基于IMSI/MCC,MNC的自动选择:
通过对比MBN和SIM卡IMSI中的MCC/MNC字段来选择合适的MBN,这一个的选择优先级高于基于IIN字段的自动选择方式。
完全由APSS控制的自动选择:
NV-71546的值设置为 0x20 ;
adb shell setprop persist.radio.sw_mbn_update 1 ;
开机时,qcril选择IIN字段相匹配的MBN,若没有则选择ROW的MBN,利用QMI PDC接口,加载激活合适的MBN;
7+5的设备上不需要支持flex映射功能,当手机同时支持多种运营商的多种网络模式时,flex映射带来的MBN切换可能会导致MBN文件对应上错误的SIM卡。
7+5或7+1模式对应的配置文件可以在此类目录中找到X:\modem_mbn_files\8976\mcfg\mcfg_gen\generic\common\MSM8952,而这些配置是通过默认的HW_MBN加载进手机的。
之前enable 7+5 mode是参考7+5默认的文件配置直接设置到默认的HW_MBN里,避免重复加载多余的MBN。
MCFG refresh:
即可以不重启modem/重启手机刷新各NV/EFS的状态值。
中国移动编码格式:89860 0MFSS YYGXX XXXXP
中国联通编码格式:89860 1YYMH AAAXX XXXXP
中国电信编码格式:89860 3MYYH HHXXX XXXXX
(前提是已经有一个SW-MBN被激活正在使用,因为默认MBN里没有设置auto-select的选项设置)
手机插入sim卡后,根据所在地的运营商提供的网络环境选择手机里中的某一个MBN激活并应用。
除去HW和SW的两个default_MBN以外,同一时间只能再激活应用一个SW_MBN。
关联NV-71546,value值即所有可用功能对应值之和。
7 0x80 Disable MCFG Refresh without reset feature
6 0x40 Disable MCFG SSR for MBN activation (For MDM LE only)
5 0x20 Enable MCFG Refresh MBN update only feature (APPS centric with MBN for testing)
4 0x10 Reserved
3 0x08 Reserved
2 0x04 Enable MCFG Auto-Selection based on IMSI/MCC-MNC
1 0x02 Enable MCFG MBN Switching for Flex Mapping (Bit 0 or 2 has to be enabled as well)
0 0x01 Enable MCFG Auto-Selection based on ICCID
在8939项目中该值设置为0x03,在8976项目中该值设定为0x07,分别可以根据sim卡的ICCID或者IMSI/MCC-MNC来进行MBN的自动选择。
前者的原理是MCFG通过检测SIM卡根据卡中ICCID的Issuer Identification Number(IIN)字段来匹配/激活对应的MBN文件。
后者则是直接插卡后网络端发送给UE的IMSI/MCC-MNC信息来判断选择合适的MBN文件。
(ICCID: Integrate circuit card identity)
最好是在default的MBN中直接加NV-71546的设置,这样可以避免出现该NV丢失的情况,否则就最好加一个宏(hardcode),当出现该NV丢失时,这个宏就会作为auto-select的定义。
modify: /modem_proc/mcfg/mcfg_sel/src/mcfg_uim.c
- #define MCFG_UIM_AUTOSELECT_DEFAULT (0)
+ #define MCFG_UIM_AUTOSELECT_DEFAULT (3)
在adb中启用,让OTA更新MBN这个feature在上层被使能
adb shell setprop persist.radio.sw_mbn_update 1
Panda最新的代码中,已经没有用hardcode去写死这个auto-selection的宏,而是在默认的SW的mbn中添加了这个NV。
【3】samba服务器设置
cd /var/lib/dpkg/
sudo mv info/ info.bak/
sudo mkdir info/
sudo apt-get install smbclient
samba-common
smbclient
samba-common-bin
samba
sudo rm -rf info/
sudo mkdir info
...
新建共享文件夹,chmod改权限
sudo apt-get update
sudo vim /etc/samba/smb.conf
# Cap the size of the individual log files (in KiB).
max log size = 1000
+ security = user
+[own share]
+ comment = my own share
+ path = /home/eminem/share
+ browseable = yes
+ writable = yes
sudo useradd smbuser
sudo smbpasswd -a smbuser -->设置密码
sudo service smbd restart
ifconfig --> 在windows端输入linux虚拟机的ip地址即可访问共享文件夹的内容
===利用xml source生成MBN===
生成MBN的需求条件:perl,python,完整的MPSS镜像,hexagon工具,mircosoft-excel;基本上满足MPSS镜像编译条件的环境,如果是linux下直接使用xml表生成则不需要去操作修改excel表的相关内容。
利用带宏的excel表生成MBN,之前张锐已经有wiki介绍过,所以这里我再补充一下另外一种生成MBN的方法,无论是自己验证或者是后续的代码调整实际上都是通过读取相应的xml表来读取设置的EFS/NV,而excel表生成MBN的方法中,生成的命令其实就是执行modem_proc/build/build_mcfgs.exe这个可执行文件,在linux环境下,我们可以使用这个可执行文件,加上一些适当的参数,就能到达在excel中生成的相同效果。
添加/删除NV/EFS的方法在xml表中非常简单,参考已有的格式修改即可,类似于html标签格式。
build_mcfgs.exe --build_id=<BUILD ID> --configs=<PLATFORM>:<CONFIG_NAME> [--force-regenerate] [--force-rebuild] [--source-dir=<CARRIER_DIR_PATH]
以上这个命令就是一些常用的参数后缀
1.build-id可以参考excel表里summary那一栏image的属性值,这一项在生成特有MBN时可以为空
2.configs中platform填写mcfg_sw或mcfg_hw;config_name填写对应运行商的名字
3.--force-regenerate --force-rebuild 强制重新生成对应的xml source和MBN文件
4.source-dir即要生成MBN的文件对应excel表的目录地址
范例:build_mcfgs.exe --build_id=Generic --configs=mcfg_sw:CMCC --force-regenerate --force-rebuild --source-dir=generic\China\CMCC
build_mcfgs.exe --build_id=FAAAANVZ --build_ver=33625394 --configs=mcfg_sw:CU --xml --sw-product=CU --force-regenerate --force-rebuild
build_mcfgs.exe --build_id=8976.gen.prod --build_ver=33625394 --configs=mcfg_sw:CU --xml --sw-product=CU --force-regenerate --force-rebuild
e.g:
Windows:
build_mcfgs.exe --build_id=8976.gen.prod --build_root=D:\msm8976 --build_ver=33625394 --configs=mcfg_sw:CU --xml --force-regenerate --force-rebuild --source-dir=generic\China\CU
Linux:
perl build_mcfgs.pl --build_id=8976.gen.prod --build_ver=33625394 --configs=mcfg_sw:CU --xml --force-regenerate --force-rebuild --source-dir=generic/China/CU
perl ./build_mcfgs.pl --build_id=8976.gen.prod --xml --force-regenerate --force-rebuild --source-dir=generic/China/CU
perl ./build_mcfgs.pl --build_id=8976.gen.prod --build_ver=33625394 --configs=mcfg_sw:CU --xml --sw-product=CU
functions well:
perl ./build_mcfgs.pl --build_id=8976.gen.prod [--build_ver=33625394] --xml --force-regenerate --force-rebuild --source-dir=generic/China/CU
perl ./build_mcfgs.pl --build_id=FAAAANVZ --xml --force-regenerate --force-rebuild --source-dir=generic/China/CMCC
mcfg version: 在xml表中修改都是自增1即可,0x0203202D
直接修改xml表来修改并生成MBN,用PDC验证时会出现有时候active MBN时,重新恢复到了手机初始选择MBN的状态,修改验证MBN后,尝试了手机重启,MBN不会被重置,是有效的。
对应excel表中的mcfg版本修改:都是末位自增1
NV-4995 mcfg_version
NV-71 banner
对于mcfg_version的修改方法,高通官方的修改会去改动最后1位数字,每次将其自增1;对于ODM的自主修改操作,建议是修改第4位的数字,操作同样是自增1。
对比两种生成mbn的方式,显然直接使用excel表生成xml和mbn会更加直观和便捷,同时对于mbn的版本管理上来说,每一个excel表中都记录了mbn文件详细的修改记录,所以也推荐大家使用excel表生成的方法,只是在某些特定时候,比如电脑挂掉了之后:),还是直接改xml表生成更直接一点。
===MCFG框架===
MCFG这个框架主要是为了用单一的镜像文件去对应替代手机设备中众多的软硬件配置信息,而它的实现结果就是MBN文件。
MBN包含了一系列重要的NV/EFS和策略管理的参数,合适的配置能让手机去满足不同的网络需要,特殊配置的MBN同样可以用在实验室测试和验证性测试中。
MBN可以对应配置各种不同网络制式的情况,在手机插入sim卡接入到不同的网络时,会自动去选择对应的MBN文件。
MBN,即modem binary,通俗翻译即modem侧相关的二进制配置信息,作为一个配置文件,MBN中包含了手机一部分重要的NV/EFS信息,通过这样一个文件,除去一些共通的配置信息,将不同运营商的配置信息分别开来,每一个运营商都对应着一系列MBN文件,只把设备所需运营商对应的商用MBN文件一同编译进最终的NON-HLOS.bin镜像中,在手机开机后,由一个MBN的auto-select功能去根据当前所在网络选择适合的MBN激活,加载这些NV/EFS信息。
这样根据客户需求/运营商将MBN区分成单个文件,便于开发者们根据问题去查找和修改某一些关键的配置信息。
MCFG(modem configuration),modem侧配置文件组成的一个框架,以各类MBN文件为主,而整个MBN文件的类型可以如下区分,第一种分类可以分为default和specific两大类,default类别的是一些手机通用的配置,specific类是根据运营商或客户需求的独有配置文件;另一种分类方法,可以将它们分为HW和SW两大类,HW主要是包含RFC,UIM的一些硬件相关配置,HW_mbn常见的会去设置手机是否支持单双卡,设备是android还是WP类别,手机网络模式是7+1还是7+5;SW类别的则是和运营商关联较大的网络相关配置。
整个MCFG的框架包括了如下的内容:
MBN的加载和激活;
MBN鉴权;
根据MBN类型分别处理;
通过QPST工具手动选择MBN或根据ICCID自动选择MBN方案;
生成MBN;
在开机后,MCFG框架会在modem侧新起一个task,所有modem的task都会放在当HW/SW的MBN加载完后再进行。
在安全性方面,这些组合起来的配置信息会在每次刷写进入EFS之前先经过鉴权,这个signed的过程也被称为Code Signing Management System (CSMS),基本上大多数重要的镜像文件都需要经过这一步骤。
私有秘钥在编译成镜像时加密,公用秘钥在镜像刷写时鉴权解密,在OTA过程中应该也有类似的过程。
还有一些高通可以提供的安全机制,类似生成一些特殊的用户鉴权参数,不过都需要一定的费用才可以使能这些功能。
关于安全性方面的验证可以参考如下两个文档:
Presentation: Secured MSM Code Signing Service (80-V9807-1)
Presentation: Code Signing Management System Overview (80-V3999-1)
===MBN OTA from device===
commit: e7029f7a420fe12183d3a8d1b73619beae6b2284
设置一个adb属性值:persist.radio.start_ota_daemon --> 1(enable),0(disable)
对应的文件:/msm8976_panda01a_s00a_driver_only_1.1_r00228.1_RJIL_t0621/common/build/mbn_ota.txt
手机重启后会将该文件中列出的mbn文件加载到手机中去。
如下是当前panda手机自动加载的mbn:
(MBN所在手机子目录中没有用路径的全名的原因是FAT16类型的文件限制,字符数不能超过8个,因此commercial简化为了commerci)
mcfg_sw/generic/apac/reliance/commerci/mcfg_sw.mbn
mcfg_sw/generic/common/row/gen_3gpp/mcfg_sw.mbn
mcfg_sw/generic/china/cmcc/commerci/volte_op/mcfg_sw.mbn
mcfg_sw/generic/china/cu/commerci/openmkt/mcfg_sw.mbn
8939-M所在的位置如下(8939-L无此文件):
/msm8939-la-2-1-5_amss_qrd_no-l1-src_mmm_sxxa_2150203_32_0805/modem_proc/
/msm8939-la-2-1-5_amss_qrd_no-l1-src_mmm_sxxa_2150203_32_0805/LINUX/android/device/qcom/mirage01a_msm8916_64/
/msm8939-la-2-1-5_amss_qrd_no-l1-src_mmm_sxxa_2150203_32_0805/LINUX/android/device/qcom/mobee01a_msm8916_64/
/msm8939-la-2-1-5_amss_qrd_no-l1-src_mmm_sxxa_2150203_32_0805/LINUX/android/device/qcom/mobeeplus_msm8916_64/
所含内容如下:
mcfg_sw/generic/apac/reliance/commerci/mcfg_sw.mbn
mcfg_sw/generic/common/row/gen_3gpp/mcfg_sw.mbn
mcfg_sw/generic/china/cmcc/csfb/dsds/volte_co/mcfg_sw.mbn
mcfg_sw/generic/china/cu/csfb/dsds/commerci/mcfg_sw.mbn
8976中对于这一文件的一些操作:
/msm8976_panda01a_s00a_driver_only_1.1_r00228.1_RJIL_t0621/LINUX/android/device/qcom/common/rootdir/etc/init.qcom.sh
cp /firmware/image/modem_pr/mbn_ota.txt /data/misc/radio/modem_config
chown radio.radio /data/misc/radio/modem_config/mbn_ota.txt
echo 1 > /data/misc/radio/copy_complete
在手机上将mbn_ota这个文件copy过去,copy_complete置为1表示所有需要copy的文件已完毕。
/msm8976_panda01a_s00a_driver_only_1.1_r00228.1_RJIL_t0621/LINUX/android/vendor/qcom/proprietary/qcril/qcril_qmi/qcril_mbn_ota_file_list.c
为mbn_ota读取mbn文件这个行为提供一个接口,判断是否是mbn文件,获取所需mbn文件的列表等等。
/msm8976_panda01a_s00a_driver_only_1.1_r00228.1_RJIL_t0621/contents_8976_64.xml
这个是8976平台在生成最终的modem镜像文件NON-HLOS.bin时所需xml表,主要是列出了版本号,各编译模块的详细信息,所需的build-tools列表,workflow相关。
<step filter="non_hlos" type="exec">
<params>python @tool_name -n @destn -f @src_file -d image/modem_pr</params>
<tool_name>fatadd.py</tool_name>
<destn>./bin/$[flavor:.]/NON-HLOS.bin</destn>
<src_files>./mbn_ota.txt</src_files>
</step>
/msm8976_panda01a_s00a_driver_only_1.1_r00228.1_RJIL_t0621/common/build/build.py
# Add mbn_ota.txt
modem_ota_file = os.path.join(os.path.dirname(__file__), 'mbn_ota.txt')
modem_ota_dir ='image/modem_pr'
if os.path.exists(modem_ota_file):
ret_code_fatadd_tool = lg.log_exec(['python',fatadd_tool,'-n',fat_file_dest,'-f' + modem_ota_file,'-d'+ modem_ota_dir],verbose=0)
if ret_code_fatadd_tool != 0:
err_msg = 'update_common_info.py:' + 'python'+' '+fatadd_tool+' '+'-n'+' '+fat_file_dest+' '+'-f' + modem_ota_file,'-d'+ modem_ota_dir + ':Failed'
lg.log(err_msg)
raise Exception(err_msg)
在老的8939的平台上,MBN不会自动刷新,必须要重启手机/重启modem才能让新的MBN激活;新的8976平台上,会自动刷新激活新的MBN不需要重启modem/重启手机。
/msm8976_panda01a_s00a_driver_only_1.1_r00228.1_RJIL_t0621/LINUX/android/vendor/qcom/proprietary/qcril/qcril_qmi/qcril_qmi_mbn_ota_daemon.c
===MBN-OTA相关的安卓属性值===
persist.radio.ver_info
persist.radio.start_ota_daemon
persist.sys.ssr.restart_level
persist.radio.sw_mbn_loaded [modem]
persist.radio.hw_mbn_loaded
persist.radio.sw_mbn_update
persist.radio.hw_mbn_update
===题外话===
之前在excel表上不能使用对应的宏去生成xml源码和MBN文件,后面重装系统后出现了只能生成xml而不能生成MBN的现象,原因是必须要在磁盘根目录下新建一个modem_proc文件夹才能成功运行,应该是运行脚本里把这个执行路径给写死了。
scons文件是一个Python写的自动化构建工具,类似于GUNmake这种自动编译配置文件。
参考文档:80-N5576-96_MODEM SOFTWARE CONFIGURATION OVERVIEW.pdf
===MBN load/active from UI application===
1.load HW MBN: *#*#3266344#*#*
2.load SW MBN: *#*#6266344#*#*
3.active SW MBN: *#*#76266344#*#*
optional --> deactive SW MBN: *#*#33266344#*#*
4.显示carrier的信息
*#*#2277437234#*#*
===User-Agent===
现在只有在L版本上需要手动修改,M版本上高通加入了动态获取3个属性值组合成UA的功能,之后已经不需要每次都手动修改UA值了。
ro.fota.oem + ro.product.model + ro.build.software.version
e.g. CKT8939_5.0 + LS-5015 + LYF_LS-5015_00_202_12
===关于默认的两个MBN的加载流程===
/modem_proc/mcfg/mcfg_gen/build/mcfg_gen.scons
以上这个文件中包含了如何将默认MBN编译进FSG镜像的流程。
===MBN signed===
【1】sectool的版本在3.10以后的:
python sectools.py secimage -s -g mcfg_sw -i <unsigned_mbn_path> -o <signed_mbn_path>
python sectools.py secimage -s -g mcfg_hw -i <unsigned_mbn_path> -o <signed_mbn_path>
【2】sectool版本在3.10之前的,在对应的xml文件中添加如下代码
<image sign_id="mcfg_hw" name="mcfg_hw.mbn" image_type="elf_has_ht">
<general_properties_overrides>
<sw_id>0x0000000000000002</sw_id>
</general_properties_overrides>
</image>
<image sign_id="mcfg_sw" name="mcfg_sw.mbn" image_type="elf_has_ht">
<general_properties_overrides>
<sw_id>0x0000000000000002</sw_id>
</general_properties_overrides>
</image>