base-files: upgrade: nand: allow custom fw extraction in nand_do_upgrade()
authorRafał Miłecki <rafal@milecki.pl>
Fri, 12 Jul 2024 09:36:48 +0000 (11:36 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Fri, 26 Jul 2024 11:41:25 +0000 (13:41 +0200)
By default nand_do_upgrade() can only deal with raw and gzipped firmware
files. Vendors often use custom firmware containers. Allow passing
custom extraction command to allow using nand_do_upgrade() with vendor
firmwares.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
package/base-files/files/lib/upgrade/nand.sh

index e868ba95372391788b28bf97de2c7a83cde3b9f6..9fa3cd2ddd40db2cdc45efd1e842d9268ca58ec5 100644 (file)
@@ -387,9 +387,11 @@ nand_verify_tar_file() {
 
 nand_do_flash_file() {
        local file="$1"
+       local cmd="$2"
+       local file_type
 
-       local cmd="$(identify_if_gzip "$file")cat"
-       local file_type="$(identify "$file" "$cmd" "")"
+       [ -z "$cmd" ] && cmd="$(identify_if_gzip "$file")cat"
+       file_type="$(identify "$file" "$cmd" "")"
 
        [ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART=rootfs
 
@@ -423,17 +425,22 @@ nand_do_restore_config() {
 # Supported firmware containers:
 # 1. Raw file
 # 2. Gzip
+# 3. Custom (requires passing extracting command)
 #
 # Supported data formats:
 # 1. Tar with kernel/rootfs
 # 2. UBI image (built using "ubinized")
 # 3. UBIFS image (to update UBI volume with)
 # 4. FIT image (to update UBI volume with)
+#
+# $(1): firmware file path
+# $(2): (optional) pipe command to extract firmware
 nand_do_upgrade() {
        local file="$1"
+       local cmd="$2"
 
        sync
-       nand_do_flash_file "$file" && nand_do_upgrade_success
+       nand_do_flash_file "$file" "$cmd" && nand_do_upgrade_success
        nand_do_upgrade_failed
 }