1.LK中读写oem分区中的特殊字符串
2.LK传递kernel cmdline参数firstboot,
3.kernel解析cmdline参数,通过判断firstboot=来判断是否是第一次开机
4.lk中判断和记录第一次开机,再告知kernel会产生的问题
开机初始化中,LK成功走过,但是kernel启动失败,会认为已经成功经历了第一次开机,造成后续刷软件后的“第一次开机”指示灯不亮
避免这种影响,添加oem分区,每次刷软件后都能恢复到第一次开机的状态:每次刷完软件指示灯都点亮一次。
4.drivers/leds-aw2015.c中根据是否是第一次开机有不同的行为
5.如何擦除oem分区
5.1 修改CP中的分区定义文件AMSS/common/config/partition.xml
指定了oem分区对应的文件:
- <partition label="oem" size_in_kb="65536" type="7db6ac55-ecb5-4e02-80da-4d335b973332" bootable="false" readonly="false" filename="" />
+ <partition label="oem" size_in_kb="65536" type="7db6ac55-ecb5-4e02-80da-4d335b973332" bootable="false" readonly="false" filename="oem.mbn" />
5.2 编译CP生成rawprogram0.xml,用它替换掉AP中的vendor/qcom/proprietary/tools/rawprogram0.xml
其中指定了oem分区对应oem.mbn文件
6. 制作一个都是0的文件oem.mbn
dd bs=512 count=1024 if=/dev/zero of=device/qcom/msm8952_64/oem.mbn
/dev/zero产生0字节,块大小512,一共1024个块,文件大小512K
7.修改makefile copy oem.mbn到out目录下
device/qcom/msm8952_64/msm8952_64.mk
+
+# oem partition
+ PRODUCT_COPY_FILES += \
+ device/qcom/msm8952_64/oem.mbn:oem.mbn
oem.mbn复制到out/target/product/msm8952_64/oem.mbn
7.如何生成的rawprogram0_unsparse.xml文件,
make SPARSEIMAGE
build/core/Makefile文件中指定了target,使用python脚本checksparse.py通过rawprogram0.xml生成了rawprogram0_unsparse.xml文件
.PHONY: SPARSEIMAGE
SPARSEIMAGE: $(INSTALLED_SPARSEIMAGE_FILES)
@echo "unsparse the sparse ext4 image"
python $(HOST_OUT_EXECUTABLES)/checksparse.py \
-i $(HOST_OUT_EXECUTABLES)/rawprogram0.xml \
-o $(PRODUCT_OUT)/rawprogram0_unsparse.xml \
-s $(PRODUCT_OUT) \
-t $(PRODUCT_OUT)
checksparse.py脚本在目录vendor/qcom/proprietary/tools/checksparse.py下,会被复制到
out/host/linux-x86/bin/checksparse.py
生成的rawprogram0_unsparse.xml文件中应该指定oem分区所对应的文件oem.mbn,验证确实如此:
<program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="oem.mbn" label="oem" num_partition_sectors="131072" physical_partition_number="0" size_in_KB="65536.0" sparse="false" start_byte_hex="0xd6188000" start_sector="7015488" />
CP中的partition.xml通过编译CP生成了rawprogram0.xml,把这个xml复制到AP目录中,make SPARSEIMAGE会生成rawprogram0_unsparse.xml,用来最后刷手机
8.