@ -2,8 +2,6 @@
# Copyright (C) 2011 OpenWrt.org
#
. /lib/functions/system.sh
PART_NAME = firmware
RAMFS_COPY_BIN = 'nandwrite'
@ -12,175 +10,6 @@ CI_LDADR=0x80060000
PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD = 0
platform_find_partitions( ) {
local first dev size erasesize name
while read dev size erasesize name; do
name = ${ name # '"' } ; name = ${ name % '"' }
case " $name " in
vmlinux.bin.l7| vmlinux| kernel| linux| linux.bin| rootfs| filesystem)
if [ -z " $first " ] ; then
first = " $name "
else
echo " $erasesize : $first : $name "
break
fi
; ;
esac
done < /proc/mtd
}
platform_find_kernelpart( ) {
local part
for part in " ${ 1 % : * } " " ${ 1 #* : } " ; do
case " $part " in
vmlinux.bin.l7| vmlinux| kernel| linux| linux.bin)
echo " $part "
break
; ;
esac
done
}
platform_find_rootfspart( ) {
local part
for part in " ${ 1 % : * } " " ${ 1 #* : } " ; do
[ " $part " != " $2 " ] && echo " $part " && break
done
}
platform_do_upgrade_combined( ) {
local partitions = $( platform_find_partitions)
local kernelpart = $( platform_find_kernelpart " ${ partitions #* : } " )
local erase_size = $(( 0 x${ partitions %% : * } )) ; partitions = " ${ partitions #* : } "
local kern_length = 0x$( dd if = " $1 " bs = 2 skip = 1 count = 4 2>/dev/null)
local kern_blocks = $(( $kern_length / $CI_BLKSZ ))
local root_blocks = $(( 0 x$( dd if = " $1 " bs = 2 skip = 5 count = 4 2>/dev/null) / $CI_BLKSZ ))
if [ -n " $partitions " ] && [ -n " $kernelpart " ] && \
[ ${ kern_blocks :- 0 } -gt 0 ] && \
[ ${ root_blocks :- 0 } -gt 0 ] && \
[ ${ erase_size :- 0 } -gt 0 ] ;
then
local rootfspart = $( platform_find_rootfspart " $partitions " " $kernelpart " )
local append = ""
[ -f " $CONF_TAR " -a " $SAVE_CONFIG " -eq 1 ] && append = " -j $CONF_TAR "
if [ " $PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD " -ne 1 ] ; then
( dd if = " $1 " bs = $CI_BLKSZ skip = 1 count = $kern_blocks 2>/dev/null; \
dd if = " $1 " bs = $CI_BLKSZ skip = $(( 1 + $kern_blocks )) count = $root_blocks 2>/dev/null ) | \
mtd -r $append -F$kernelpart :$kern_length :$CI_LDADR ,rootfs write - $partitions
elif [ -n " $rootfspart " ] ; then
dd if = " $1 " bs = $CI_BLKSZ skip = 1 count = $kern_blocks 2>/dev/null | \
mtd write - $kernelpart
dd if = " $1 " bs = $CI_BLKSZ skip = $(( 1 + $kern_blocks )) count = $root_blocks 2>/dev/null | \
mtd -r $append write - $rootfspart
fi
fi
PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD = 0
}
tplink_get_image_hwid( ) {
get_image " $@ " | dd bs = 4 count = 1 skip = 16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
tplink_get_image_mid( ) {
get_image " $@ " | dd bs = 4 count = 1 skip = 17 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
tplink_get_image_boot_size( ) {
get_image " $@ " | dd bs = 4 count = 1 skip = 37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
tplink_pharos_check_image( ) {
local magic_long = " $( get_magic_long " $1 " ) "
[ " $magic_long " != "7f454c46" ] && {
echo " Invalid image magic ' $magic_long ' "
return 1
}
local model_string = " $( tplink_pharos_get_model_string) "
local line
# Here $1 is given to dd directly instead of get_image as otherwise the skip
# will take almost a second (as dd can't seek then)
#
# This will fail if the image isn't local, but that's fine: as the
# read loop won't be executed at all, it will return true, so the image
# is accepted (loading the first 1.5M of a remote image for this check seems
# a bit extreme)
dd if = " $1 " bs = 1 skip = 1511432 count = 1024 2>/dev/null | while read line; do
[ " $line " = " $model_string " ] && break
done || {
echo "Unsupported image (model not in support-list)"
return 1
}
return 0
}
seama_get_type_magic( ) {
get_image " $@ " | dd bs = 1 count = 4 skip = 53 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
wrgg_get_image_magic( ) {
get_image " $@ " | dd bs = 4 count = 1 skip = 8 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
cybertan_get_image_magic( ) {
get_image " $@ " | dd bs = 8 count = 1 skip = 0 2>/dev/null | hexdump -v -n 8 -e '1/1 "%02x"'
}
cybertan_check_image( ) {
local magic = " $( cybertan_get_image_magic " $1 " ) "
local fw_magic = " $( cybertan_get_hw_magic) "
[ " $fw_magic " != " $magic " ] && {
echo " Invalid image, ID mismatch, got: $magic , but need: $fw_magic "
return 1
}
return 0
}
platform_do_upgrade_compex( ) {
local fw_file = $1
local fw_part = $PART_NAME
local fw_mtd = $( find_mtd_part $fw_part )
local fw_length = 0x$( dd if = " $fw_file " bs = 2 skip = 1 count = 4 2>/dev/null)
local fw_blocks = $(( $fw_length / 65536 ))
if [ -n " $fw_mtd " ] && [ ${ fw_blocks :- 0 } -gt 0 ] ; then
local append = ""
[ -f " $CONF_TAR " -a " $SAVE_CONFIG " -eq 1 ] && append = " -j $CONF_TAR "
sync
dd if = " $fw_file " bs = 64k skip = 1 count = $fw_blocks 2>/dev/null | \
mtd $append write - " $fw_part "
fi
}
alfa_check_image( ) {
local magic_long = " $( get_magic_long " $1 " ) "
local fw_part_size = $( mtd_get_part_size firmware)
case " $magic_long " in
"27051956" )
[ " $fw_part_size " != "16318464" ] && {
echo " Invalid image magic \" $magic_long \" for $fw_part_size bytes "
return 1
}
; ;
"68737173" )
[ " $fw_part_size " != "7929856" ] && {
echo " Invalid image magic \" $magic_long \" for $fw_part_size bytes "
return 1
}
; ;
esac
return 0
}
platform_check_image( ) {
local board = $( board_name)
local magic = " $( get_magic_word " $1 " ) "