Jump to content

[CT705] : A taaaable ! Cuisinez votre propre CUSTOM ROM à partir de votre STOCK ROM originale.


x67656f
 Share

Recommended Posts

Bonjour à toutes et à tous !

Ce tuto va vous détailler ma recette pour extraire la ROM originale de la tablette Carrefour CT705, la personaliser, et la reflasher.

La tablette étant relativement récente et n'ayant rien trouvé sur le sujet je partage le résultat de mes expérimentations.

Ces manipulations sont très faciles à réaliser dès lors que l'on a les bons outils.

Mais avant, comme je suis nouveau sur le forum, je commencerai par une brève présentation.

Je suis tout nouveau dans l'univers Android. Mon premier contact avec, s'est fait avec la tablette CT705 de Carrefour achetée il y a quelques jours, décidé enfin à prendre le train "Android" en marche.

Pourquoi cette tablette en particulier ? Simplement séduit par le prix (89 €), et surtout le format que je trouve idéal pour le transport et la prise en main (7" 16/9).

L'usage que j'en ferais sera plus pour la bidouille et l'apprentissage d'Android en la considérant comme une plateforme de développement vraiment pas chère, que pour un usage plus conventionnel (surf, mails, jeux, vidéo). Car il faut bien le reconnaitre, cette tablette montre vite ses limites (blocages lors de sessions de surf, écran non IPS, faible résolution ...)

Bien, commençons par le menu :

  1. prérequis;
  2. préparation de l'environnement de travail;
  3. extraction du contenu de la mémoire flash;
  4. exploitation du dump, modification de la ROM;
  5. création du fichier update.img;
  6. reflashage de la nouvelle ROM personnalisée.
  7. pour aller plus loin ...

Et pour le dessert, mais ceci sera l'objet d'un autre tuto, modification du boot pour permettre le dual boot (plus rapide et plus pratique pour tester ses ROM).

1 -Les prérequis :

  • une tablette CT705 déjà rootée, du moins pour la partie extraction du dump (voir par ailleurs comment la rooter, car ce n'est pas le sujet ici);
  • un PC sous GNU/Linux (personnelement j'utilise Debian, mais la recette devrait marcher également sur les autres dirstributions);
  • une carte microSD d'au moins 4Go
  • et finalement les bons outils logiciels :)

On trouve sur le net quelques outils (officiels?) pour mettre à jour les tablettes de la plateforme RockChip (dont fait partie notamment la CT705).

Ces outils (pour Windows) sont composés d'un exécutable, d'un fichier img, et de drivers USB rockchip.

Pour ma part il m'a été impossible d'activer l'installation des drivers USB, l'ordinateur ne détectant pas le périphérique USB rockchip (cette tablette ne possède pas de mode de mise à jour par USB ??)

Ce désagrément n'est pas réellement un obstacle car ces outils ne permettent pas (sauf erreur de ma part) de dumper la ROM.

La solution se trouve plutôt sur github où l'on trouve des logiciels opensource pour manipuler les fichiers img rockchip rk2918.

Les fichiers img sont des containers encapsulant un ensemble de fichiers (soit sous format standard de système de fichiers tel fat ou ext3, soit pas).

Petite note amusante, les img peuvent aussi contenir d'autres img (qui contiennent aussi d'autres img), qu'il faudra manipuler avec d'autres outils que ceux utilisés pour l'img parent.

Dans tous les cas les fichiers img possèdent un contrôle d'intégrité qu'il convient de vérifier|générer, d'ou la nécessité d'utiliser des logiciels biens spécifiques pour 'packager/depackager' ces fichiers.

La solution logicielle que j'ai choisi d'utiliser est RK29Kitchen que l'on trouvera aisément sur github.

2 - Préparation de l'environnement :

  • récupérer le zip de RK29Kitchen sur github;
  • le déziper;
  • modifier le Makefile du répertoire src :

Pour cela :

  • supprimer -lusb-1.0 de la variable LDLIBS,
  • supprimer rkflashtool et rkflashtool29 de la variable TARGETS

explications : mon but est de copier le dump de la flash vers la carte microSD, puis de modifier la ROM sur le PC, puis de recombiner un fichier update.img que je recopie sur la microSD.

A l'insertion de la carte dans la tablette un popup va me demander si je veux reflasher la tablette. En aucun cas je n'utilise la connexion USB pour extraire ou reflasher.

  • lancez la compilation (il faut bien sûr posséder la librairie openssl) : make all

On se retrouve avec une collection de binaires : abootimg afptool from565 img_maker img_unpack mkkrnlimg pnm2clut224 rkcrc to565

Pour manipuler la ROM, seul nous interessera afptool.

Pour modifier le boot et/ou le recovery, seul nous interressera abootimg

  • pour ces expérimentations voici l'arborescence utilisée (il n'est pas nécessaire de faire un make install) :

