執行命令為 /sbin/sysupgrade firmware.bin
註:
/sbin/sysupgrade 是 script 的文字檔(會 include /lib/upgrade/ 裡面的檔案)
firmware.bin 是韌體檔案
步驟一
在 /lib/upgrade/platform.sh 的 func platform_check_image() 會檢查 firmware.bin 是否合法
註:會下此命令查詢
dumpimage -l ${img} | awk '/^ Image.*(.*)/ { print gensub(/Image .* \((.*)\)/,"\\1", $0) }'
在 platform_check_image()裡,增加判斷字串,如下:
local mandatory_kernel="kernel@1"
image_has_mandatory_section $1 ${mandatory_kernel} && {\
mandatory_section_found=1
}
或用 mkimage 建立內建支援的字串
步驟二
/lib/upgrade/common.sh 的 do_upgrade() 會再進入 platform_do_upgrade()
可能會需要在 platform_do_upgrade() 的 case "$board" in 增加板子的型號
步驟三
之後進入 flash_section() 的 case "${sec}" in
並選擇其中一項進行更新,我選擇的是 ubi*
(在 mkimage 時 .its 內容的 images 名稱字串)
步驟四
最後會進入 do_flash_ubi()
(把不需要的 Fail safe upgrade 功能關掉)
附錄:
rootfs.cfg
[kernel]
mode=ubi
image=arch/arm64/boot/Image.itb
vol_id=0
vol_type=dynamic
vol_name=kernel
[config_data]
mode=ubi
vol_size=25MiB
vol_id=1
vol_type=dynamic
vol_name=config_data
# ubinize -m 2048 -p 128KiB -o rootfs.ubi rootfs.cfg
rootfs.its
/dts-v1/;
/ {
description = "ARM64 OpenWrt FIT (Flattened Image Tree)";
#address-cells = <1>;
images {
ubi@rootfs {
description = "ARM64 OpenWrt Linux-4.4.60";
data = /incbin/("rootfs.ubi");
type = "ramdisk";
arch = "arm64";
compression = "gzip";
os = "linux";
hash@1 {
algo = "crc32";
};
hash@2 {
algo = "sha1";
};
};
};
configurations {
default = "config@1";
config@1 {
description = "ARM64 OpenWrt Linux-4.4.60";
ramdisk = "ubi@rootfs";
};
};
};
# mkimage -f rootfs.its rootfs.itb
沒有留言:
張貼留言