#!/bin/sh . /etc/functions.sh copy_kernel() { local input="$1" local output="$2" local cmdline="$3" size="$(echo -n "$cmdline" | wc -c)" dd if="$input" bs=3M count=1 > "$output" /sbin/patch-cmdline "$output" "$cmdline" } fstype="$(mount | grep ' / ' | awk '$5 != "rootfs" {print $5}')" case "$fstype" in ext2|jffs2) echo "Copying from $fstype to yaffs2";; *) echo "Invalid filesystem."; exit 1;; esac [ -d /tmp/cf2nand ] && { echo "/tmp/cf2nand already exists" exit 1 } mkdir /tmp/cf2nand mkdir /tmp/cf2nand/rootfs mount -t "$fstype" /dev/root /tmp/cf2nand/rootfs || { echo "Mounting rootfs failed." exit 1 } boot="$(find_mtd_part 'RouterBoard NAND Boot')" main="$(find_mtd_part 'RouterBoard NAND Main')" [ -z "$boot" -o -z "$main" ] && { echo "Cannot find NAND Flash partitions" exit 1 } echo "Erasing filesystem..." mtd erase Boot 2>/dev/null >/dev/null mtd erase Main 2>/dev/null >/dev/null mkdir /tmp/cf2nand/p1 mkdir /tmp/cf2nand/p2 mount -t yaffs2 "$boot" /tmp/cf2nand/p1 mount -t yaffs2 "$main" /tmp/cf2nand/p2 echo "Copying kernel..." copy_kernel /dev/cf/card0/part1 /tmp/cf2nand/p1/kernel "root=/dev/mtdblock1 rootfstype=yaffs2 init=/etc/preinit " 2>/dev/null >/dev/null umount /tmp/cf2nand/p1 rmdir /tmp/cf2nand/p1 echo "Copying filesystem..." ( cd /tmp/cf2nand/rootfs; tar c . ) | ( cd /tmp/cf2nand/p2; tar x ) echo "chmod ugo+x /" > /tmp/cf2nand/p2/etc/uci-defaults/set_root_permission sync umount /tmp/cf2nand/p2 rmdir /tmp/cf2nand/p2 umount /tmp/cf2nand/rootfs rmdir /tmp/cf2nand/rootfs rmdir /tmp/cf2nand