diff mbox series

images: Revert "fix boot failures on NAND with small sub pages"

Message ID 20201205072916.33429-1-sven@narfation.org
State Superseded
Delegated to: Petr Štetiar
Headers show
Series images: Revert "fix boot failures on NAND with small sub pages" | expand

Commit Message

Sven Eckelmann Dec. 5, 2020, 7:29 a.m. UTC
This reverts commit ee76bd11bbe7 ("images: fix boot failures on NAND with
small sub pages") which broke (besides telling otherwise in the commit
message) the boot after sysupgrade on some NOR based devices.

The NOR flash rootfs images stored in a sysupgrade.tar must end with the
JFFS2 marker. Otherwise, devices like OpenMesh A42/A62 are not able to
calculate the md5sum of the fixed squashfs part and store it inside the
u-boot-env.

But the commit ee76bd11bbe7 ("images: fix boot failures on NAND with small
sub pages") adds up to 1020 0x00 bytes after the 0xdead0de EOF marker. The
calculated md5sum will be wrong due do this change and u-boot will fail to
boot the newly flashed device with a message like:

  Validating MD5Sum of 'vmlinux'...
  Passed!
  Validating MD5Sum of 'rootfs'...
  Failed!
      583a1b7b54b8601efa64ade42742459b != 8850ee812dfd7638e94083329d5d2781

  Data validation failed!

Cc: Russell Senior <russell@personaltelco.net>
Cc: Jonas Gorski <jonas.gorski@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
I've originally submitted another hack on top of the original hack to avoid
this additional padding when the JFFS2 post-padding mark was detected.

https://github.com/openwrt/openwrt/pull/3616

But I was not yet able to get feedback from the original author.
---
 scripts/functions.sh      | 26 --------------------------
 scripts/sysupgrade-tar.sh | 13 +------------
 scripts/ubinize-image.sh  | 37 +++++++++++++++----------------------
 3 files changed, 16 insertions(+), 60 deletions(-)
 delete mode 100644 scripts/functions.sh
diff mbox series

Patch

diff --git a/scripts/functions.sh b/scripts/functions.sh
deleted file mode 100644
index 9a7fcde627..0000000000
--- a/scripts/functions.sh
+++ /dev/null
@@ -1,26 +0,0 @@ 
-#!/bin/sh
-
-
-get_magic_word() {
-	dd if=$1 bs=4 count=1 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' '
-}
-
-get_fs_type() {
-	local magic_word="$(get_magic_word "$1")"
-
-	case "$magic_word" in
-	"3118"*)
-		echo "ubifs"
-		;;
-	"68737173")
-		echo "squashfs"
-		;;
-	*)
-		echo "unknown"
-		;;
-	esac
-}
-
-round_up() {
-	echo "$(((($1 + ($2 - 1))/ $2) * $2))"
-}
diff --git a/scripts/sysupgrade-tar.sh b/scripts/sysupgrade-tar.sh
index b93b2584bb..d1d627a96e 100755
--- a/scripts/sysupgrade-tar.sh
+++ b/scripts/sysupgrade-tar.sh
@@ -1,7 +1,5 @@ 
 #!/bin/sh
 
-. $TOPDIR/scripts/functions.sh
-
 board=""
 kernel=""
 rootfs=""
@@ -55,16 +53,7 @@  fi
 
 mkdir -p "${tmpdir}/sysupgrade-${board}"
 echo "BOARD=${board}" > "${tmpdir}/sysupgrade-${board}/CONTROL"
-if [ -n "${rootfs}" ]; then
-	case "$( get_fs_type ${rootfs} )" in
-	"squashfs")
-		dd if="${rootfs}" of="${tmpdir}/sysupgrade-${board}/root" bs=1024 conv=sync
-		;;
-	*)
-		cp "${rootfs}" "${tmpdir}/sysupgrade-${board}/root"
-		;;
-	esac
-fi
+[ -z "${rootfs}" ] || cp "${rootfs}" "${tmpdir}/sysupgrade-${board}/root"
 [ -z "${kernel}" ] || cp "${kernel}" "${tmpdir}/sysupgrade-${board}/kernel"
 
 mtime=""
diff --git a/scripts/ubinize-image.sh b/scripts/ubinize-image.sh
index c6f8bcefe5..32bd5ca326 100755
--- a/scripts/ubinize-image.sh
+++ b/scripts/ubinize-image.sh
@@ -1,7 +1,5 @@ 
 #!/bin/sh
 
-. $TOPDIR/scripts/functions.sh
-
 part=""
 ubootenv=""
 ubinize_param=""
@@ -11,6 +9,16 @@  outfile=""
 err=""
 ubinize_seq=""
 
+get_magic_word() {
+	dd if=$1 bs=2 count=1 2>/dev/null | od -A n -N 2 -t x1 | tr -d ' '
+}
+
+is_ubifs() {
+	if [ "$( get_magic_word $1 )" = "3118" ]; then
+		echo "1"
+	fi
+}
+
 ubivol() {
 	volid=$1
 	name=$2
@@ -24,7 +32,7 @@  ubivol() {
 	echo "vol_name=$name"
 	if [ "$image" ]; then
 		echo "image=$image"
-		[ -n "$size" ] && echo "vol_size=${size}"
+		[ -n "$size" ] && echo "vol_size=${size}MiB"
 	else
 		echo "vol_size=1MiB"
 	fi
@@ -35,10 +43,7 @@  ubivol() {
 
 ubilayout() {
 	local vol_id=0
-	local rootsize=
-	local autoresize=
-	local rootfs_type="$( get_fs_type "$2" )"
-
+	local root_is_ubifs="$( is_ubifs "$2" )"
 	if [ "$1" = "ubootenv" ]; then
 		ubivol $vol_id ubootenv
 		vol_id=$(( $vol_id + 1 ))
@@ -58,28 +63,16 @@  ubilayout() {
 
 		size="$part"
 
-		ubivol $vol_id "$name" "$image" "" "${size}MiB"
+		ubivol $vol_id "$name" "$image" "" "$size"
 		vol_id=$(( $vol_id + 1 ))
 	done
 	if [ "$3" ]; then
 		ubivol $vol_id kernel "$3"
 		vol_id=$(( $vol_id + 1 ))
 	fi
-
-	case "$rootfs_type" in
-	"ubifs")
-		autoresize=1
-		;;
-	"squashfs")
-		# squashfs uses 1k block size, ensure we do not
-		# violate that
-		rootsize="$( round_up "$( stat -c%s "$2" )" 1024 )"
-		;;
-	esac
-	ubivol $vol_id rootfs "$2" "$autoresize" "$rootsize"
-
+	ubivol $vol_id rootfs "$2" $root_is_ubifs
 	vol_id=$(( $vol_id + 1 ))
-	[ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1
+	[ "$root_is_ubifs" ] || ubivol $vol_id rootfs_data "" 1
 }
 
 set_ubinize_seq() {