layerscape: support sysupgrade for SD card ext4 rootfs
Support sysupgrade for SD card ext4 rootfs. Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
This commit is contained in:
		| @@ -18,6 +18,7 @@ endef | |||||||
|  |  | ||||||
| include $(INCLUDE_DIR)/target.mk | include $(INCLUDE_DIR)/target.mk | ||||||
|  |  | ||||||
| DEFAULT_PACKAGES += kmod-usb3 kmod-usb-dwc3 kmod-usb-storage | DEFAULT_PACKAGES += kmod-usb3 kmod-usb-dwc3 kmod-usb-storage \ | ||||||
|  |   partx-utils | ||||||
|  |  | ||||||
| $(eval $(call BuildTarget)) | $(eval $(call BuildTarget)) | ||||||
|   | |||||||
| @@ -8,6 +8,85 @@ RAMFS_COPY_DATA="/etc/fw_env.config /var/lock/fw_printenv.lock" | |||||||
|  |  | ||||||
| REQUIRE_IMAGE_METADATA=1 | REQUIRE_IMAGE_METADATA=1 | ||||||
|  |  | ||||||
|  | platform_check_image_sdboot() { | ||||||
|  | 	local diskdev partdev diff | ||||||
|  |  | ||||||
|  | 	export_bootdevice && export_partdevice diskdev 0 || { | ||||||
|  | 		echo "Unable to determine upgrade device" | ||||||
|  | 		return 1 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	# get partitions table from boot device | ||||||
|  | 	get_partitions "/dev/$diskdev" bootdisk | ||||||
|  |  | ||||||
|  | 	# get partitions table from sysupgrade.bin | ||||||
|  | 	dd if="$1" of=/tmp/image.bs bs=512b count=1 > /dev/null 2>&1 | ||||||
|  | 	sync | ||||||
|  | 	get_partitions /tmp/image.bs image | ||||||
|  |  | ||||||
|  | 	# compare tables | ||||||
|  | 	diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" | ||||||
|  |  | ||||||
|  | 	rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image | ||||||
|  |  | ||||||
|  | 	if [ -n "$diff" ]; then | ||||||
|  | 		echo "Partition layout has changed. Full image will be written." | ||||||
|  | 		ask_bool 0 "Abort" && exit 1 | ||||||
|  | 		return 0 | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | platform_do_upgrade_sdboot() { | ||||||
|  | 	local diskdev partdev diff | ||||||
|  |  | ||||||
|  | 	export_bootdevice && export_partdevice diskdev 0 || { | ||||||
|  | 		echo "Unable to determine upgrade device" | ||||||
|  | 		return 1 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then | ||||||
|  | 		# get partitions table from boot device | ||||||
|  | 		get_partitions "/dev/$diskdev" bootdisk | ||||||
|  |  | ||||||
|  | 		# get partitions table from sysupgrade.bin | ||||||
|  | 		dd if="$1" of=/tmp/image.bs bs=512b count=1 > /dev/null 2>&1 | ||||||
|  | 		sync | ||||||
|  | 		get_partitions /tmp/image.bs image | ||||||
|  |  | ||||||
|  | 		# compare tables | ||||||
|  | 		diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" | ||||||
|  | 	else | ||||||
|  | 		diff=1 | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	if [ -n "$diff" ]; then | ||||||
|  | 		dd if="$1" of="/dev/$diskdev" bs=1024 count=4 > /dev/null 2>&1 | ||||||
|  | 		dd if="$1" of="$diskdev" bs=1024 skip=4 seek=16384 > /dev/null 2>&1 | ||||||
|  | 		sync | ||||||
|  |  | ||||||
|  | 		# Separate removal and addtion is necessary; otherwise, partition 1 | ||||||
|  | 		# will be missing if it overlaps with the old partition 2 | ||||||
|  | 		partx -d - "/dev/$diskdev" | ||||||
|  | 		partx -a - "/dev/$diskdev" | ||||||
|  |  | ||||||
|  | 		return 0 | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# write kernel image | ||||||
|  | 	dd if="$1" of="$diskdev" bs=1024 skip=4 seek=16384 count=16384 > /dev/null 2>&1 | ||||||
|  | 	sync | ||||||
|  |  | ||||||
|  | 	# iterate over each partition from the image and write it to the boot disk | ||||||
|  | 	while read part start size; do | ||||||
|  | 		if export_partdevice partdev $part; then | ||||||
|  | 			echo "Writing image to /dev/$partdev..." | ||||||
|  | 			dd if="$1" of="/dev/$partdev" bs=512 skip="$start" count="$size" > /dev/null 2>&1 | ||||||
|  | 			sync | ||||||
|  | 		else | ||||||
|  | 			echo "Unable to find partition $part device, skipped." | ||||||
|  | 		fi | ||||||
|  | 	done < /tmp/partmap.image | ||||||
|  |  | ||||||
|  | } | ||||||
| platform_do_upgrade_traverse_nandubi() { | platform_do_upgrade_traverse_nandubi() { | ||||||
| 	bootsys=$(fw_printenv bootsys | awk -F= '{{print $2}}') | 	bootsys=$(fw_printenv bootsys | awk -F= '{{print $2}}') | ||||||
| 	newbootsys=2 | 	newbootsys=2 | ||||||
| @@ -25,6 +104,15 @@ platform_do_upgrade_traverse_nandubi() { | |||||||
| 	nand_do_upgrade "$1" || (echo "Upgrade failed, setting bootsys ${bootsys}" && fw_setenv bootsys $bootsys) | 	nand_do_upgrade "$1" || (echo "Upgrade failed, setting bootsys ${bootsys}" && fw_setenv bootsys $bootsys) | ||||||
|  |  | ||||||
| } | } | ||||||
|  | platform_copy_config() { | ||||||
|  | 	local partdev parttype=ext4 | ||||||
|  |  | ||||||
|  | 	if export_partdevice partdev 1; then | ||||||
|  | 		mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt | ||||||
|  | 		cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE" | ||||||
|  | 		umount /mnt | ||||||
|  | 	fi | ||||||
|  | } | ||||||
| platform_check_image() { | platform_check_image() { | ||||||
| 	local board=$(board_name) | 	local board=$(board_name) | ||||||
|  |  | ||||||
| @@ -43,6 +131,14 @@ platform_check_image() { | |||||||
| 	fsl,ls2088a-rdb) | 	fsl,ls2088a-rdb) | ||||||
| 		return 0 | 		return 0 | ||||||
| 		;; | 		;; | ||||||
|  | 	fsl,ls1012a-frwy-sdboot | \ | ||||||
|  | 	fsl,ls1021a-twr-sdboot | \ | ||||||
|  | 	fsl,ls1043a-rdb-sdboot | \ | ||||||
|  | 	fsl,ls1046a-rdb-sdboot | \ | ||||||
|  | 	fsl,ls1088a-rdb-sdboot) | ||||||
|  | 		platform_check_image_sdboot "$1" | ||||||
|  | 		return 0 | ||||||
|  | 		;; | ||||||
| 	*) | 	*) | ||||||
| 		echo "Sysupgrade is not currently supported on $board" | 		echo "Sysupgrade is not currently supported on $board" | ||||||
| 		;; | 		;; | ||||||
| @@ -72,6 +168,14 @@ platform_do_upgrade() { | |||||||
| 		PART_NAME=firmware | 		PART_NAME=firmware | ||||||
| 		default_do_upgrade "$1" | 		default_do_upgrade "$1" | ||||||
| 		;; | 		;; | ||||||
|  | 	fsl,ls1012a-frwy-sdboot | \ | ||||||
|  | 	fsl,ls1021a-twr-sdboot | \ | ||||||
|  | 	fsl,ls1043a-rdb-sdboot | \ | ||||||
|  | 	fsl,ls1046a-rdb-sdboot | \ | ||||||
|  | 	fsl,ls1088a-rdb-sdboot) | ||||||
|  | 		platform_do_upgrade_sdboot "$1" | ||||||
|  | 		return 0 | ||||||
|  | 		;; | ||||||
| 	*) | 	*) | ||||||
| 		echo "Sysupgrade is not currently supported on $board" | 		echo "Sysupgrade is not currently supported on $board" | ||||||
| 		;; | 		;; | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ define Device/ls1021atwr-sdboot | |||||||
|   DEVICE_VARIANT := SD Card Boot |   DEVICE_VARIANT := SD Card Boot | ||||||
|   DEVICE_DTS := ls1021a-twr |   DEVICE_DTS := ls1021a-twr | ||||||
|   FILESYSTEMS := ext4 |   FILESYSTEMS := ext4 | ||||||
|   IMAGES := sdcard.img |   IMAGES := sdcard.img sysupgrade.bin | ||||||
|   IMAGE/sdcard.img := \ |   IMAGE/sdcard.img := \ | ||||||
|     ls-clean | \ |     ls-clean | \ | ||||||
|     ls-append-sdhead $(1) | pad-to 4K | \ |     ls-append-sdhead $(1) | pad-to 4K | \ | ||||||
| @@ -50,6 +50,12 @@ define Device/ls1021atwr-sdboot | |||||||
|     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ |     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ | ||||||
|     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | ||||||
|  |   IMAGE/sysupgrade.bin := \ | ||||||
|  |     ls-clean | \ | ||||||
|  |     ls-append-sdhead $(1) | pad-to 16M | \ | ||||||
|  |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|  |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | append-metadata | ||||||
|  |   SUPPORTED_DEVICES := fsl,ls1021a-twr-sdboot | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += ls1021atwr-sdboot | TARGET_DEVICES += ls1021atwr-sdboot | ||||||
|  |  | ||||||
|   | |||||||
| @@ -72,7 +72,7 @@ define Device/ls1012afrwy | |||||||
|     kmod-ppfe |     kmod-ppfe | ||||||
|   DEVICE_DTS := freescale/fsl-ls1012a-frwy |   DEVICE_DTS := freescale/fsl-ls1012a-frwy | ||||||
|   FILESYSTEMS := ext4 |   FILESYSTEMS := ext4 | ||||||
|   IMAGES := firmware.bin sdcard.img |   IMAGES := firmware.bin sdcard.img sysupgrade.bin | ||||||
|   IMAGE/firmware.bin := \ |   IMAGE/firmware.bin := \ | ||||||
|     ls-clean | \ |     ls-clean | \ | ||||||
|     ls-append $(1)-bl2.pbl | pad-to 128K | \ |     ls-append $(1)-bl2.pbl | pad-to 128K | \ | ||||||
| @@ -86,6 +86,12 @@ define Device/ls1012afrwy | |||||||
|     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ |     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ | ||||||
|     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | ||||||
|  |   IMAGE/sysupgrade.bin := \ | ||||||
|  |     ls-clean | \ | ||||||
|  |     ls-append-sdhead $(1) | pad-to 16M | \ | ||||||
|  |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|  |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | append-metadata | ||||||
|  |   SUPPORTED_DEVICES := fsl,ls1012a-frwy-sdboot | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += ls1012afrwy | TARGET_DEVICES += ls1012afrwy | ||||||
|  |  | ||||||
| @@ -121,7 +127,7 @@ define Device/ls1043ardb-sdboot | |||||||
|     fmc fmc-eth-config |     fmc fmc-eth-config | ||||||
|   DEVICE_DTS := freescale/fsl-ls1043a-rdb-sdk |   DEVICE_DTS := freescale/fsl-ls1043a-rdb-sdk | ||||||
|   FILESYSTEMS := ext4 |   FILESYSTEMS := ext4 | ||||||
|   IMAGES := sdcard.img |   IMAGES := sdcard.img sysupgrade.bin | ||||||
|   IMAGE/sdcard.img := \ |   IMAGE/sdcard.img := \ | ||||||
|     ls-clean | \ |     ls-clean | \ | ||||||
|     ls-append-sdhead $(1) | pad-to 4K | \ |     ls-append-sdhead $(1) | pad-to 4K | \ | ||||||
| @@ -132,6 +138,12 @@ define Device/ls1043ardb-sdboot | |||||||
|     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ |     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ | ||||||
|     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | ||||||
|  |   IMAGE/sysupgrade.bin := \ | ||||||
|  |     ls-clean | \ | ||||||
|  |     ls-append-sdhead $(1) | pad-to 16M | \ | ||||||
|  |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|  |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | append-metadata | ||||||
|  |   SUPPORTED_DEVICES := fsl,ls1043a-rdb-sdboot | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += ls1043ardb-sdboot | TARGET_DEVICES += ls1043ardb-sdboot | ||||||
|  |  | ||||||
| @@ -167,7 +179,7 @@ define Device/ls1046ardb-sdboot | |||||||
|     fmc fmc-eth-config |     fmc fmc-eth-config | ||||||
|   DEVICE_DTS := freescale/fsl-ls1046a-rdb-sdk |   DEVICE_DTS := freescale/fsl-ls1046a-rdb-sdk | ||||||
|   FILESYSTEMS := ext4 |   FILESYSTEMS := ext4 | ||||||
|   IMAGES := sdcard.img |   IMAGES := sdcard.img sysupgrade.bin | ||||||
|   IMAGE/sdcard.img := \ |   IMAGE/sdcard.img := \ | ||||||
|     ls-clean | \ |     ls-clean | \ | ||||||
|     ls-append-sdhead $(1) | pad-to 4K | \ |     ls-append-sdhead $(1) | pad-to 4K | \ | ||||||
| @@ -178,6 +190,12 @@ define Device/ls1046ardb-sdboot | |||||||
|     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ |     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ | ||||||
|     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | ||||||
|  |   IMAGE/sysupgrade.bin := \ | ||||||
|  |     ls-clean | \ | ||||||
|  |     ls-append-sdhead $(1) | pad-to 16M | \ | ||||||
|  |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|  |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | append-metadata | ||||||
|  |   SUPPORTED_DEVICES := fsl,ls1046a-rdb-sdboot | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += ls1046ardb-sdboot | TARGET_DEVICES += ls1046ardb-sdboot | ||||||
|  |  | ||||||
| @@ -217,7 +235,7 @@ define Device/ls1088ardb-sdboot | |||||||
|     restool |     restool | ||||||
|   DEVICE_DTS := freescale/fsl-ls1088a-rdb |   DEVICE_DTS := freescale/fsl-ls1088a-rdb | ||||||
|   FILESYSTEMS := ext4 |   FILESYSTEMS := ext4 | ||||||
|   IMAGES := sdcard.img |   IMAGES := sdcard.img sysupgrade.bin | ||||||
|   IMAGE/sdcard.img := \ |   IMAGE/sdcard.img := \ | ||||||
|     ls-clean | \ |     ls-clean | \ | ||||||
|     ls-append-sdhead $(1) | pad-to 4K | \ |     ls-append-sdhead $(1) | pad-to 4K | \ | ||||||
| @@ -230,6 +248,12 @@ define Device/ls1088ardb-sdboot | |||||||
|     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ |     ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ | ||||||
|     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | ||||||
|  |   IMAGE/sysupgrade.bin := \ | ||||||
|  |     ls-clean | \ | ||||||
|  |     ls-append-sdhead $(1) | pad-to 16M | \ | ||||||
|  |     append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ | ||||||
|  |     append-rootfs | check-size $(LS_SD_IMAGE_SIZE) | append-metadata | ||||||
|  |   SUPPORTED_DEVICES := fsl,ls1088a-rdb-sdboot | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += ls1088ardb-sdboot | TARGET_DEVICES += ls1088ardb-sdboot | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yangbo Lu
					Yangbo Lu