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 è 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

2 comments

I will reply myself after lot of experiment
As I did not know what have happened with my droid - second hand buy - I got it already with 4.1.2 Verizon stock and at the begining I was doing a lot of experiments with flashing, I decided go back . I took the rom VRZ_T894_6.5.1-16~219_1FF_01.xml.zip and tried to flash it using RSD Lite for linux - it required the linux-mfastboot which support some multi-part flashing - otherwise it was limited to 1GB . Even if the flashing failed for some partitions (probably bad enciphering key used) It flashed the webtop content and preloaded OK. Than I could reflash the VRZ_XT894_9.8.2O-72_VZW-18-8_1FF.xml.zip
which worked OK even for system and directory structures (but apparently it does not touch the webtop )
So I have had correct partitions installed stock rom and used motofail to root it, installed safestrap 3.75 with modified partitions and finally I have had it exactly as described above.

I am very desperate trying to enable the safe rom on my XT894. I have been playing with my DROID for several years (started at Safestrap 3.65 on stock }, running several CM from 10 to 14.1 Lineage but when the SS fro unused partitions appeared I was never able to get tjis working - even the Stargo's version with boot menu - nor this from BP tools. Always wgen switching to the saferom (or alt slot webtop, preinstall) I see the size of system 0 kB. And install warns me theres no system. As I was using heavilly the other slots with multiple ROMS, I decided yesterday the ultimate solution. Full flash to the stock rom.
Using VRZ_XT894_9.8.2O-7~W-18-8_CFC.xml.zip I started from the scratch (RSDLite on Linux, Saferoot on linux) , install safestrap 3.75 for unused part, install it).
But still when switching to the saferom slot it shows 0 byte for system and system may not be mounted from ss menu. I suppose I have formatted almost all partitions (also data etc). The system in saferom should be on preinstall. But it was for sure flashed as well.
What should I check - how should I format preinstall to be recognized by safestrap . Should I flash with some older ROMS - say 2.3.6 ? May ther ebe some remnants of my experients still presents after flash stock ?

In all other slots I was able to do what I wanted including stock (I have it now on CM11 from April 2017)

BTW - how the flasher (fastboot) knows what partition is preinstall or what is system ? where is the mapping from /dev/block/mmcblk1pxx to those names fastboot uses ?
No clue in xml ..

Best regards

Petr

Aggiungi un commento