1. 程式人生 > >第一次開機初始化指示燈

第一次開機初始化指示燈

efi 一個 mage line 問題 復制 str image bytes

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.

第一次開機初始化指示燈