xt894 e xt912: Safestrap 3.75 per le partizioni inutilizzate /preinstall & /webtop

Il Motorola Droid 4 xt894 ed il Motorola Droid Razr xt912 hanno molto spazio inutilizzato diviso in due partizioni:

  • /preinstall : 600 Mb
  • /webtop : 1,4 Gb

/preinstall è la partizione dove sono salvate le apps preinstallate e /webtop è una partizione abbandonata che sotto Gingerbread era usata per il webtop ma che da ICS è stata abbandonata.

Safestrap è un'ottima recovery per dispositivi con il bootloader bloccato che usa il kexec per caricare un kernel e che può installare una rom sostituendo la rom stock o in uno dei quattro slot virtuali che possono essere creati nella memoria interna. L'uso degli slots virtuali è un ottima soluzione per lasciare intatto il sistema principale ed evitare un possibile brick del telefono ma gli slots virtuali sono più lenti delle partizioni reali del sistema principale, non è possibile effettuare il trim su di essi e occupano spazio importante.

Questa versione di SafeStrap è basata su SafeStrap 3.75 ma ha molte differenze con esso:

  • non è più presente lo splashscreen durante l'avvio per entrare in Safestrap occorre selezionare BP Tools nel Boot Mode Selection Menu, menù al quale si accede avviando il telefono mentre sono contemporaneamente premuti entrambi i tasti del volume
  • è stato aggiunto un Safe Rom slot che usa le partizioni inutilizzate:
    • /preinstall per /system
    • /webtop per /data
    • /cache è condiviso con lo Stock Rom slot
  • in questa versione ci sono 6 slots: lo Stock Rom slot, il Safe Rom slot ed i quattro slots virtuali
  • il Safe Rom slot è più veloce degli slots virtuali ed è più sicuro dello Stock Rom slot

Se si sta utilizzando la versione originale di Safestrap si può semplicemente installare sopra di essa questa nuova versione senza perdere le roms installate negli slots virtuali.
Questa versione di Safestrap funziona come ogni altra versione ed è possibile utilizzare lo Stock Rom slot ed i quattro slots virtuali come si è sempre fatto, l'unica cosa un poco complicata è l'installazione di una rom aosp nel nuovo Safe Rom slot.

 

Come utilizzare il Safe Rom slot con una rom AOSP:
Sfortunatamente le roms aosp disponibili per il droid 4 e per il droid razr sono sviluppate per gli slots virtuali di Safestrap e per lo Stock Rom slot e questo causa un bootloop su una schermata nera dopo la vibrazione standard del kexec con queste roms nel nuovo Safe Rom slot.
Il problema è nelle ramdisk delle rom e precisamente nel loro fixboot.sh.
Nelle rom per SafeStrap la ramdisk is situata nel percorso /system/etc/kexec/ramdisk.img e nella ramdisk c'è il /sbin/fixboot.sh che avvia solamente le rom dallo Stock Rom slot o da uno slot virtuale quindi dobbiamo modificare il fixboot.sh per avviare una rom dal nuovo Safe Rom slot.
Di seguito sono presenti i fixboot.sh originali dalle cm11, cm12, cm13 e le loro rispettive possibili revisioni per supportare il Safe Rom slot.
 
fixboot.sh originale dalla cm11:
#!/sbin/bbx sh

# remount root as rw
/sbin/bbx mount -o remount,rw rootfs
/sbin/bbx mkdir /ss
/sbin/bbx chmod 777 /ss

# mount safestrap partition
/sbin/bbx mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 /dev/block/emstorage /ss

SLOT_LOC=$(/sbin/bbx cat /ss/safestrap/active_slot)

if [ "$SLOT_LOC" != "stock" ]; then
# create SS loopdevs
/sbin/bbx mknod -m600 /dev/block/loop-system b 7 99
/sbin/bbx mknod -m600 /dev/block/loop-userdata b 7 98
/sbin/bbx mknod -m600 /dev/block/loop-cache b 7 97

# setup loopbacks
/sbin/bbx losetup /dev/block/loop-system /ss/safestrap/$SLOT_LOC/system.img
/sbin/bbx losetup /dev/block/loop-userdata /ss/safestrap/$SLOT_LOC/userdata.img
/sbin/bbx losetup /dev/block/loop-cache /ss/safestrap/$SLOT_LOC/cache.img

# move real partitions out of the way
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig
/sbin/bbx mv /dev/block/cache /dev/block/cacheorig

# change symlinks
/sbin/bbx ln -s /dev/block/preinstall /dev/block/system
/sbin/bbx ln -s /dev/block/webtop /dev/block/userdata
/sbin/bbx ln -s /dev/block/loop-cache /dev/block/cache
else
/sbin/bbx umount /ss
fi

/sbin/bbx touch /.safestrapped
fixboot.sh editato per la  cm11:
#!/sbin/bbx sh

# remount root as rw
/sbin/bbx mount -o remount,rw rootfs
/sbin/bbx mkdir /ss
/sbin/bbx chmod 777 /ss

# mount safestrap partition
/sbin/bbx mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 /dev/block/emstorage /ss

