mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-03-11 00:18:22 +01:00
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
There has been some modified device trees floating on forums to make this device work, collect the work and integrate it into OpenWrt so it hopefully works for users. Link: https://github.com/openwrt/openwrt/pull/21998 Signed-off-by: Linus Walleij <linusw@kernel.org>
126 lines
2.9 KiB
Bash
126 lines
2.9 KiB
Bash
REQUIRE_IMAGE_METADATA=1
|
|
MTDSYSFS=/sys/class/mtd
|
|
|
|
gemini_check_redboot_parts() {
|
|
MTD1OF=`cat ${MTDSYSFS}/mtd1/offset`
|
|
MTD2OF=`cat ${MTDSYSFS}/mtd2/offset`
|
|
MTD3OF=`cat ${MTDSYSFS}/mtd3/offset`
|
|
MTD4OF=`cat ${MTDSYSFS}/mtd4/offset`
|
|
MTD1SZ=$((${MTD2OF} - ${MTD1OF}))
|
|
MTD2SZ=$((${MTD3OF} - ${MTD2OF}))
|
|
MTD3SZ=$((${MTD4OF} - ${MTD3OF}))
|
|
ESZ=`cat ${MTDSYSFS}/mtd1/erasesize`
|
|
if test ${ESZ} == 131072 ; then
|
|
echo "MTD has 128kb EB size"
|
|
else
|
|
echo "MTD has wrong EB size!"
|
|
fi
|
|
KSZ=$(($ESZ * $2))
|
|
RSZ=$(($ESZ * $3))
|
|
ASZ=$(($ESZ * $4))
|
|
NAME=`cat ${MTDSYSFS}/mtd1/name`
|
|
if test "x${NAME}" == "xKern" ; then
|
|
if test ${MTD1SZ} == ${KSZ} ; then
|
|
echo "MTD1 Kern ${MTD1SZ} OK..."
|
|
else
|
|
echo "MTD1 is wrong size, aborting" >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "MTD1 has wrong name, aborting" >&2
|
|
exit 1
|
|
fi
|
|
NAME=`cat ${MTDSYSFS}/mtd2/name`
|
|
if test "x${NAME}" == "xRamdisk" ; then
|
|
if test ${MTD2SZ} == ${RSZ} ; then
|
|
echo "MTD2 Ramdisk ${MTD2SZ} OK..."
|
|
else
|
|
echo "MTD2 is at wrong offset, aborting" >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "MTD2 has wrong name, aborting" >&2
|
|
exit 1
|
|
fi
|
|
NAME=`cat ${MTDSYSFS}/mtd3/name`
|
|
if test "x${NAME}" == "xApplication" ; then
|
|
if test ${MTD3SZ} == ${ASZ} ; then
|
|
echo "MTD3 Application ${MTD3SZ} OK..."
|
|
else
|
|
echo "MTD3 is at wrong offset, aborting" >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "MTD3 has wrong name, aborting" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# This converts the old RedBoot partitioning to the new shared
|
|
# "firmware" partition.
|
|
gemini_do_flat_redboot_upgrade() {
|
|
ESZ=131072
|
|
KSZ=$(($ESZ * $2))
|
|
RSZ=$(($ESZ * $3))
|
|
KRSZ=$(($KSZ + $RSZ))
|
|
ASZ=$(($ESZ * $4))
|
|
echo "Partition sizes: Kern ${KSZ}, Ramdisk ${RSZ}, Application ${ASZ}"
|
|
echo "Extract Kern from flat image ${1}"
|
|
echo "Write Kern from flat image ${1}"
|
|
dd if="$1" bs=1 count=${KSZ} | mtd write - Kern
|
|
echo "Write rd.gz from flat image ${1}"
|
|
dd if="$1" bs=1 skip=${KSZ} count=${RSZ} | mtd write - Ramdisk
|
|
echo "Write hddapp.tgz from flat image ${1}"
|
|
dd if="$1" bs=1 skip=${KRSZ} count=${ASZ} | mtd write - Application
|
|
}
|
|
|
|
# Check if we have the new partition scheme, else do it the old
|
|
# way.
|
|
gemini_do_combined_upgrade() {
|
|
NAME=`cat ${MTDSYSFS}/mtd1/name`
|
|
if test "x${NAME}" == "xfirmware" ; then
|
|
PART_NAME=firmware
|
|
default_do_upgrade "$1"
|
|
else
|
|
gemini_check_redboot_parts "$1" $2 $3 $4
|
|
gemini_do_flat_redboot_upgrade "$1" $2 $3 $4
|
|
fi
|
|
}
|
|
|
|
platform_check_image() {
|
|
local board=$(board_name)
|
|
|
|
case "$board" in
|
|
dlink,dir-685|\
|
|
itian,sq201|\
|
|
storlink,gemini324|\
|
|
raidsonic,ib-4210-b|\
|
|
raidsonic,ib-4220-b|\
|
|
verbatim,s08v1901-d1)
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
echo "Sysupgrade is not yet supported on $board."
|
|
return 1
|
|
}
|
|
|
|
platform_do_upgrade() {
|
|
local board=$(board_name)
|
|
|
|
case "$board" in
|
|
dlink,dir-685)
|
|
PART_NAME=firmware
|
|
default_do_upgrade "$1"
|
|
;;
|
|
raidsonic,ib-4210-b|\
|
|
raidsonic,ib-4220-b|\
|
|
storlink,gemini324|\
|
|
verbatim,s08v1901-d1)
|
|
gemini_do_combined_upgrade "$1" 24 48 48
|
|
;;
|
|
itian,sq201)
|
|
gemini_do_combined_upgrade "$1" 16 48 48
|
|
;;
|
|
esac
|
|
}
|