1 python生成一个sector数据
def get_oem_bootmode():
Header size
SECTOR_SIZE_IN_BYTES = 512
header = [0 for i in \
range(SECTOR_SIZE_IN_BYTES)]
magic
The ord() built-in function in
Python converts a character
into an ordinal integer number.
header[0:7] = [ord('p'), ord('i'), ord('d'),
ord('9'), ord('0'), ord('9'), ord('1'), ord('0')]
output = StringIO.StringIO()
for i in header:
output.write(struct.pack("B", i))
content = output.getvalue()
output.close()
only need 512 bytes
return content[:512]
2 制作ext4分区镜像
文件名:make_ko_img.sh
#!/bin/sh
MY_PATH=${PWD}
TARGET_DIR={MY_PATH}/out/target/product/{TARGET_PRODUCT}
KO_DIR=${TARGET_DIR}/ko/lib/modules
TOOL_DIR=${MY_PATH}/out/host/linux-x86/bin
rm ${TARGET_DIR}/ko* -rf
mkdir --parents ${KO_DIR}
cp ${TARGET_DIR}/vendor/lib/modules/my_driver.ko ${KO_DIR}
fastboot只接受Android sparse image(稀疏镜像格式)
Android 8
#${TOOL_DIR}/make_ext4fs -l 8M -s -a ko ${TARGET_DIR}/ko.img ${TARGET_DIR}/ko/
Android 10
make_ext4fs -l 8M -s -a ko ${TARGET_DIR}/ko.img ${TARGET_DIR}/ko/
#${TOOL_DIR}/simg2img ${TARGET_DIR}/ko.img ${TARGET_DIR}/ko.ext4
-l 8M是分区大小,make_ext4fs最小分区大小是8M,小于该值会导致编译失败
-a ko是指这个img用于Android,挂载点是/ko
makefile中调用:
MK_KO_IMG_SCRIPT := $(LOCAL_PATH)/path/to/make_ko_img.sh
$(MK_KO_IMG_SCRIPT)
3 Abbreviations
FRP:Android Factory Reset Protection