SLOT_LOC=$(/sbin/bbx cat /ss/safestrap/active_slot)

if [ "$SLOT_LOC" = "stock" ]; then
/sbin/bbx umount /ss
elif [ "$SLOT_LOC" = "safe" ]; then
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig

/sbin/bbx ln -s /dev/block/preinstall /dev/block/system
/sbin/bbx ln -s /dev/block/webtop /dev/block/userdata

/sbin/bbx umount /ss
else
# create SS loopdevs
/sbin/bbx mknod -m600 /dev/block/loop-system b 7 99
/sbin/bbx mknod -m600 /dev/block/loop-userdata b 7 98
/sbin/bbx mknod -m600 /dev/block/loop-cache b 7 97

# setup loopbacks
/sbin/bbx losetup /dev/block/loop-system /ss/safestrap/$SLOT_LOC/system.img
/sbin/bbx losetup /dev/block/loop-userdata /ss/safestrap/$SLOT_LOC/userdata.img
/sbin/bbx losetup /dev/block/loop-cache /ss/safestrap/$SLOT_LOC/cache.img

# move real partitions out of the way
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig
/sbin/bbx mv /dev/block/cache /dev/block/cacheorig

# change symlinks
/sbin/bbx ln -s /dev/block/loop-system /dev/block/system
/sbin/bbx ln -s /dev/block/loop-userdata /dev/block/userdata
/sbin/bbx ln -s /dev/block/loop-cache /dev/block/cache
fi

/sbin/bbx touch /.safestrapped
 
fixboot.sh originale dalla cm12:
#!/sbin/bbx sh

exec 1<&-
exec 2<&-
exec 1<>/dev/kmsg
exec 2>&1

# remount root as rw
/sbin/bbx mount -o remount,rw rootfs
/sbin/bbx mkdir /ss
/sbin/bbx chmod 777 /ss

# mount safestrap partition
/sbin/bbx mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 /dev/block/emstorage /ss

SLOT_LOC=$(/sbin/bbx cat /ss/safestrap/active_slot)

if [ "$SLOT_LOC" != "stock" ]; then
# create SS loopdevs
/sbin/bbx mknod -m600 /dev/block/loop-system b 7 99
/sbin/bbx mknod -m600 /dev/block/loop-userdata b 7 98
/sbin/bbx mknod -m600 /dev/block/loop-cache b 7 97

# setup loopbacks
/sbin/bbx losetup /dev/block/loop-system /ss/safestrap/$SLOT_LOC/system.img
/sbin/bbx losetup /dev/block/loop-userdata /ss/safestrap/$SLOT_LOC/userdata.img
/sbin/bbx losetup /dev/block/loop-cache /ss/safestrap/$SLOT_LOC/cache.img

# move real partitions out of the way
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig
/sbin/bbx mv /dev/block/cache /dev/block/cacheorig

# change symlinks
/sbin/bbx ln -s /dev/block/preinstall /dev/block/system
/sbin/bbx ln -s /dev/block/webtop /dev/block/userdata
/sbin/bbx ln -s /dev/block/loop-cache /dev/block/cache
else
/sbin/bbx umount /ss
fi
fixboot.sh editato per la  cm12:
#!/sbin/bbx sh

exec 1<&-
exec 2<&-
exec 1<>/dev/kmsg
exec 2>&1

# remount root as rw
/sbin/bbx mount -o remount,rw rootfs
/sbin/bbx mkdir /ss
/sbin/bbx chmod 777 /ss

# mount safestrap partition
/sbin/bbx mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 /dev/block/emstorage /ss

SLOT_LOC=$(/sbin/bbx cat /ss/safestrap/active_slot)

if [ "$SLOT_LOC" = "stock" ]; then
/sbin/bbx umount /ss
elif [ "$SLOT_LOC" = "safe" ]; then
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig

/sbin/bbx ln -s /dev/block/preinstall /dev/block/system
/sbin/bbx ln -s /dev/block/webtop /dev/block/userdata

/sbin/bbx umount /ss
else
# create SS loopdevs
/sbin/bbx mknod -m600 /dev/block/loop-system b 7 99
/sbin/bbx mknod -m600 /dev/block/loop-userdata b 7 98
/sbin/bbx mknod -m600 /dev/block/loop-cache b 7 97

# setup loopbacks
/sbin/bbx losetup /dev/block/loop-system /ss/safestrap/$SLOT_LOC/system.img
/sbin/bbx losetup /dev/block/loop-userdata /ss/safestrap/$SLOT_LOC/userdata.img
/sbin/bbx losetup /dev/block/loop-cache /ss/safestrap/$SLOT_LOC/cache.img

# move real partitions out of the way
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig
/sbin/bbx mv /dev/block/cache /dev/block/cacheorig

# change symlinks
/sbin/bbx ln -s /dev/block/loop-system /dev/block/system
/sbin/bbx ln -s /dev/block/loop-userdata /dev/block/userdata
/sbin/bbx ln -s /dev/block/loop-cache /dev/block/cache
fi
 
