@ -6,7 +6,7 @@ get_magic_at() {
platform_check_image_sdcard( ) {
local file = " $1 "
local magic
local magic diskdev partdev diff
magic = $( get_magic_at " $file " 510)
[ " $magic " != "55aa" ] && {
@ -14,18 +14,82 @@ platform_check_image_sdcard() {
return 1
}
return 0;
export_bootdevice && export_partdevice diskdev 0 || {
echo "Unable to determine upgrade device"
return 1
}
get_partitions " /dev/ $diskdev " bootdisk
#extract the boot sector from the image
get_image " $@ " | dd of = /tmp/image.bs count = 1 bs = 512b 2>/dev/null
get_partitions /tmp/image.bs image
#compare tables
diff = " $( grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image) "
rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
if [ -n " $diff " ] ; then
echo "Partition layout has changed. Full image will be written."
ask_bool 0 "Abort" && exit 1
return 0
fi
}
platform_do_upgrade_sdcard( ) {
local board = $( board_name)
local diskdev
local diskdev partdev diff
export_bootdevice && export_partdevice diskdev 0 || {
echo "Unable to determine upgrade device"
return 1
}
sync
if export_bootdevice && export_partdevice diskdev 0; then
get_image " $1 " | dd of = /dev/$diskdev bs = 2M conv = fsync
if [ " $SAVE_PARTITIONS " = "1" ] ; then
get_partitions " /dev/ $diskdev " bootdisk
#extract the boot sector from the image
get_image " $@ " | dd of = /tmp/image.bs count = 1 bs = 512b
get_partitions /tmp/image.bs image
#compare tables
diff = " $( grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image) "
else
diff = 1
fi
if [ -n " $diff " ] ; then
get_image " $@ " | dd of = " /dev/ $diskdev " bs = 4096 conv = fsync
# Separate removal and addtion is necessary; otherwise, partition 1
# will be missing if it overlaps with the old partition 2
partx -d - " /dev/ $diskdev "
partx -a - " /dev/ $diskdev "
return 0
fi
#write uboot image
get_image " $@ " | dd of = " $diskdev " bs = 512 skip = 1 seek = 1 count = 2048 conv = fsync
#iterate over each partition from the image and write it to the boot disk
while read part start size; do
if export_partdevice partdev $part ; then
echo " Writing image to /dev/ $partdev ... "
get_image " $@ " | dd of = " /dev/ $partdev " ibs = "512" obs = 1M skip = " $start " count = " $size " conv = fsync
else
echo " Unable to find partition $part device, skipped. "
fi
done < /tmp/partmap.image
#copy partition uuid
echo " Writing new UUID to /dev/ $diskdev ... "
get_image " $@ " | dd of = " /dev/ $diskdev " bs = 1 skip = 440 count = 4 seek = 440 conv = fsync
case " $board " in
armada-385-turris-omnia)
fw_setenv openwrt_bootargs 'earlyprintk console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=auto rootwait'