De HTC rooten

Op mijn HTC Desire heb ik meer en meer apps geïnstalleerd ... en liep daarmee tegen de grenzen van het interne geheugen aan. Het is mogelijk om dit op te lossen door een deel van je SD-kaart te gebruiken als extensie op het interne geheugen, maar hiervoor moet je je toestel 'rooten'. Dit is het verkrijgen van 'root'-rechten, dit zijn beheerdersrechten waarmee je meer kan dan met de normale gebruikersrechten op de HTC. Voorbeelden hiervan zijn de geheugenindeling veranderen, speciale apps installeren, screen capture doen, proxy gebruiken, of zelfs andere versies van Android (custom ROMS) installeren.

Ps: alle besproken handelingen zijn volledig op eigen risico! Werk in uitvoering; en heb zelf alleen nog maar optie 1 gedaan.

Van een collega kreeg ik onderstaand recept:

Hi Kees, hieronder wat info over het rooten van je HTC Desire.

Ten eerste kun je het beste de openingspost van dit topic doorlezen. Hier wordt o.a. het volgende uitgelegd:

  • Het verschil tussen alleen rooten en S-off. Kort gezegd komt het er op neer dat je in het eerste geval root access krijgt, maar een aantal dingen nog niet mogelijk zijn. Zo is de 'systeempartitie' read-only en kun je daar dus niets in wijzigen. Ook kun je geen andere HBOOT (partitie-indeling intern geheugen) installeren. Met S-off (security off, zie 'What is S-off') heb je volledig toegang tot alle delen van je telefoon.
  • De verschillende manieren om data naar SD kaart te verplaatsen (A2SD, A2SD+, D2EXT, Data++).
  • "Nandroid" backups: dit zijn volledige backups van de ROM, incl. alle data, apps, contacts, settings etc. Zo'n backup kan vanuit het zogenaamde recovery menu worden gemaakt of teruggezet (meer hierover later).

Woordenlijst

Een woordenlijst/verklaring van enkele gebruikte afkortingen vind je op de Cyanogenmod Terminology pagina (Engels)

Zoals al eerder aangegeven heb je grofweg twee opties: 1) alleen rooten en data naar SD kaart verplaatsen; 2) all-the-way gaan, een uitgebreidere/nieuwere ROM kiezen en evt. een andere HBOOT (partitie-indeling).

Optie 1: Alleen Rooten

Je huidige Froyo ROM (Android 2.2) kan je vervangen door een geroote versie van dezelfde ROM, waarna je dan A2SD (apps to SD card) kunt installeren. Hiermee is in ieder geval je ruimtegebrek opgelost. Je hebt dan slechts root access nodig en een pre-rooted ROM (S-off is niet nodig).

[Kees] Ik heb deze (simpelste) optie gekozen, omdat voor mij alleen de grootte van het interne geheugen van belang was; extra features heb ik op het moment nog niet nodig. Zal vast nog wel eens komen (zoals ook bij mijn Odys tablet)... Wel heb ik de iets nieuwere Gingerbread ROM (Android 2.3) gekozen.

Voorbereiding

  1. Download de pre-rooted stock ROM image (Froyo 2.2, of als je dat zou willen de Gingerbread 2.3 versie) en sla deze op je SD-kaart op:
    • Froyo 2.2: Download de "2.29.405.5 ROM" en de "A2SD+ mod",
    • Gingerbread 2.3: Download de "3.14.405.1 INIT.D ROM" zip file (3.14.405.1-signed.zip, 136 MB, md5: de99e70682971b183ed65abc6e2fc62d) plus de bijhorende "5.17.05.23 radio ROM" (32.56.00.32U_5.17.05.23-signed.zip, 11MB, 738a94c891a6a10082c8bf9f5c4884ba), en de file "add_a2sd-gb-1-signed.zip" en evt alignment-ext4.zip
  2. [Windows only] Verwijder de HTC tools van je PC.
    • Alternatief (wat ik gedaan heb) is dat je er voor zorgt dat de tools bij het booten van je PC niet automatisch opstarten en dus niet in de weg zitten bij het rooten)
  3. [Windows only] Installeer de fastboot driver op je PC (download), zodat de telefoon later door je PC herkend wordt als deze in het zogenaamde fastboot menu zit.

