Oude UNIX-man hier, maar relatief nieuw in de wereld van Android. Lees verder.
AFLEVERING 1: Een nieuwe back-up (hoopte ik)
Ik heb onlangs een Asus MemoPAD (ME103K) gekocht; Ik werd toen root en nam een dd
-afbeelding van de alleen-lezen systeem
-partitie naar de externe SD-kaart:
$ 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 27 september 13:15 system.img
De grootte (precies 2GiB) was een beetje verdacht - zou het kunnen zijn dat dit kwam door de FAT32-partitie op de SD-kaart?
Nee, dat was het niet - tune2fs -l
onthulde dat dit inderdaad een geldige EXT4-afbeelding was, exact formaat 2GiB, die fsck passeerde - f
zonder fouten. en fastboot
(van de linux-machine die aan de tablet is gekoppeld) was het eens, na een adb reboot bootloader
:
linuxbox # fastboot getvar alle (bootloader) versie-bootloader: 3.03 (bootloader) versie-hardware: rev_c (bootloader) variant: LEOPARDCAT 16G (bootloader) versie-basisband: H00_0.16.F_0521 (bootloader) serieel no: 0a3dXXXX ... (bootloader) partitietype: systeem: ext4 (bootloader) partitiegrootte: systeem: 0x0000000080000000
Die grootte is inderdaad 2GB:
linuxbox # python2 -c 'print 0x0000000080000000'2147483648
Dus alles is goed - ik heb een back-up van de afbeelding. Nu om het herstellen ervan te testen.
Ik probeer de system.img terug te flashen naar de tablet - om er zeker van te zijn dat ik alles kan herstellen, het soort kogelvrije back-up die we in de Unix-wereld doen ( bijv. herstel inhoud van een schijf via dd if = backup.image of = / dev / sdXXX
).
Alles met betrekking tot adb
en fastboot
werkt probleemloos - dus ik probeer ...
linux_box # fastboot devices0a3dXXXX fastbootlinux_box # mount / dev / sdcard / mnt / sdcard
linux_box # cp /mnt/sdcard/system.img .linux_box # fastboot flash system system.imgerror: kan 'system.img'
Hmm. Ik download en bouw de android-tools-5.1.1
van mijn distributie uit bronnen, waarbij ik foutopsporingsinformatie toevoeg - en stap in de debugger om deze fout te zien:
linuxbox # gdb --args fastboot flash system.img ...
Interessant - ook al ben ik in een 64-bits machine, zijn er blijkbaar problemen die de bestandsgrootte "negatief" maken (in een 32-bits wereld wordt de bestandsgrootte van mijn afbeelding, 2 ^ 31, inderdaad als negatief beschouwd - om precies te zijn, -2147483648
.
OK, prima - hoe flashen ze grote afbeeldingsbestanden in Android?
Googelen, zoeken - blijkt dat ze deze make_ext4fs
tool gebruiken, die maakt flitsende afbeeldingen. In feite maakt het deel uit van wat ik zojuist heb gecompileerd, dus ik kan het net zo goed gebruiken:
linuxbox # mkdir / systemlinuxbox # mount -o loop, ro system.img / systemlinuxbox # ls -l / systemtotal 208drwxr-xr-x 106 root root 8192 17 september 22:24 appdrwxr-xr-x 3 root 2000 8192 26 september 21:08 bin-rw-r - r-- 1 root root 6847 S ep 12 16:59 build.propdrwxr-xr-x 19 root root 4096 26 sep 21:08 etcdrwxr-xr-x 2 root root 4096 11 aug 22:27 fontsdrwxr-xr-x 4 root root 4096 12 sep 16:56 frameworkdrwxr -xr-x 10 root root 16384 12 september 16:59 libdrwxr-xr-x 2 root root 4096 1 januari 1970 verloren + gevonden drwxr-xr-x 3 root root 4096 11 aug 22:18 mediadrwxr-xr-x 59 root root 4096 11 aug. 22:29 priv-app-rw-r - r-- 1 root root 126951 1 aug. 2008 recovery-from-boot.pdrwxr-xr-x 3 root root 4096 aug. 11 21:02 scriptsdrwxr-xr-x 3 root root 4096 aug 11 21:02 ttsdrwxr-xr-x 11 root root 4096 sep 26 21:08 usrdrwxr-xr-x 8 root 2000 4096 aug 11 22:29 vendordrwxr-xr-x 2 root 2000 4096 26 sep 21:09 xbinlinuxbox # ../extras/source/extras/ext4_utils/make_ext4fs \ -l 2048M new_system.img / system Bestandssysteem aanmaken met parameters: Grootte: 2147483648 Blokgrootte: 4096
Blokken per groep: 32768 Inodes per groep: 8192 Inodegrootte: 256 Journaalblokken: 8192 Label: Blokken: 524288 Blokgroepen: 16 Gereserveerde blokgroepgrootte: 127 Gemaakt bestandssysteem met 2666/131072 inodes en 375014/524288 blokken
Cool - dus ik kan blijkbaar systeemafbeeldingen maken van gewone oude mappen. De lucht zal mijn limiet zijn - ik kan alles wat ik wil aan deze afbeelding toevoegen.
Laten we het branden ...
linuxbox # fastboot flash-systeem nieuw_system.imgerasing 'systeem' ... OKAY [0.064s] verzenden van 'systeem' (2088960 KB) ... ^ C
Ik heb 1 uur gewacht voordat ik op Ctrl-C drukte. En moest de tablet uit en weer opstarten, die weer opstartte in de fastboot-modus.
Dit ziet er niet goed uit.
Wat als ik een kleinere afbeelding maak? Misschien zijn de 2GB op de een of andere manier een probleem, en wordt deze partitie niet volledig benut - er is vrije ruimte in:
linuxbox # ../extras/source/extras/ext4_utils/make_ext4fs \ -l 1536M new_system.img / systemlinuxbox # ./fastboot flash system system.img wissen van 'systeem' ... OKAY [0.065s] verzenden van 'systeem' (1572864 KB) ... OKAY [51.039s] schrijven 'systeem' ... OKAY [235.080s] klaar. totale tijd: 286.183s
OK, dit ziet er veelbelovend uit (en duurde slechts 5 minuten). Ik denk dat ik nu opnieuw kan opstarten en dat alles normaal zou moeten zijn, ja?
Nee :-)
Ik vind een tijdelijk dichtgemetseld apparaat niet erg, zolang ik het maar wel krijg om het uiteindelijk te bedienen (machines waar ik geen meester van ben, zijn machines die ik niet wil bedienen; - )
Ideeën over wat ik verkeerd heb gedaan en wat ik kan doen om dit op te lossen?
Bij voorbaat dank.
PS Ik heb de ondersteuningspagina van Asus voor mijn tablet gecontroleerd - ze bieden alleen de bronnen voor de kernel en het Over-the-air .zip-bestand. Dat bevat op zijn beurt een back-up op bestandssysteemniveau vanaf de root - dwz de map system
bestaat daarin als slechts een map, geen afbeelding, niet een system.img
die Ik kan flitsen - dus dat helpt me niet echt.
EPISODE 2: Attack of the Custom Boots
In de afwezigheid van enige vorm van recovery.img
van Asus (waarom zou een fabrikant om een fastboot-flashable recovery.img
te publiceren? Waarom inderdaad ...) en een vergelijkbare afwezigheid op herstelafbeeldingen van de CWM- en TWRP-sites ... Ik moet helemaal alleen vechten.
Gelukkig bevat het over-the-air updatebestand van Asus erin ...
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
... de opstartimage van mijn tablet. Nu misschien - heel misschien - kan ik hier iets mee doen.
linuxbox $ mkdir rootfslinuxbox $ cd rootfslinuxbox $ abootimg -x /path/to/boot.imglinuxbox$ ls -lbootimg.cfginitrd.imgzImage
De ramdisk uitbreiden ...
linuxbox $ mkdir initrdlinuxbox $ cd initrdlinuxbox $ gzip -cd ../initrd.img | cpio -ivd ... linuxbox $ vi default.prop
Ik heb default.prop
ingesteld als root wanneer de kernel opstart:
ro.secure = 0ro.debuggable = 1ro.adb.secure = 0androidboot.selinux = uitgeschakeld
Ik heb ook / system / bin / sh
gekopieerd ( uit het over-the-air Asus .zip-bestand ) naar / sbin / sh
. Ik deed hetzelfde met busybox - best handig hulpmiddel.
En pakte de boot.img opnieuw in ...
busybox $ find. | cpio --create --format = 'newc' | gzip -9 > ../initrd.custom.gzbusybox$ cd ..busybox $ abootimg --create ../new_boot_busybox.img \ -f bootimg.cfg -k zImage -r initrd.custom.gz
abootimg
mislukte de eerste keer dat ik dit startte, aangezien bootimg.cfg
moest worden bijgewerkt - de bootize
-parameter moest worden veranderd, aangezien het pakket nu groter is. abootimg
rapporteert wat het nodig heeft, dus dat is eenvoudig genoeg.
En nu start ik mijn aangepaste afbeelding op ...
linuxbox # fastboot boot new_boot_busybox.img
... en wees getuige van het volgende ...
linuxbox # adb logcat- exec '/ system / bin / sh' mislukt: toestemming geweigerd (13) -linuxbox # adb shell- exec '/ system / bin / sh' mislukt: toestemming geweigerd (13) -
Hmm ... Misschien wordt adbd niet als root uitgevoerd?
linuxbox # adb rootrestarting adbd als rootlinuxbox # adb shell- exec '/ system / bin / sh' mislukt: toestemming geweigerd (13) -
Prima ... ik hexedit adbd, en patch / system / bin / sh te zijn / sbin / sh (ik heb de / system / bin / sh van de OTA-afbeelding naar de rootfs van het initrd gekopieerd): Reboot, fastboot ...
linuxbox # adb shell- exec '/ sbin / sh' mislukt: toestemming geweigerd (13) -
Verdorie. Is dit ding in staat om iets te doen?
linuxbox # adb pull / proc / partitions15 KB / s (1272 bytes in 0.079s)
Het is. .. eens kijken:
linuxbox # adb pull / proc / mounts16 KB / s (1358 bytes in 0.079s) linuxbox # grep systeem mounts / dev / block / platform / msm_sdcc.1 / door -name / system / system ext4 rw, seclabel, relatime, data = besteld 0 0
OK, dus / system is aangekoppeld. Kan ik zien wat erin zit?
linuxbox # adb pull / systemremote object '/ system' bestaat niet
Wat de ... Misschien kan ik het controleren wat / proc / kmsg bevat (wat "dmesg" zou uitvoeren)
linuxbox # adb pull / proc / kmsg kan '/ proc / kmsg' niet kopiëren naar './kmsg': Bewerking niet toegestaan
Nee, ik moet root zijn om dat te doen.
linuxbox # adb push / sbin / sh / system / bin / shfailed to copy '/ sbin / sh 'to' / system / bin / sh ': Toestemming geweigerd
En dat ook.
Dit blijkt een behoorlijke puzzel te zijn .. .