base-files: add eMMC sysupgrade support (#8400)

Signed-off-by: aakkll <94471752+aakkll@users.noreply.github.com>

Co-authored-by: Enrico Mioso <mrkiko.rs@gmail.com>
This commit is contained in:
aakkll 2021-12-08 16:09:15 +08:00 committed by GitHub
parent 4bdb51efa0
commit 2972a0502d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 76 additions and 0 deletions

View File

@ -23,6 +23,7 @@ PKG_LICENSE:=GPL-2.0
PKG_CONFIG_DEPENDS += \ PKG_CONFIG_DEPENDS += \
CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE \ CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE \
CONFIG_NAND_SUPPORT \ CONFIG_NAND_SUPPORT \
CONFIG_EMMC_SUPPORT \
CONFIG_CLEAN_IPKG \ CONFIG_CLEAN_IPKG \
CONFIG_PER_FEED_REPO \ CONFIG_PER_FEED_REPO \
$(foreach feed,$(FEEDS_AVAILABLE),CONFIG_FEED_$(feed)) $(foreach feed,$(FEEDS_AVAILABLE),CONFIG_FEED_$(feed))
@ -124,10 +125,17 @@ ifeq ($(CONFIG_NAND_SUPPORT),)
endef endef
endif endif
ifeq ($(CONFIG_EMMC_SUPPORT),)
define Package/base-files/emmc-support
rm -f $(1)/lib/upgrade/emmc.sh
endef
endif
define Package/base-files/install define Package/base-files/install
$(CP) ./files/* $(1)/ $(CP) ./files/* $(1)/
$(Package/base-files/install-key) $(Package/base-files/install-key)
$(Package/base-files/nand-support) $(Package/base-files/nand-support)
$(Package/base-files/emmc-support)
if [ -d $(GENERIC_PLATFORM_DIR)/base-files/. ]; then \ if [ -d $(GENERIC_PLATFORM_DIR)/base-files/. ]; then \
$(CP) $(GENERIC_PLATFORM_DIR)/base-files/* $(1)/; \ $(CP) $(GENERIC_PLATFORM_DIR)/base-files/* $(1)/; \
fi fi

View File

@ -0,0 +1,64 @@
# Copyright (C) 2021 OpenWrt.org
#
. /lib/functions.sh
emmc_upgrade_tar() {
local tar_file="$1"
[ "$CI_KERNPART" -a -z "$EMMC_KERN_DEV" ] && export EMMC_KERN_DEV="$(find_mmc_part $CI_KERNPART $CI_ROOTDEV)"
[ "$CI_ROOTPART" -a -z "$EMMC_ROOT_DEV" ] && export EMMC_ROOT_DEV="$(find_mmc_part $CI_ROOTPART $CI_ROOTDEV)"
[ "$CI_DATAPART" -a -z "$EMMC_DATA_DEV" ] && export EMMC_DATA_DEV="$(find_mmc_part $CI_DATAPART $CI_ROOTDEV)"
local has_kernel
local has_rootfs
local board_dir=$(tar tf "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
board_dir=${board_dir%/}
tar tf "$tar_file" ${board_dir}/kernel 1>/dev/null 2>/dev/null && has_kernel=1
tar tf "$tar_file" ${board_dir}/root 1>/dev/null 2>/dev/null && has_rootfs=1
[ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
[ "$has_rootfs" = 1 -a "$EMMC_ROOT_DEV" ] &&
export EMMC_ROOTFS_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/root -O | dd of="$EMMC_ROOT_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
if [ -z "$UPGRADE_BACKUP" ]; then
if [ "$EMMC_DATA_DEV" ]; then
dd if=/dev/zero of="$EMMC_DATA_DEV" bs=512 count=8
elif [ "$EMMC_ROOTFS_BLOCKS" ]; then
dd if=/dev/zero of="$EMMC_ROOT_DEV" bs=512 seek=$EMMC_ROOTFS_BLOCKS count=8
elif [ "$EMMC_KERNEL_BLOCKS" ]; then
dd if=/dev/zero of="$EMMC_KERN_DEV" bs=512 seek=$EMMC_KERNEL_BLOCKS count=8
fi
fi
}
emmc_upgrade_fit() {
local fit_file="$1"
[ "$CI_KERNPART" -a -z "$EMMC_KERN_DEV" ] && export EMMC_KERN_DEV="$(find_mmc_part $CI_KERNPART $CI_ROOTDEV)"
if [ "$EMMC_KERN_DEV" ]; then
export EMMC_KERNEL_BLOCKS=$(($(get_image "$fit_file" | fwtool -i /dev/null -T - | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
[ -z "$UPGRADE_BACKUP" ] && dd if=/dev/zero of="$EMMC_KERN_DEV" bs=512 seek=$EMMC_KERNEL_BLOCKS count=8
fi
}
emmc_copy_config() {
if [ "$EMMC_DATA_DEV" ]; then
dd if="$UPGRADE_BACKUP" of="$EMMC_DATA_DEV" bs=512
elif [ "$EMMC_ROOTFS_BLOCKS" ]; then
dd if="$UPGRADE_BACKUP" of="$EMMC_ROOT_DEV" bs=512 seek=$EMMC_ROOTFS_BLOCKS
elif [ "$EMMC_KERNEL_BLOCKS" ]; then
dd if="$UPGRADE_BACKUP" of="$EMMC_KERN_DEV" bs=512 seek=$EMMC_KERNEL_BLOCKS
fi
}
emmc_do_upgrade() {
local file_type=$(identify $1)
case "$file_type" in
"fit") emmc_upgrade_fit $1;;
*) emmc_upgrade_tar $1;;
esac
}

View File

@ -23,6 +23,7 @@ sub target_config_features(@) {
/^pwm$/ and $ret .= "\select PWM_SUPPORT\n"; /^pwm$/ and $ret .= "\select PWM_SUPPORT\n";
/^rtc$/ and $ret .= "\tselect RTC_SUPPORT\n"; /^rtc$/ and $ret .= "\tselect RTC_SUPPORT\n";
/^squashfs$/ and $ret .= "\tselect USES_SQUASHFS\n"; /^squashfs$/ and $ret .= "\tselect USES_SQUASHFS\n";
/^emmc$/ and $ret .= "\tselect EMMC_SUPPORT\n";
/^jffs2$/ and $ret .= "\tselect USES_JFFS2\n"; /^jffs2$/ and $ret .= "\tselect USES_JFFS2\n";
/^jffs2_nand$/ and $ret .= "\tselect USES_JFFS2_NAND\n"; /^jffs2_nand$/ and $ret .= "\tselect USES_JFFS2_NAND\n";
/^ext4$/ and $ret .= "\tselect USES_EXT4\n"; /^ext4$/ and $ret .= "\tselect USES_EXT4\n";

View File

@ -101,6 +101,9 @@ config RFKILL_SUPPORT
config NAND_SUPPORT config NAND_SUPPORT
bool bool
config EMMC_SUPPORT
bool
config ARCH_64BIT config ARCH_64BIT
bool bool