/tmp/ct705/bin : abootimg afptool from565 img_maker img_unpack mkkrnlimg pnm2clut224 rkcrc to565

/tmp/ct705/dumps : (vide pour l'instant)

/tmp/ct705/cooking : (vide pour l'instant)

/tmp/ct705/mountpoint : (vide pour l'instant)

3 - Extraction du contenu de la mémoire flash :

  • se logger sur la tablette en root (soit via adb, soit sur la tablette avec un émulateur de terminal, soit depuis une console PC via ssh/wifi (l'option que j'utilise))
  • obtention des informations sur le partitionnement de la flash :

root@android:/ # cat /proc/mtd
dev: size erasesize name
mtd0: 00400000 00004000 "misc"
mtd1: 00800000 00004000 "kernel"
mtd2: 01000000 00004000 "boot"
mtd3: 01000000 00004000 "recovery"
mtd4: 1e000000 00004000 "backup"
mtd5: 07400000 00004000 "cache"
mtd6: 40000000 00004000 "userdata"
mtd7: 00400000 00004000 "kpanic"
mtd8: 1cc00000 00004000 "system"
mtd9: 69400000 00004000 "user"

  • copie de chaque partition mémoire dans la carte microSD :

root@android:/ # cat /dev/mtd/mtd0 > /mnt/external_sd/block0_misc.bin
root@android:/ # cat /dev/mtd/mtd1 > /mnt/external_sd/block1_kernel.bin
root@android:/ # cat /dev/mtd/mtd2 > /mnt/external_sd/block2_boot.bin
root@android:/ # cat /dev/mtd/mtd3 > /mnt/external_sd/block3_recovery.bin
root@android:/ # cat /dev/mtd/mtd4 > /mnt/external_sd/block4_backup.bin
root@android:/ # cat /dev/mtd/mtd5 > /mnt/external_sd/block5_cache.bin
root@android:/ # cat /dev/mtd/mtd6 > /mnt/external_sd/block6_userdata.bin
root@android:/ # cat /dev/mtd/mtd7 > /mnt/external_sd/block7_kpanic.bin
root@android:/ # cat /dev/mtd/mtd8 > /mnt/external_sd/block8_system.bin
root@android:/ # cat /dev/mtd/mtd9 > /mnt/external_sd/block9_user.bin

  • pour se faire une idée de la taille des fichiers dumpés :

root@android:/ # ls -l /mnt/external_sd
d---rwxr-x system media_rw		 2011-05-06 12:28 LOST.DIR
----rwxr-x system media_rw 4194304 2012-08-11 19:04 block0_misc.bin
----rwxr-x system media_rw 8388608 2012-08-11 19:05 block1_kernel.bin
----rwxr-x system media_rw 16777216 2012-08-11 19:05 block2_boot.bin
----rwxr-x system media_rw 16777216 2012-08-11 19:05 block3_recovery.bin
----rwxr-x system media_rw 503316480 2012-08-11 19:07 block4_backup.bin
----rwxr-x system media_rw 121634816 2012-08-11 19:08 block5_cache.bin
----rwxr-x system media_rw 1073741824 2012-08-11 19:12 block6_userdata.bin
----rwxr-x system media_rw 4194304 2012-08-11 19:13 block7_kpanic.bin
----rwxr-x system media_rw 482344960 2012-08-11 19:15 block8_system.bin
----rwxr-x system media_rw 1765801984 2012-08-11 19:21 block9_user.bin

  • pour avoir plus d'informations sur les systèmes de fichiers :

root@android:/ # mount
[...]
/dev/block/mtdblock8 /system ext3 ro,noatime,nodiratime,barrier=0,data=ordered 0 0
/dev/block/mtdblock6 /data ext3 rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=0,data=ordered 0 0
/dev/block/mtdblock5 /cache ext3 rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=0,data=ordered 0 0
/dev/block/vold/179:1 /mnt/external_sd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/31:9 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
[...]

Nous pouvons extraire la carte (ou activer l'USB MASS STORAGE) et recopier les fichiers dumpés blockxxx.bin sur le PC (dans /tmp/ct705/dumps)

Et voilà !

Nous avons fait un backup complet du contenu de la tablette (partition de restauration usine inclue). Facile non ? Et ce, simplement avec la commande cat

4 - Exploitation du dump, modification de la ROM :

Quelques remarques concernant les fichiers dumpés :

  • contrairement à ce que l'on pourrait penser, block1_kernel.bin ne contient pas le kernel (celui-ci est présent dans block2_boot.bin et dans block3_recovery.bin);
  • block4_backup.bin contient l'image de tout le système, celle-là même qui sera installée lors de la restauration d'usine.

Elle contient :

  • le contenu de block2_boot.bin original,
  • le contenu de block0_misc.bin original,
  • le contenu de block3_recovery.bin original,
  • et le contenu de block8_system.bin original.

Comment je le sais ? d'abord en explorant le fichier avec un éditeur hexadécimal, ensuite, en utilisant afptool de RK29kitchen :)

Evidemment, c'est ce fichier que nous allons cuisiner pour personnaliser notre ROM. Lors du reflashage du futur update.img, les partitions en flash : boot, misc, recovery et system seront écrasées, et la partition backup sera remplacée.

  • comme on peut s'en douter, block8_system.bin contient le répertoire /system actuel de la tablette (format ext3 cf. mount précédent).

On peut l'explorer en faisant localement sur le PC :

# mount -o loop -t ext3 /tmp/ct705/dumps/block8_system.bin /tmp/ct705/mountpoint/

  • de même on peut visualiser le contenu de /data actuellement présent sur la tablette en explorant sur le PC le fichier block6_userdata.bin (après avoir démonté mountpoint) :

# mount -o loop -t ext3 /tmp/ct705/dumps/block6_userdata.bin /tmp/ct705/mountpoint/

  • et finalement on peut également visualiser le contenu de /mnt/sdcard actuellement présent sur la tablette en explorant sur le PC le fichier block9_user.bin (après avoir démonté mountpoint) :

# mount -o loop -t vfat /tmp/ct705/dumps/block9_user.bin /tmp/ct705/mountpoint/

Entrons dans le vif du sujet, en éclatant la STOCK ROM (originale) : block4_backup.bin

La manipulation est très simple avec afptool :

USAGE:

afptool <-pack|-unpack> <Src> <Dest>

Example:

afptool -pack xxx update.img Pack files

afptool -unpack update.img xxx unpack files

 $ /tmp/ct705/bin/afptool -unpack /tmp/ct705/dumps/block4_backup.bin /tmp/ct705/cooking

check file...OK
------- UNPACK -------
package-file 0x00000800	 0x0000021C
RK29xxLoader(L)_V2.14.bin	 0x00001000	 0x0002512E
parameter	 0x00026800	 0x0000026E
Image/misc.img 0x00027000	 0x0000C000
Image/boot.img 0x00033000	 0x007A4000
Image/recovery.img	 0x007D7000	 0x00940000
Image/system.img	 0x01117000	 0x0EDEDC00
SELF 0x00000000	 0x0FF06004
Skip SELF file.
update-script 0x0FF05000	 0x000003A5
recover-script 0x0FF05800	 0x0000010A
UnPack OK!

On obtient les fichiers misc.img, boot.img, recovery.img, system.img originaux

Cuisinons (légèrement, à petit feu) notre STOCK ROM, en enlevant simplement le bloatware "Carrefour.apk". On pourrait s'amuser à installer le play store, ou su et SuperUser...

  • Pour cela, il nous faut monter le fichier Image/system.img (qui est en ext3) après avoir éventuellement démonté mountpoint

# mount -o loop -t ext3 /tmp/ct705/cooking/Image/system.img /tmp/ct705/mountpoint/

  • Effaçons le fichier /tmp/ct705/mountpoint/app/Carrefour.apk (le fichier Image/system.bin en sera automatiquement modifié)
  • Démontons mountpoint

Nous avons désormais une arborescence de notre CUSTOM ROM prête à être empaqueté dans un fichier update.img

5 - Création du fichier update.img :

La manipulation est très simple avec la commande :

 $ /tmp/ct705/bin/afptool -pack /tmp/ct705/cooking/ update.img

------ PACKAGE ------
Add file: cooking//package-file
Add file: cooking//RK29xxLoader(L)_V2.14.bin
Add file: cooking//parameter
Add file: cooking//Image/misc.img
Add file: cooking//Image/boot.img
Add file: cooking//Image/recovery.img
Add file: cooking//Image/system.img
Add file: cooking//update-script
Add file: cooking//recover-script
Add CRC...
------ OK ------
Pack OK!

Et voilà ! Nous avons désormais notre homemade CUSTOM ROM update.img cuîte à point.

6 - Reflashage de la nouvelle ROM personalisée :

Pour mettre à jour la tablette avec la nouvelle ROM :

  • copier le fichier update.img sur la carte microSD :

- via un lecteur de cartes,

- ou via l'USB en activant la mémoire de stockage USB

  • après avoir inséré la carte, ou après avoir désactivé la mémoire de stockage USB, un popup apparait nous demandant si l'on veut mettre à jour la tablette avec le fichier img détecté, répondre Yes :)
  • la tablette redémarre et reflashe le boot, le recovery, system , et même backup (donc gardez bien au chaud votre STOCK ROM)

Il est également possible de flasher le fichier update.img en passant par le mode recovery :

  • éteindre la tablette,
  • appuyer sur volume - et ON pendant quelques secondes, bugdroid (le droïde vert) apparait,
  • appuyer sur le volume + et ON (éventuellement plusieurs fois)
  • un menu apparait, choisir update rkimage from external storage

Après le reboot :

Le bloatware Carrefour a disparu ... servez bien chaud et savourez :)

7 - Pour aller plus loin :

J'ai décris ici une méthode pour faire un backup de sa stock ROM, pour la modifier, et la réinjecter.

Une utilisation logique de ce procédé est de créer une custom ROM rootée pour rooter facilement (avec une simple carte microSD) d'autres tablettes CT705.

On peut également modifier la façon dont démarre la tablette en modifiant les scripts d'init ou l'initrd, dans boot et/ou dans recovery.

Cela permet par exemple de modifier le splash screen du démarrage ("Touch Tablet"). B)

Cela permet par exemple de personnaliser les images (bugdroid) dans le mode recovery.

Cela permet par exemple de modifier le boot pour détecter la présence d'un fichier particulier sur la carte microSD au démarrage,

si le fichier magique est présent, montage de /system de la carte, sinon, montage de /system depuis le mtdblock8 ... bref un dual boot !

En conclusion, grâce à ces manipulations, la CT705 se révèle être une très bonne plateforme d'expérimentations, on peut donc réellement faire tout ce que l'on veut comme bidouilles.

Pour finir ce tuto, en bonus, voici comment cuisiner le boot.img, ou le recovery.img :

  • extraction du boot.img :

$ mkdir /tmp/ct705/boot
$ cd /tmp/ct705/boot && /tmp/ct705/bin/abootimg -x /tmp/ct705/cooking/Image/boot.img

writing boot image config in bootimg.cfg
extracting kernel in zImage
extracting ramdisk in initrd.img

Nous pouvons également extraire l'initrd.img qui est classiquement une archive cpio gzippée ( $ gzip -dc initrd.img | cpio -id )

Après manipulations sur le ramdisk, réempaquetage de celui-ci :

$ find ./ | cpio -H newc -o > initrd.cpio
$ gzip initrd.cpio
$ mv initrd.cpio.gz initrd.img

  • reconstruction du boot.img après modification du ramdisk :

$ cd /tmp/ct705/boot && /tmp/ct705/bin/abootimg --create /tmp/ct705/cooking/Image/boot.img

et finalement reconstruction du fichier update.img, mais ça vous savez le faire désormais :)

Bon appétit ;)

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

