mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-15 18:03:30 +00:00
145 lines
3.6 KiB
Bash
Executable File
145 lines
3.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# Copy running OpenWrt to eMMC for amlogic
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/system.sh
|
|
|
|
include /lib/upgrade
|
|
NEWLINE="
|
|
"
|
|
|
|
function umount_disk() {
|
|
local mounted
|
|
local to="${1#/dev/}"
|
|
umount "/dev/$to"* 2>/dev/null
|
|
mounted="`mount | cut -d' ' -f1 | grep -Fm1 "/dev/$to"`"
|
|
if [ -n "$mounted" ] ; then
|
|
echo "can not umount $mounted" >&2
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
function part_disk() {
|
|
local to="${1#/dev/}"
|
|
dd if=/dev/zero of="/dev/$to" bs=512 count=1 conv=notrunc 2>/dev/null
|
|
parted --script "/dev/$to" \
|
|
mktable msdos \
|
|
mkpart primary 68MiB 132MiB \
|
|
mkpart primary 132MiB 388MiB \
|
|
mkpart primary 764MiB 2812MiB
|
|
}
|
|
|
|
function get_bootdisk() {
|
|
local var=$1
|
|
local diskdev
|
|
export_bootdevice && export_partdevice diskdev 0 || {
|
|
echo "Unable to determine upgrade device" >&2
|
|
return 1
|
|
}
|
|
export "$var=$diskdev"
|
|
return 0
|
|
}
|
|
|
|
function get_emmcs() {
|
|
local disk index disks
|
|
local bootdisk=$1
|
|
|
|
index=1
|
|
for disk in `cd /sys/block && ls | grep '^mmcblk' | grep -Ev 'mmcblk\d+boot\d+'`; do
|
|
[[ "$bootdisk" = "$disk" ]] && continue
|
|
[ -b /dev/$disk ] && [ "`cat /sys/block/$disk/size`" -gt 0 ] || continue
|
|
local diskinfo="`parted -ms "/dev/$disk" unit GiB print 2>/dev/null | grep -m1 "^/dev/$disk:"`"
|
|
[ -z "$diskinfo" ] && continue
|
|
local size="`echo "$diskinfo" | cut -d: -f2`"
|
|
# check disk greater than 2.8GB
|
|
[ $(( `echo "${size%%GiB}" | sed 's/\.\(.\).*/ * 10 + \1/'` )) -ge 28 ] || continue
|
|
local model="`echo "$diskinfo" | cut -d: -f7 | sed 's/"/_/g'`"
|
|
disks="${disks}$index. $disk $size \"$model\"$NEWLINE"
|
|
index=$(($index + 1))
|
|
done
|
|
echo "$disks"
|
|
return 0
|
|
}
|
|
|
|
function get_emmc() {
|
|
local index
|
|
local var=$2
|
|
local emmcs="$(get_emmcs $1)"
|
|
[ -z "$emmcs" ] && {
|
|
echo "Get eMMC list failed! (Maybe already running on eMMC? Current boot disk is $1)" >&2
|
|
return 1
|
|
}
|
|
local count=$(echo "$emmcs" | wc -l)
|
|
if [ "$count" -gt 1 ]; then
|
|
while true; do
|
|
echo "Found these eMMC devices:"
|
|
echo "Index. device size model"
|
|
echo "$emmcs"
|
|
echo -n "Select a disk to install (input index then press Enter): "
|
|
read index || {
|
|
echo "No input!" >&2
|
|
exit 1
|
|
}
|
|
if [ -z "$index" ]; then
|
|
echo "Empty input!"
|
|
else
|
|
echo "$emmcs" | grep -q "^${index}. " && break
|
|
echo "Wrong index!"
|
|
fi
|
|
done
|
|
else
|
|
echo "Found eMMC device:"
|
|
echo "Index. device size model"
|
|
echo "$emmcs"
|
|
index=1
|
|
fi
|
|
local value=$(echo "$emmcs" | grep "^${index}. " | cut -d' ' -f 2)
|
|
export "$var=$value"
|
|
}
|
|
|
|
function main() {
|
|
local bootdisk yn partdev part partdevto to
|
|
get_bootdisk bootdisk
|
|
[ -z "$bootdisk" ] && return 1
|
|
get_emmc $bootdisk to
|
|
[ -n "$to" ] || return 1
|
|
echo -ne "Will install to $to, confirm? y/N [n]\b\b"
|
|
read yn
|
|
if [ "$yn" = Y -o "$yn" = y ]; then
|
|
echo ""
|
|
echo "umount /dev/$to*"
|
|
umount_disk "$to" || return 1
|
|
echo "part /dev/$to"
|
|
part_disk "$to" || return 1
|
|
partprobe "/dev/$to"
|
|
if export_partdevice partdev 1; then
|
|
# umount /boot
|
|
echo "try umount /boot"
|
|
/bin/mount -o noatime,remount,ro /dev/$partdev
|
|
/usr/bin/umount -R -d -l /dev/$partdev 2>/dev/null || /bin/umount -l /dev/$partdev
|
|
fi
|
|
sleep 1
|
|
echo "copy rom data from /dev/$bootdisk to /dev/$to"
|
|
for part in 1 2; do
|
|
# copy boot and rootfs partitions
|
|
export_partdevice partdev $part
|
|
partdevto=${to}p$part
|
|
echo "copy /dev/$partdev to /dev/$partdevto"
|
|
dd if=/dev/$partdev of=/dev/$partdevto bs=1M conv=notrunc
|
|
done
|
|
# mark RESET overlay partition
|
|
partdevto=${to}p3
|
|
echo "mark /dev/$partdevto as RESET"
|
|
echo "RESET000" | dd of="/dev/$partdevto" bs=512 count=1 conv=sync,fsync
|
|
echo "All Done!"
|
|
else
|
|
echo "Bye!"
|
|
fi
|
|
}
|
|
|
|
echo "Copy running OpenWrt to eMMC for amlogic"
|
|
echo ""
|
|
|
|
main
|