Ragazzo UNIX di lunga data qui, ma relativamente nuovo nel mondo di Android. Continuare a leggere.
EPISODIO 1: un nuovo backup (speravo)
Di recente ho acquistato un Asus MemoPAD (ME103K); Quindi sono diventato root e ho preso dd
un'immagine della system
partizione di sola lettura sulla scheda SD esterna:
$ 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
Le dimensioni (esattamente 2GiB) erano un po 'sospette - potrebbe essere che ciò fosse dovuto alla partizione FAT32 sulla scheda SD?
No, non è stato - tune2fs -l
rivelato che si trattava davvero di un'immagine EXT4 valida, dimensionata esattamente a 2GiB, che è passata fsck -f
senza errori. E fastboot
(dalla macchina linux collegata al tablet) ha consentito, dopo 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
Quella dimensione, in effetti, è di 2 GB:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
Quindi, tutto bene - Ho un backup dell'immagine. Ora per testare il ripristino.
Provo a eseguire il flashing di system.img sul tablet - per essere sicuro di poter recuperare da qualsiasi cosa, il tipo di backup a prova di proiettile che facciamo nel mondo Unix ( ad esempio ripristinare i contenuti di un'unità tramitedd if=backup.image of=/dev/sdXXX
).
Tutto ciò che riguarda adb
e fastboot
funziona perfettamente - quindi provo ...
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. Scarico e costruisco la android-tools-5.1.1
mia distribuzione da fonti, aggiungendo informazioni di debug e passo nel debugger per vedere questo errore:
linuxbox# gdb --args fastboot flash system system.img
...
Interessante - anche se io sono in una macchina a 64 bit, a quanto pare ci sono questioni che trasformano la dimensione del file "negativo" (in un mondo a 32 bit, la dimensione del file della mia immagine, 2 ^ 31, è infatti considerato negativo - per essere esatti, -2147483648
.
OK, bene - come fanno a far lampeggiare file di immagini di grandi dimensioni in Android?
Googling, ricerca - scopre che usano questo make_ext4fs
strumento, che crea immagini flashable. In realtà fa parte di ciò che ho appena compilato, quindi potrei anche usarlo:
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
Fantastico, quindi apparentemente posso costruire immagini di sistema da semplici cartelle vecchie. Il cielo sarà il mio limite - Sarò in grado di aggiungere tutto ciò che voglio a questa immagine.
Bruciamolo ...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
Ho aspettato 1 ora prima di colpire quel Ctrl-C. E ha dovuto spegnere e riaccendere il tablet, che è stato riavviato in modalità fastboot.
Questo non sembra buono.
Cosa succede se creo un'immagine più piccola? Forse i 2 GB sono in qualche modo un problema e questa partizione non è utilizzata a piena capacità - ha spazio libero:
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, questo sembra molto promettente (e ci sono voluti solo 5 minuti). Immagino di poter ora riavviare e tutto dovrebbe essere normale, sì?
No :-)
Non mi dispiace un dispositivo muratura temporaneamente, finché io non arrivare a controllarlo alla fine (le macchine che io non sono un maestro di, sono macchine non mi interessa per operare ;-)
Qualche idea su cosa ho fatto di sbagliato e cosa posso fare per risolvere questo problema?
Grazie in anticipo.
PS Ho controllato la pagina di supporto di Asus per il mio tablet: forniscono solo i sorgenti per il kernel e il file .zip over-the-air. Che a sua volta contiene un backup a livello di file system dalla radice, ovvero la system
cartella esiste come una cartella, non un'immagine, non è un file system.img
che posso eseguire il flashing, quindi non mi aiuta molto.
EPISODIO 2: Attacco degli Stivali personalizzati
In assenza di qualsiasi tipo di recovery.img
Asus (perché un produttore dovrebbe preoccuparsi di pubblicare un fast-boot-flashable recovery.img
? Perché davvero ...) e un'assenza simile sulle immagini di recupero dai siti CWM e TWRP ... Sono rimasto a combattere tutto solo.
Per fortuna, il file di aggiornamento Over-the-air di Asus include al suo interno ...
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'immagine di avvio del mio tablet. Ora forse - solo forse - posso fare qualcosa con questo.
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
Espansione del ramdisk ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
Ho impostato default.prop
per essere root all'avvio del kernel:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
Ho anche copiato /system/bin/sh
( dal file .zip Asus over-the-air ) in /sbin/sh
. Ho fatto lo stesso con busybox - strumento abbastanza utile.
E reimballato il 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
effettivamente fallito la prima volta che eseguo questo, dal momento che è bootimg.cfg
stato necessario aggiornare - il bootsize
parametro ha dovuto essere modificato, poiché il pacchetto ora è più grande. abootimg
segnala ciò di cui ha bisogno, quindi è abbastanza facile.
E ora avvio la mia immagine personalizzata ...
linuxbox# fastboot boot new_boot_busybox.img
... e testimonia quanto segue ...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Hmm ... Forse adbd non è eseguito come root?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Bene ... ho hexedit adbd e patch / system / bin / sh per essere / sbin / sh (ho copiato / system / bin / sh dall'immagine OTA nei rootfs di initrd): riavvio, avvio rapido ...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
Darn. Questa cosa è in grado di fare qualcosa?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
È ... vediamo:
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, quindi / il sistema è montato. Posso vedere cosa c'è dentro?
linuxbox# adb pull /system
remote object '/system' does not exist
Cosa ... Forse posso controllare cosa contiene / proc / kmsg (cosa "dmesg" produrrebbe)
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
No, ho bisogno di essere root per farlo.
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
E anche quello.
Questo si sta rivelando un bel rompicapo ...
fastboot
è ancora operativa (risponde bene alle richieste) e quindi posso masterizzare qualsiasi immagine di recupero, (a) Ho cercato e non ho trovato alcuna immagine di recupero CWM o TWRP per ME103K - Non credo che ci sia uno "generico" a cui ti riferisci, vero? (b) Spegnendo, premendo il pulsante di accensione + volume giù non viene visualizzata l'immagine di ripristino - Sono ancora in stato di avvio rapido. Mo idea del perché. In realtà non ho mai visto il processo di recupero (un po 'curioso di vederlo) ...
fastboot boot <FILE>.img
), quindi eseguire il flashing dell'intero file ZIP stock. In alternativa, controlla se esistono (sul web) i file ROM di scorta che possono essere sottoposti a flashing tramite fastboot.
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
mostra solo un paio di script di shell: darò un'occhiata, ma sicuramente non recovery.img
c'è.) Googling non ha aiutato neanche - non ci sono immagini di recupero di questo tablet da nessuna parte ... Immagino che dovrò aspettare un po 'di anima gentile nella dd
loro partizione di ripristino e condividere?