Un gars UNIX de longue date ici, mais relativement nouveau dans le monde d'Android. Continuer à lire.
EPISODE 1: Une nouvelle sauvegarde (j'espérais)
J'ai récemment acheté un Asus MemoPAD (ME103K); Je suis ensuite devenu root et j'ai pris une dd
image de la system
partition en lecture seule sur la carte SD externe:
$ su
# dd if=/dev/block/platform/msm_sdcc.1/by-name/system \
of=/storage/MicroSD/system.img bs=1M
# ls -l /storage/MicroSD/system.img
-rw-r--r-- 1 root root 2147483648 Sep 27 13:15 system.img
La taille (exactement 2 Go) était un peu suspecte - se pourrait-il que ce soit à cause de la partition FAT32 sur la carte SD?
Non, cela n'a pas été - a tune2fs -l
révélé qu'il s'agissait bien d'une image EXT4 valide, exactement à la taille de 2 Go, qui a réussi fsck -f
sans aucune erreur. Et fastboot
(à partir de la machine Linux attachée à la tablette), après un adb reboot bootloader
:
linuxbox# fastboot getvar all
(bootloader) version-bootloader: 3.03
(bootloader) version-hardware: rev_c
(bootloader) variant: LEOPARDCAT 16G
(bootloader) version-baseband: H00_0.16.F_0521
(bootloader) serialno: 0a3dXXXX
...
(bootloader) partition-type:system: ext4
(bootloader) partition-size:system: 0x0000000080000000
Cette taille est en effet de 2 Go:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
Donc, tout va bien - j'ai une sauvegarde de l'image. Maintenant pour tester la restauration.
J'essaie de flasher le system.img sur la tablette - pour m'assurer que je peux récupérer de tout, le type de sauvegarde à l'épreuve des balles que nous faisons dans le monde Unix ( par exemple restaurer le contenu d'un lecteur viadd if=backup.image of=/dev/sdXXX
).
Tout ce qui concerne adb
et fastboot
fonctionne parfaitement - alors j'essaie ...
linux_box# fastboot devices
0a3dXXXX fastboot
linux_box# mount /dev/sdcard /mnt/sdcard
linux_box# cp /mnt/sdcard/system.img .
linux_box# fastboot flash system system.img
error: cannot load 'system.img'
Hmm. Je télécharge et compile android-tools-5.1.1
ma distribution à partir de sources, en ajoutant des informations de débogage - et j'interviens dans le débogueur, pour voir cet échec:
linuxbox# gdb --args fastboot flash system system.img
...
Intéressant - même si je suis dans une machine 64 bits, apparemment il y a des problèmes qui transforment la taille du fichier « négatif » (dans un monde 32bit, la taille du fichier de mon image, 2 ^ 31, est en effet considéré comme négatif - pour être exact, -2147483648
.
OK, très bien - comment flashent-ils de gros fichiers d'images dans Android?
Googler, rechercher - il s'avère qu'ils utilisent cet make_ext4fs
outil, qui crée des images flashable. En fait, cela fait partie de ce que je viens de compiler, donc je peux aussi bien l'utiliser:
linuxbox# mkdir /system
linuxbox# mount -o loop,ro system.img /system
linuxbox# ls -l /system
total 208
drwxr-xr-x 106 root root 8192 Sep 17 22:24 app
drwxr-xr-x 3 root 2000 8192 Sep 26 21:08 bin
-rw-r--r-- 1 root root 6847 Sep 12 16:59 build.prop
drwxr-xr-x 19 root root 4096 Sep 26 21:08 etc
drwxr-xr-x 2 root root 4096 Aug 11 22:27 fonts
drwxr-xr-x 4 root root 4096 Sep 12 16:56 framework
drwxr-xr-x 10 root root 16384 Sep 12 16:59 lib
drwxr-xr-x 2 root root 4096 Jan 1 1970 lost+found
drwxr-xr-x 3 root root 4096 Aug 11 22:18 media
drwxr-xr-x 59 root root 4096 Aug 11 22:29 priv-app
-rw-r--r-- 1 root root 126951 Aug 1 2008 recovery-from-boot.p
drwxr-xr-x 3 root root 4096 Aug 11 21:02 scripts
drwxr-xr-x 3 root root 4096 Aug 11 21:02 tts
drwxr-xr-x 11 root root 4096 Sep 26 21:08 usr
drwxr-xr-x 8 root 2000 4096 Aug 11 22:29 vendor
drwxr-xr-x 2 root 2000 4096 Sep 26 21:09 xbin
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 2048M new_system.img /system
Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label:
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2666/131072 inodes and 375014/524288 blocks
Cool - donc je peux apparemment construire des images système à partir de vieux dossiers simples. Le ciel sera ma limite - je pourrai ajouter tout ce que je veux à cette image.
Brûlons-le ...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
J'ai attendu 1h avant de frapper ce Ctrl-C. Et a dû redémarrer la tablette, qui a redémarré en mode fastboot.
Ce n'est pas beau.
Et si je crée une image plus petite? Peut-être que les 2 Go sont en quelque sorte un problème, et cette partition n'est pas utilisée à pleine capacité - elle a de l'espace libre:
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 1536M new_system.img /system
linuxbox# ./fastboot flash system system.img
erasing 'system'...
OKAY [ 0.065s]
sending 'system' (1572864 KB)...
OKAY [ 51.039s]
writing 'system'...
OKAY [235.080s]
finished. total time: 286.183s
OK, cela semble très prometteur (et n'a pris que 5 minutes). Je suppose que je peux maintenant redémarrer et tout devrait être normal, non?
Non :-)
Je ne me dérange pas un dispositif murée temporairement, tant que je ne me le contrôler à la fin (machines que je ne suis pas un maître, sont des machines que je ne tiens pas à faire fonctionner ;-)
Des idées sur ce que j'ai fait de mal et ce que je peux faire pour y remédier?
Merci d'avance.
PS J'ai vérifié la page de support Asus pour ma tablette - ils ne fournissent que les sources pour le noyau et le fichier .zip Over-the-air. Cela contient à son tour une sauvegarde au niveau du système de fichiers à partir de la racine - c'est-à-dire que le system
dossier existe là-dedans comme juste un dossier, pas une image, pas une system.img
que je peux flasher - donc cela ne m'aide pas vraiment.
EPISODE 2: Attaque des bottes personnalisées
En l'absence de toute sorte d' recovery.img
Asus (pourquoi un fabricant prendrait la peine de publier un fastboot-flashable recovery.img
? Pourquoi en effet ...) et une absence similaire sur les images de récupération des sites CWM et TWRP ... seul.
Heureusement, le fichier de mise à jour Over-the-air d'Asus comprend à l'intérieur ...
linuxbox# unzip -l /opt/Asus/firmware/UL-K01E-WW-12.16.1.12-user.zip |\
grep boot.img$
7368704 2011-03-22 11:21 boot.img
... l'image de démarrage de ma tablette. Maintenant peut-être - juste peut-être - je peux faire quelque chose avec ça.
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
Extension du disque virtuel ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
J'ai configuré default.prop
pour être root lorsque le noyau démarre:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
J'ai également copié /system/bin/sh
(à partir du fichier Asus .zip en direct ) dans /sbin/sh
. J'ai fait la même chose avec busybox - un outil très pratique.
Et remballé le boot.img ...
busybox$ find . | cpio --create --format='newc' | gzip -9 > ../initrd.custom.gz
busybox$ cd ..
busybox$ abootimg --create ../new_boot_busybox.img \
-f bootimg.cfg -k zImage -r initrd.custom.gz
abootimg
En fait, j'ai échoué la première fois que je lance ceci, car il bootimg.cfg
a dû être mis à jour - le bootsize
paramètre a dû être changé, car le package est plus gros maintenant. abootimg
rapporte ce dont il a besoin, donc c'est assez facile.
Et maintenant, je démarre mon image personnalisée ...
linuxbox# fastboot boot new_boot_busybox.img
... et assistez à ce qui suit ...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Hmm ... Peut-être que adbd n'est pas exécuté en tant que root?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Très bien ... je hexedit adbd, et patch / system / bin / sh pour être / sbin / sh (j'ai copié le / system / bin / sh de l'image OTA vers les rootfs de l'initrd): Reboot, fastboot ...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
Zut. Cette chose est-elle capable de faire quoi que ce soit?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
C'est ... voyons:
linuxbox# adb pull /proc/mounts
16 KB/s (1358 bytes in 0.079s)
linuxbox# grep system mounts
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
OK, donc / le système est monté. Puis-je voir ce qu'il y a à l'intérieur?
linuxbox# adb pull /system
remote object '/system' does not exist
Qu'est-ce que ... Peut-être que je peux vérifier ce que contient / proc / kmsg (ce que "dmesg" afficherait)
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
Non, je dois être root pour ça.
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
Et cela aussi.
Cela s'avère être un véritable casse-tête ...
fastboot
est toujours opérationnel (répond très bien aux demandes) et je peux donc graver n'importe quelle image de récupération, (a) J'ai recherché et trouvé aucune image de récupération CWM ou TWRP pour ME103K - Je ne suppose pas qu'il y ait "générique" dont vous parlez, n'est-ce pas? (b) La mise hors tension, en appuyant sur le bouton d'alimentation + le volume bas ne fait pas apparaître l'image de récupération - je viens tout juste de passer à l'état de démarrage rapide. Mo idée pourquoi. En fait, je n'ai jamais vu le processus de récupération (un peu curieux de le voir) ...
fastboot boot <FILE>.img
), puis flasher le fichier ZIP entier. Sinon, voyez s'il existe (sur le Web) les fichiers ROM d'origine qui peuvent être flashés à l'aide de fastboot.
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
ne montre que quelques scripts shell - je vais y jeter un œil, mais il n'y en a certainement pas recovery.img
). La recherche sur Google n'a pas aidé non plus - il n'y a aucune image de récupération de cette tablette nulle part ... Je suppose que je devrai attendre une sorte d'âme pour dd
leur partition de récupération et la partager?