bonjour x67656f,

j'ai une question: apres mettre le nouveau image, c'est alors possible de connecter vers le google play market? ou ca n'a rien a voir avec?

car ca est mon probleme: j'ai besoin d'une connection vers le google play market. comment faire?

merci pour votre explication.

calle;

Link to comment
Share on other sites

  • 1 month later...

Avez-vous fait cuire des nouvelles ROMs personnalisées à l'aide de cette méthode? (Je pensais faire un ajout d'appui HDMI à la fois l'écran de la tablette et le téléviseur en même temps)

J'ai écrit cela en utilisant Google Translate. Je suis désolé.

Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...

salut et merci pour ce tutoriel,

j'ai un petit souci lors de l'unpack via afptool:

$../afptool -unpack $PWD/block4_backup.bin $PWD/cooking/
Can't read crc checksum
UnPack failed

comprend pas, je pense que cela viens de mon extraction, il est possible que je n'ai pas eu suffisamment de place sur ma sdcard, mais cela m'étonne car je n'ai eu aucun message d'erreur à se suget, pour être franc, je n'ai eu aucun message d'erreur tout court :/

je retente l'extraction et je fait un retour ++

bon j'ai refait toute la manip en m'assurant d'avoir la place necessaire pour mon DUMP, mais cela ne change pas le problème, je ne peut toujours pas unpack block4_backup.bin