fixboot.sh originale dalla cm13:
#!/sbin/bbx sh

exec 1<&-
exec 2<&-
exec 1<>/dev/kmsg
exec 2>&1

# mount safestrap partition
/sbin/bbx mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 /dev/block/emstorage /ss

SLOT_LOC=$(/sbin/bbx cat /ss/safestrap/active_slot)

if [ "$SLOT_LOC" != "stock" ]; then
# setup loopbacks
/sbin/bbx losetup /dev/block/loop-system /ss/safestrap/$SLOT_LOC/system.img
/sbin/bbx losetup /dev/block/loop-userdata /ss/safestrap/$SLOT_LOC/userdata.img
/sbin/bbx losetup /dev/block/loop-cache /ss/safestrap/$SLOT_LOC/cache.img

# move real partitions out of the way
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig
/sbin/bbx mv /dev/block/cache /dev/block/cacheorig

# change symlinks
/sbin/bbx ln -s /dev/block/loop-system /dev/block/system
/sbin/bbx ln -s /dev/block/loop-userdata /dev/block/userdata
/sbin/bbx ln -s /dev/block/loop-cache /dev/block/cache
else
/sbin/bbx umount /ss
fi
fixboot.sh editato per la  cm13:
#!/sbin/bbx sh

exec 1<&-
exec 2<&-
exec 1<>/dev/kmsg
exec 2>&1

# mount safestrap partition
/sbin/bbx mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 /dev/block/emstorage /ss

SLOT_LOC=$(/sbin/bbx cat /ss/safestrap/active_slot)

if [ "$SLOT_LOC" = "stock" ]; then
/sbin/bbx umount /ss
elif [ "$SLOT_LOC" = "safe" ]; then
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig

/sbin/bbx ln -s /dev/block/preinstall /dev/block/system
/sbin/bbx ln -s /dev/block/webtop /dev/block/userdata

/sbin/bbx umount /ss
else
# setup loopbacks
/sbin/bbx losetup /dev/block/loop-system /ss/safestrap/$SLOT_LOC/system.img
/sbin/bbx losetup /dev/block/loop-userdata /ss/safestrap/$SLOT_LOC/userdata.img
/sbin/bbx losetup /dev/block/loop-cache /ss/safestrap/$SLOT_LOC/cache.img

# move real partitions out of the way
/sbin/bbx mv /dev/block/system /dev/block/systemorig
/sbin/bbx mv /dev/block/userdata /dev/block/userdataorig
/sbin/bbx mv /dev/block/cache /dev/block/cacheorig

# change symlinks
/sbin/bbx ln -s /dev/block/loop-system /dev/block/system
/sbin/bbx ln -s /dev/block/loop-userdata /dev/block/userdata
/sbin/bbx ln -s /dev/block/loop-cache /dev/block/cache
fi
 
Ovviamente le rom costruite in questo modo saranno compatibili con le vecchie versioni di Safestrap e con questa nuova versione.

Chiunque può costruirsi da solo una ramdisk per usare una rom nel Safe Rom slot seguendo questi passaggi da superutente:
1) estrarre il file ramdisk.img con questo comando:

gzip  -dc ../ramdisk.img | cpio -i

2) editare il file fixboot.sh
3) ricompilare il nuovo file ramdisk.img con questo comando:

find . | cpio -o -H newc | gzip > ../ramdisk.img

Dalla cm12 nel ramdisk.img è presente anche il file safestrapped.cpio prima della reale ramdisk quindi occorre dividerli con un editor esadecimale (1F 8B 08) poi è possibile estrarre la ramdisk, editarla, ricompilarla e finalmente ricreare il file ramdisk.img riconcatenando con l'editor esadecimale il file safestrapped.cpio con la ramdisk modificata.

/webtop, la partizione che è stata usata come /data nel Safe Rom slot, è originariamente formattata come ext4 e questo può causare qualche problema con qualche rom o kernel.
Nel caso in cui dopo il primo avvio si dovesse avere il messaggio Encryption Unsuccessful allora occorre semplicemente formattare /data nel Safe Rom slot con un file system differente. Per esempio installando la rom stock nel Safe Rom slot non ci sarà alcun problema con il fs ext4 ma installando la cm11 occorre formattare /data come ext3 altrimenti si avrà il messaggio Encryption Unsuccessful.

Se Safestrap dovesse vedere 0 MB in System (o Data) nel Safe Rom slot è possibile provare a risolvere il problema in questo modo:

  • entrare in safestrap
  • abilitare il Safe Rom slot
  • dal menù wipe: Advanced wipe -> ✓System (o ✓Data) -> Repair or Change File System -> Repair

Il solo problema presente in questa recovery è lo stesso problema presente nella versione standard di Safestrap: se si crea un nuovo slot virtuale e poi si tenta di attivare lo Stock Rom slot (ed in questa versione anche il Safe Rom slot) non sarà possibile montare le partizioni fisiche ma se si riavvia la recovery dopo aver creato il nuovo slot virtuale non ci sarà più alcun problema.

Section: 

Commenti

Aggiungi un commento