mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-06 00:06:42 +08:00
3599ea5263
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 commitee76bd11bb
("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! and boot the old image again. Since the original change should not change the behavior of NOR images, just check for the deadc0de marker at the end of the squashfs-jffs2 image do avoid the problematic behavior for these images. Fixes:ee76bd11bb
("images: fix boot failures on NAND with small sub pages") Signed-off-by: Sven Eckelmann <sven@narfation.org>
49 lines
931 B
Bash
49 lines
931 B
Bash
#!/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_post_padding_word() {
|
|
local rootfs_length="$(stat -c%s "$1")"
|
|
[ "$rootfs_length" -ge 4 ] || return
|
|
rootfs_length=$((rootfs_length-4))
|
|
|
|
# the JFFS2 end marker must be on a 4K boundary (often 64K or 256K)
|
|
local unaligned_bytes=$((rootfs_length%4096))
|
|
[ "$unaligned_bytes" = 0 ] || return
|
|
|
|
# skip rootfs data except the potential EOF marker
|
|
dd if="$1" bs=1 skip="$rootfs_length" 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")
|
|
local post_padding_word="$(get_post_padding_word "$1")"
|
|
|
|
case "$post_padding_word" in
|
|
"deadc0de")
|
|
echo "squashfs-jffs2"
|
|
;;
|
|
*)
|
|
echo "squashfs"
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
echo "unknown"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
round_up() {
|
|
echo "$(((($1 + ($2 - 1))/ $2) * $2))"
|
|
}
|