bcm53xx: basic support for Seama format in sysupgrade
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 48535
This commit is contained in:
parent
b4468a0d61
commit
c0edf30bdc
2 changed files with 34 additions and 3 deletions
|
@ -23,7 +23,7 @@ endef
|
|||
|
||||
KERNELNAME:=zImage dtbs
|
||||
|
||||
DEFAULT_PACKAGES += swconfig wpad-mini nvram otrx \
|
||||
DEFAULT_PACKAGES += swconfig wpad-mini nvram oseama otrx \
|
||||
kmod-gpio-button-hotplug \
|
||||
kmod-leds-gpio kmod-ledtrig-default-on kmod-ledtrig-timer
|
||||
|
||||
|
|
|
@ -100,8 +100,19 @@ platform_check_image() {
|
|||
fi
|
||||
;;
|
||||
"seama")
|
||||
echo "Seama firmware format is unsupported"
|
||||
local img_signature=$(oseama info "$1" | grep "Meta entry:.*signature=" | sed "s/.*=//")
|
||||
local dev_signature=$(platform_expected_image)
|
||||
echo "Found Seama image with device signature: $img_signature"
|
||||
|
||||
[ -n "$dev_signature" -a "seama $img_signature" != "$dev_signature" ] && {
|
||||
echo "Firmware signature doesn't match device signature ($dev_signature)"
|
||||
error=1
|
||||
}
|
||||
|
||||
$(oseama info "$1" -e 0 | grep -q "Meta entry:.*type=firmware") || {
|
||||
echo "Seama container doesn't have firmware entity"
|
||||
error=1
|
||||
}
|
||||
;;
|
||||
"trx")
|
||||
if ! otrx check "$1"; then
|
||||
|
@ -119,6 +130,8 @@ platform_check_image() {
|
|||
}
|
||||
|
||||
platform_pre_upgrade() {
|
||||
export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/bin/oseama /bin/sed"
|
||||
|
||||
local file_type=$(platform_identify "$1")
|
||||
local dir="/tmp/sysupgrade-bcm53xx"
|
||||
local trx="$1"
|
||||
|
@ -130,6 +143,7 @@ platform_pre_upgrade() {
|
|||
case "$file_type" in
|
||||
"chk") offset=$((0x$(get_magic_long_at "$1" 4)));;
|
||||
"cybertan") offset=32;;
|
||||
"seama") return;;
|
||||
esac
|
||||
|
||||
# Extract partitions from trx
|
||||
|
@ -200,6 +214,22 @@ platform_trx_from_cybertan_cmd() {
|
|||
echo -n dd bs=32 skip=1
|
||||
}
|
||||
|
||||
platform_img_from_seama() {
|
||||
local dir="/tmp/sysupgrade-bcm53xx"
|
||||
local offset=$(oseama info "$1" -e 0 | grep "Entity offset:" | sed "s/.*:\s*//")
|
||||
local size=$(oseama info "$1" -e 0 | grep "Entity size:" | sed "s/.*:\s*//")
|
||||
|
||||
# Busybox doesn't support required iflag-s
|
||||
# echo -n dd iflag=skip_bytes,count_bytes skip=$offset count=$size
|
||||
|
||||
rm -fR $dir
|
||||
mkdir -p $dir
|
||||
dd if="$1" of=$dir/image-noheader.bin bs=$offset skip=1
|
||||
dd if=$dir/image-noheader.bin of=$dir/image-entity.bin bs=$size count=1
|
||||
|
||||
echo -n $dir/image-entity.bin
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local file_type=$(platform_identify "$1")
|
||||
local trx="$1"
|
||||
|
@ -212,6 +242,7 @@ platform_do_upgrade() {
|
|||
case "$file_type" in
|
||||
"chk") cmd=$(platform_trx_from_chk_cmd "$trx");;
|
||||
"cybertan") cmd=$(platform_trx_from_cybertan_cmd "$trx");;
|
||||
"seama") trx=$(platform_img_from_seama "$trx");;
|
||||
esac
|
||||
|
||||
default_do_upgrade "$trx" "$cmd"
|
||||
|
|
Loading…
Reference in a new issue