Can't read crc checksum
UnPack failed

là je suis perdu,e t je ne trouve aucune réponse sur le net :/

dsl pour le flood, mais si mon problème peut être utilise à certain :)

bon dans mon cas j'ai été oblighé d'utiliser rkunpack pour extraire mon block4_backup.bin et il me ressort bien mes *.img dans un dossier $PWD/Image

boot.img

kernel.img

kernel.img-rw

misc.img

recovery.img

system.img

je peu donc continuer :)

bon bin, je ne peut pas continuer car maintenant j'ai ma system.img qui est protéger en écriture, j'en ai marre p'tain, toujours un truc qui casse les couilles sur ces bécanes de m**** là !!!

non mais là c'est un truc de malade, je viens de faire un mount pour voir l'état de mes partition monté est j'ai:

/home/mark3linux/Documents/RockShip/RK29kitchen-master/src/DUMP/Image/system.img on /home/mark3linux/Documents/RockShip/RK29kitchen-master/src/DUMP/mountpoint type ext3 (rw)

donc il est reconnus en temps que partition en lecture/écriture, mais dès que je veux supprimer un fichier, il me dis qu'il est en lecture seul :/

bon après avoir fait un fsck sur mon image system.img j'ai constater qu'il est complètement foireux, il y a plein de i-noeud illégaux et une fois que j'ai supprimer c'est i-noeud, je ne peux plus remonter l'image, allé je repars à zéro, je pense que cela vient de rkunpack

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...