高通自帶的SDK中沒有升級lk的功能,但是有時候也需要升級lk,比如公司出廠的機器燒寫的boot是不允許adb remount的,有時候客戶除錯又需要用到這個功能。我看網上說./build/tools/releasetools/ota_from_target_files.py 有-u的選項,但是我的SDK里面沒有看到這個選項
現在需要做的就是:
1.make otapackage 時將emmc_appsboot.mbn 打包進ota
2.Recovery升級的時候將emmc_appsboot.mbn覆寫掉之前的aboot
1.修改recovery.fstab
檔案位于device/qcom/msm8953_64/recovery.fstab,我們需要添加aboot磁區掛載,如果不添加這個在ota升級包制作的時候會檢驗不過
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1 wait
/dev/block/bootdevice/by-name/cache /cache ext4 noatime,nosuid,nodev,barrier=1,data=https://bbs.csdn.net/topics/ordered wait,check
/dev/block/bootdevice/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,data=https://bbs.csdn.net/topics/ordered,noauto_da_alloc wait,check,length=-16384
/dev/block/mmcblk1p1 /sdcard vfat nosuid,nodev wait
/dev/block/sda1 /udisk vfat nosuid,nodev wait
/dev/block/bootdevice/by-name/boot /boot emmc defaults defaults
/dev/block/bootdevice/by-name/recovery /recovery emmc defaults defaults
/dev/block/bootdevice/by-name/misc /misc emmc defaults defaults
/dev/block/bootdevice/by-name/aboot /aboot emmc defaults defaults
2.既然要掛在aboot,那么我們必須要創建一個aboot的檔案節點,找到bootable/recovery/etc/init.rc 添加生成aboot目錄,這一步是順手做的,也不知道實際需不需要
on init
export ANDROID_ROOT /system
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
symlink /system/etc /etc
mkdir /sdcard
mkdir /udisk
mkdir /system
mkdir /data
mkdir /cache
mkdir /sideload
mkdir /firmware
mkdir /aboot
mount tmpfs tmpfs /tmp
chown root shell /tmp
chmod 0775 /tmp
chmod 0775 /aboot
3.修改build/tools/releasetools/ota_from_target_files.py 升級包制作檔案
1.在OPTIONS = common.OPTIONS后面添加一個uboot選項
OPTIONS = common.OPTIONS
OPTIONS.package_key = None
............
OPTIONS.payload_signer_args = []
OPTIONS.uboot = None
2.在def option_handler(o, a):函式中添加 -u選項
elif o == "--payload_signer":
OPTIONS.payload_signer = a
elif o == "--payload_signer_args":
OPTIONS.payload_signer_args = shlex.split(a)
elif o in ("-u"): #add by liaocj upgrade lk
OPTIONS.uboot = a
else:
return False
return True
3.common.ParseOptions 中添加決議-u的opt
args = common.ParseOptions(argv, __doc__,
extra_opts="bu:k:i:d:wne:t:a:2o",
4.添加lk檔案寫入ota.zip 中命令
在def WriteFullOTAPackage(input_zip, output_zip): 函式寫入boot.img后面添加
common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
script.ShowProgress(0.05, 5)
script.WriteRawImage("/boot", "boot.img")
script.ShowProgress(0.2, 10)
#add by liaocj upgrade to lk beg
if OPTIONS.uboot is not None:
data = open(OPTIONS.uboot, "rb").read()
common.CheckSize(data, "aboot.img", OPTIONS.info_dict)
common.ZipWriteStr(output_zip, "aboot.img", data)
script.WriteRawImage("/aboot", "aboot.img")
script.ShowProgress(0.4, 20)
#add by liaocj upgrade to lk end
5.修改build/core/Makefile,這樣可以在執行make otapackage 自動生成
$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE)
@echo "Package OTA: $@"
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
./build/tools/releasetools/ota_from_target_files -v \
--block \
--no_prereq \
-p $(HOST_OUT) \
-k $(KEY_CERT_PAIR) \
$(if $(UPGRADE_UBOOT), -u $(PRODUCT_OUT)/emmc_appsboot.mbn) \
$(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
$(BUILT_TARGET_FILES_PACKAGE) $@
6.查看編譯之后的ota包

7.再查看升級腳本 META-INF\com\google\android\updater-script 多了aboot升級的命令
package_extract_file("aboot.img", "/dev/block/bootdevice/by-name/aboot");
show_progress(0.400000, 20);附上git diff
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/42414.html
標籤:Android
上一篇:關于驢跡導游景區首頁功能實作問題
下一篇:Element androidx.constraintlayout.widget.ConstraintLayout must be declared
