#!/bin/sh on_exit() { mountpoint -q /proc && umount /proc exec /sbin/init $* } trap on_exit 0 mount -t proc proc /proc || exit grep -q overlay /proc/filesystems || exit if ! grep -q 'root=.*nfs\|mmcblk\|ram' /proc/cmdline; then if grep -q ubifs /proc/cmdline; then mount -t ubifs ubi0:rootfs_data /overlay # The code block is disabled until a fix is made due to a global problem with the overlay # elif grep -q loop /proc/devices; then # mount -t devtmpfs devtmpfs /dev # mount -t tmpfs tmpfs /overlay # sleep 1 # mkdir -p /overlay/sdcard # mount -r /dev/mmcblk0p1 /overlay/sdcard # tar -xf /overlay/sdcard/settings.tar -C /overlay && echo OpenIPC: Extract settings from sdcard # umount /overlay/sdcard # rmdir /overlay/sdcard else mtdblkdev=$(awk -F ':' '/rootfs_data/ {print $1}' /proc/mtd | sed 's/mtd/mtdblock/') mtdchrdev=$(grep 'rootfs_data' /proc/mtd | cut -d: -f1) mount -t jffs2 /dev/${mtdblkdev} /overlay if [ $? -ne 0 ] || { dmesg | grep "jffs2.*: Magic bitmask.*not found" >/dev/null 2>&1; }; then echo "jffs2 health check error, format required!" flash_eraseall -j /dev/${mtdchrdev} echo "Done! Remounting..." mount -t jffs2 /dev/${mtdblkdev} /overlay || mount -t tmpfs tmpfs /overlay || exit if ! cat /proc/mounts | grep ${mtdblkdev}; then echo "--------------------------------" echo "Crash - your flash in the trash!" echo "--------------------------------" fi fi fi if grep -q overlayfs /proc/filesystems; then mount -t overlayfs overlayfs -o lowerdir=/,upperdir=/overlay,ro /mnt || { umount /overlay exit } else overlay_rootdir=/overlay/root overlay_workdir=/overlay/work mkdir -p ${overlay_rootdir} ${overlay_workdir} mount -t overlay overlay -o lowerdir=/,upperdir=${overlay_rootdir},workdir=${overlay_workdir} /mnt || { umount /overlay exit } fi pivot_root /mnt /mnt/rom mount -o noatime,move /rom/proc /proc mount -o noatime,move /rom/dev /dev mount -o noatime,move /rom/overlay /overlay fi