SD-kaart formatteren

Heb een 4 GByte SD-kaart, die ik in twee partities heb gesplitst (vanaf mijn Ubuntu Linux-computer waar ik het SD-kaartje in heb gestoken). De kaart is bij mij zichtbaar als /dev/sdf en dus niet als de genoemde /dev/mmcblk0 (da's in de Android omgeving).

Voor het formatteren van de SD_kaart had ik eerst het recept op deze SDcard formatting HOWTO gebruikt, maar dat leek toch niet helemaal te werken... Dan maar gewoon met gparted. Daarna op de HTC het alignment-ext4.zip script geïnstalleerd om de alignment optimaal te zetten, en er op de PC weer een ext3 van gemaakt (deze ROM ondersteunt nog geen ext4). Kan vast handiger...

2.5GB is nu nog steeds als SD-kaart/USB memory-stick zichtbaar (FAT32 formatted), de resterende 1 GB is nu een ext3 partitie 'sd-ext' voor extra geheugen voor Android apps.

Van te voren had ik alle data even naar de PC gekopieerd (ook de verborgen/hidden files!), daarna de belangrijke data teruggezet: alles is er weer!

Het echte werk

  1. Root je telefoon m.b.v. de tool "unrevoked" (download, uitleg). Run unrevoked, deze geeft je tijdelijke root toegang in je huidige ROM en installeert ook een andere recovery image (ClockworkMod) die je later de mogelijkheid geeft om andere ROMS te installeren
    • [Kees] Let op: op Ubuntu 64-bit zijn er soms problemen met unrevoked, en zie ook deze link
    • [Kees] En helaas, mijn HTC wilde niet. Eerst de melding "ERROR: n = -1, errno = 19 (No such device)", en daarna "Error: failed to get root. Is your firmware too new?" Had ik toch pas niet die 2.29.405.14 update binnen moeten halen. Dat houd in dat ik ofwel een oude ROM met versie 405.5 terug moet zetten met een RUU (al mijn data weg); ofwel aan de slag moet met Revolutionary. Eerst maar eens de RUU route (ook handig om te weten hoe ik terug kan naar de officiële ROM), zie Terug naar vroeger... Daarna werkte unrevoked prima.
  2. Maak (nu je root access hebt) een backup van al je programma's, instellingen, SMSjes, contacten, etc. naar de SD kaart. Ik gebruik hiervoor My Backup pro, maar Titanium Backup of een ander programma volstaat vast ook.
    • [Kees] Die stap heb ik (door de RUU route) dus even gemist... Vond ik overigens helemaal niet erg; zo een keer per jaar grote schoonmaak kan helemaal geen kwaad (de echt belangrijke data heb ik uiteraard gebackup'd, en ik weet wel welke programma's ik heb geïnstalleerd, zie mijn HTC pagina).
  3. Gebruik een of ander partitioneringsprogramma (gparted?) om de huidige FAT32 partitie op je SD kaart te verkleinen en maak daarna een EXT3 partitie aan achter de FAT32 partitie. Alternatief is om alles van je SD kaart even naar je PC te kopiëren en daarna de bestaande partities weg te gooien en achtereenvolgens een FAT32 en een EXT3 partitie aan te maken.
  4. Schakel je telefoon uit
  5. Schakel je telefoon weer aan en druk meteen de volume down button in. Je komt dan in het fastboot menu uit. Met de volumetoetsen kun je dan door de opties in het menu lopen, selecteer in het menu de optie "recovery". Met de power button bevestig je de optie. Je komt vervolgens in het recover menu (ClockworkMod). Hier heb je meerdere opties. Wederom kun je hier met de volumetoetsen (of met de trackball) doorheen lopen. Bevestigen doe je hier door op de trackball te drukken (en uit een submenu kom je teug in het hoofdmenu met de back button). Kies achtereenvolgens de opties:
    • Kies "backup and restore" -> "backup": hiermee maak je een volledige (nandroid) backup van je hele ROM incl. alle apps en data. Deze backup komt op je SD kaart (FAT32 partitie) te staan. Terugzetten kan later vanuit hetzelfde menu.
    • Vervolgens wis je alles m.b.v. de opties "wipe data/factory reset", "wipe cache partition" en "advanced" -> "wipe dalvik cache"
    • Je kunt een zip file (die een ROM image of een bepaalde mod bevat) installeren m.b.v. de optie "install zip from sdcard". Je krijgt dan een browser te zien, wederom gebruik je de volume button, de trackball en de back button voor de navigatie. Door de zip te selecteren (druk op de trackball) installeer je deze.
      • Installeer optioneel de alignment mod (zie attachment, ik weet niet meer waar deze vandaan komt). Dit doet twee dingen: het verandert de ext3 partitie op je SD kaart in een ext4 partitie zonder journalling; tevens zorgt het ervoor dat de sectoren in je partitie netjes aligned zijn met de blocks van de Flash kaart. Al met al levert het een beetje extra performance op.
    • Installeer achtereenvolgens de nieuwe ROM image en de A2SD mod
    • [Kees] Ik heb voor de Gingerbread ROM gekozen (zie bovenaan); heb de eerder genoemde zip file (plus de radio zip en de a2sd zip) op de sdcard in de normale FAT partitie gezet; en vanuit recovery eerst de Gingerbread ROM, toen de radio ROM, en toen de a2sd ROM geïnstalleerd.
  6. Na installatie reboot je de telefoon (optie "reboot system now" in het recovery menu)
  7. De nieuwe ROM boot, dit kan enige tijd duren (gemiddeld zo'n 10 min)
    • [Kees] Eerste keer booten duurt wel even (sowieso voor alles de tijd nemen). Checken (Settings -> About phone -> Software information): ja, Android version 2.3.3 (in plaats van 2.2.2) plus nieuwe radio!!!
  8. Zet als de ROM geboot is, je backup van je data, apps etc terug
    • [Kees] Om de een of andere reden lukte het allemaal niet in een keer, in de zit dat de ext3-partitie niet direct zichtbaar leek. Maar, ondertussen zie ik (in Titanium Backup Root) toch dat er wel degelijk effect is: ik heb de meeste apps weer teruggezet; en toch is er nog 100 Mbyte intern geheugen over, terwijl de free space op de SD card ext3 partitie van 1024 Mbyte naar 860 Mbyte is gegaan (alleen Angry Birds en Angry Birds seasonal nemen samen al meer dan 40 Mbyte).

A2SD, wat doet dat?

[Kees] Enkele details bekeken op de PC met behulp van QuickSSHd, makkelijker dan op zo'n klein schermpje in Android Terminal Emulator werken (kan wel, en met su - kan je als root werken). Met mount is nu te zien dat de sd-ext partitie is gemount (met wat speciale instellingen, om het schrijven naar de SD-kaart te minimaliseren):

/dev/block/mmcblk0p2 /sd-ext ext3 rw,noatime,nodiratime,errors=continue,barrier=0,data=writeback 0 0

En als ik een ls -al /data doe zie ik onder andere de redirects naar de sd-ext partitie zoals aangemaakt door a2sd. De data hierin zijn door a2sd gekopieerd van /data naar /sd-ext, waarna er door a2sd links in /data naar deze gekopieerde mappen is gemaakt. Hiermee denkt Android (en elk Linux systeem) dat onderstaande mappen gewoon in /data in intern geheugen staan, maar in werkelijkheid staan deze dus op je sd-kaart. Mocht je je overigens afvragen wat het a2sd script nu precies doet; je kan hem vinden als /etc/init.d/04apps2sd.

/data/app -> /sd-ext/app
/data/app-private -> /sd-ext/app-private
/data/dalvik-cache -> /sd-ext/dalvik-cache

New! Vandaag (Feb 2014): app 73 MByte, dalvik-cache 90 MByte, en app-private 4 MB; dit heb je dus met a2sd uitgespaard. /data/data wordt niet verplaatst, en is bij mij (na ook onderstaande truk) nu 90 MByte (check met commando du -d 1 /data/data); heb ik zo'n 50 Mbyte vrij.

Je kunt (op eigen risico) handmatig mappen verplaatsen naar de ext3 partitie, bijvoorbeeld mappen in /data die niet door a2sd meegenomen worden. Zo gebruik ik TuneIn Radio als radioplayer, maar deze gebruikt zo'n 37 MByte... en dat in intern geheugen. Dus verplaatst naar de /sd-ext folder in een voor dit doel gemaakte folder handcopied, op de onderstaande manier (en daarna werkt TuneIn gewoon :-) ).

# Vanuit QuickSSHd; ga in Android Terminal Emulator eerst naar root mode met: su -
mkdir /sd-ext/handcopied
chmod 777 /sd-ext/handcopied
mv /data/data/tunein.player /sd-ext/handcopied
ln -s /sd-ext/handcopied/tunein.player /data/data/tunein.player
ls -al /data/data/tunein.player
# lrwxrwxrwx    1 0  0    32 Feb 16 15:50 tunein.player -> /sd-ext/handcopied/tunein.player

Hetzelfde gedaan voor NU.nl (10 MB) en Dropbox (7 MB). Wel zijn de apps vanaf SD-kaart flink trager, Skype heb ik niet overgezet uit angst voor verlies in spraakkwaliteit (toch eens proberen?).

Optie 2: S-off

Maak je telefoon S-off en kies een willekeurige ROM (bijv. uit de lijst van dit topic). Zelf gebruik ik de Runnymede ROM (in rood de stappen die anders zijn t.o.v. optie 1).

[Kees] Ik heb deze optie dus niet zelf uitgetest!!!!!

Voorbereiding

  1. Download een ROM die je leuk lijkt, bijvoorbeeld uit de lijst van dit topic. Zoals gezegd gebruik ik zelf de Runnymede ROM.
  2. Verwijder de HTC tools van je PC.
    • Alternatief (wat ik gedaan heb) is dat je er voor zorgt dat de tools bij het booten van je PC niet automatisch opstarten en dus niet in de weg zitten).
  3. Installeer de fastboot driver op je PC (download), zodat de telefoon later door je PC herkend wordt als deze in het zogenaamde fastboot menu zit.

Het echte werk

  1. Root je telefoon m.b.v. de tool "revolutionary" (download). Run revolutionary en genereer op de web sit evan revolutionary een key. De tool geeft je volledige toegang tot je telefoon en installeert ook een andere recovery image (ClockworkMod) die je later de mogelijkheid geeft om andere ROMS te installeren. Iets meer uitleg over de procedure vind je hier.
  2. Maak nu je root access hebt een backup van al je programma's, instellingen, SMSjes, contacten, etc. naar de SD kaart. Ik gebruik hiervoor My Backup pro, maar Titanium Backup of een ander programma volstaat vast ook.
  3. Gebruik een of ander partitioneringsprogramma (gparted?) om de huidige FAT32 partitie op je SD kaart te verkleinen en maak daarna een EXT3 partitie aan achter de FAT32 partitie. Alternatief is om alles van je SD kaart even naar je PC te kopiëren en daarna de bestaande partities weg te gooien en achtereenvolgens een FAT32 en een EXT3 partitie aan te maken.
  4. Schakel je telefoon uit
  5. Schakel je telefoon weer aan en druk meteen de volume down button in. Je komt dan in het fastboot menu uit. Met de volumetoetsen kun je dan door de opties in het menu lopen, selecteer in het menu de optie "recovery". Met de power button bevestig je de optie. Je komt vervolgens in het recover menu (ClockworkMod). Hier heb je meerdere opties. Wederom kun je hier met de volumetoetsen (of met de trackball) doorheen lopen. Bevestigen doe je hier door op de trackball te drukken (en uit een submenu kom je teug in het hoofdmenu met de back button). Kies achtereenvolgens de opties:
    • Kies "backup and restore" -> "backup": hiermee maak je een volledige backup van je hele ROM incl. alle apps en data. Deze backup komt op je SD kaart (FAT32 partitie) te staan. Terugzetten kan later vanuit hetzelfde menu.
    • Vervolgens wis je alles m.b.v. de opties "wipe data/factory reset", "wipe cache partition" en "advanced" -> "wipe dalvik cache"
    • Installeer optioneel de alignment mod (zie attachment, ik weet niet meer waar deze vandaan komt). Dit doet twee dingen: het verandert de ext3 partitie op je SD kaart in een ext4 partitie zonder journalling; tevens zorgt het ervoor dat de sectoren in je partitie netjes aligned zijn met de blocks van de Flash kaart. Al met al levert het een beetje extra performance op.
      • Je kunt een zip file (die een ROM image of een bepaalde mod bevat) installeren m.b.v. de optie "install zip from sdcard". Je krijgt dan een browser te zien, wederom gebruik je de volume button, de trackball en de back button voor de navigatie. Door de zip te selecteren (druk op de trackball) installeer je deze.
    • Installeer indien gewenst een andere HBOOT image.
      • Let op: je moet een HBOOT image gebruiken die door de gekozen ROM ondersteund wordt. Meestal is dit de stock HBOOT (dan hoef je niets te veranderen), maar vaak ook de CM7r2, die je hier vindt. Sommige ROMs ondersteunen beiden, je moet dan alleen wel de juiste ROM image downloaden.
    • Installeer de nieuwe ROM image en eventuele bijbehorende mods
  6. Na installatie reboot je de telefoon (optie "reboot system now" in het recovery menu)
  7. De nieuwe ROM boot, dit kan enige tijd duren (gemiddeld zo'n 10 min)
  8. Zet als de ROM geboot is je backup van je data, apps etc terug.

Terug naar vroeger...

Mocht je terug willen naar de oude situatie: hier vind je de originele HTC ROMS voor de Desire. Deze ROMs worden vanaf de PC geïnstalleerd op je telefoon, middels de zogenaamde RUU (ROM upgrade utility); Als je optie 2 gekozen hebt, moet je waarschijnlijk wel eerst even de originele HBOOT image en de geroote stock Froyo 2.2 ROM (van optie 1) installeren vanuit het recovery menu, anders herkent de RUU tool je telefoon niet als een HTC Desire.

[Kees] Ik werk normaal met Ubuntu/Linux, maar hiervoor ben ik even naar Windows teruggegaan, was de makkelijkste route. Alle andere stappen heb ik vanuit (32-bit!) Ubuntu gedaan, geen gedoe met gammele USB drivers en conflicten in Windows.

Tenslotte

Het is ook handig om de ADB tool te installeren op je PC. Je vindt deze in de Android SDK. Alternatief is dat je de tool los downloadt (je kunt deze als je goed zoekt wel vinden), de tool werkt namelijk ook standalone (zonder SDK). Met deze tool kun je bijvoorbeeld vanaf de PC de systeemlog ("adb logcat") bekijken van je telefoon terwijl deze boot of gewoon draait.

Ik ben vast nog het een en ander vergeten, maar je hebt nu alvast wat leesvoer :-)

Groeten, Timo