Давний парень из UNIX здесь, но относительно новый для мира Android. Читай дальше.
ЭПИЗОД 1: Новая резервная копия (я надеялся)
Я недавно купил Asus MemoPAD (ME103K); Затем я стал пользователем root и перенес dd
образ system
раздела только для чтения на внешнюю SD-карту:
$ 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
Размер (ровно 2 ГБ) был немного подозрительным - может ли это быть из-за раздела FAT32 на SD-карте?
Нет, это не было - tune2fs -l
выяснилось, что это действительно было действительное изображение EXT4, точно размером 2 ГБ, которое прошло fsck -f
без ошибок вообще. И fastboot
(от машины linux, прикрепленной к планшету) согласился после 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
Этот размер действительно составляет 2 ГБ:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
Итак, все хорошо - у меня есть резервная копия образа. Теперь, чтобы проверить его восстановление.
Я пытаюсь перепрошить system.img обратно на планшет - чтобы убедиться, что я могу восстановиться после чего-либо, такого рода пуленепробиваемое резервное копирование, которое мы делаем в мире Unix ( например, восстановление содержимого диска черезdd if=backup.image of=/dev/sdXXX
).
Все связано adb
и fastboot
работает без нареканий - поэтому я стараюсь ...
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'
Хм. Я загружаю и собираю android-tools-5.1.1
свой дистрибутив из источников, добавляю отладочную информацию и захожу в отладчик, чтобы увидеть этот сбой:
linuxbox# gdb --args fastboot flash system system.img
...
Интересно - хотя я в 64 - битной машине, по- видимому , есть вопросы , которые превращают размер файла «негативный» (в мире 32 - битным, размер файла моего изображения, 2 ^ 31, действительно считается отрицательным - точнее, -2147483648
.
Хорошо, хорошо - как они прошивают большие файлы изображений в Android?
Googling, search - оказывается, они используют этот make_ext4fs
инструмент, который создает плавающие изображения. На самом деле это часть того, что я только что скомпилировал, так что я мог бы также использовать это:
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
Круто - так что я, очевидно, могу создавать системные образы из простых старых папок Небо будет моим пределом - я смогу добавить к этому изображению все, что захочу.
Давайте сожжем это ...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
Я ждал 1 час, прежде чем нажать Ctrl-C. И пришлось перезагрузить планшет, который загрузился обратно в режиме fastboot.
Это не выглядит хорошо.
Что делать, если я создаю уменьшенное изображение? Может быть, 2 ГБ как-то проблема, и этот раздел не используется на полную мощность - у него есть свободное место:
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
Хорошо, это выглядит очень многообещающе (и заняло всего 5 минут). Я думаю, что теперь я могу перезагрузиться обратно и все должно быть нормально, да?
Нет :-)
Я не против временно устройства кирпичного, до тех пор , как я бы получить , чтобы контролировать его , в конце концов (машины, я не мастер, это машины я не хочет работать ;-)
Любые идеи о том, что я сделал не так и что я могу сделать, чтобы это исправить?
Заранее спасибо.
PS Я проверил страницу поддержки Asus для своего планшета - они предоставляют только исходники для ядра и файл .zip. Это, в свою очередь, содержит резервную копию уровня файловой системы из корня - то system
есть там существует папка, представляющая собой просто папку, а не изображение, а не папку, system.img
которую я могу прошить - так что это на самом деле мне не поможет.
ЭПИЗОД 2: Атака кастомных сапог
В отсутствие какого-либо рода recovery.img
от Asus (почему производитель потрудился бы опубликовать fastboot-flashhable recovery.img
? Почему действительно ...) и аналогичное отсутствие на образах восстановления с сайтов CWM и TWRP ... Я оставлен, чтобы бороться со всеми в одиночестве.
К счастью, файл беспроводного обновления от Asus включает в себя ...
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
... загрузочный образ моего планшета. Теперь может быть - просто возможно - я могу что-то сделать с этим.
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
Расширение виртуального диска ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
Я установил, default.prop
чтобы быть root при загрузке ядра:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
Я также скопировал /system/bin/sh
( из эфирного .zip-файла Asus ) в /sbin/sh
. Я сделал то же самое с busybox - довольно удобный инструмент.
И перепаковал 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
на самом деле не удалось в первый раз, когда я запустил это, так как bootimg.cfg
пришлось обновить - bootsize
параметр должен был быть изменен, поскольку пакет теперь больше. abootimg
сообщает, что ему нужно, так что это достаточно просто.
И теперь я загружаю свой собственный образ ...
linuxbox# fastboot boot new_boot_busybox.img
... и засвидетельствуйте следующее ...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Хм ... Может быть, adbd не запускается как root?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Хорошо ... Я hexedit adbd и исправление / system / bin / sh, чтобы быть / sbin / sh (я скопировал / system / bin / sh из образа OTA в rootfs initrd): перезагрузка, fastboot ...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
Штопать. Может ли эта вещь сделать что-нибудь?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
Это ... давайте посмотрим:
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
ОК, так что / система будет смонтирована. Могу ли я увидеть, что внутри?
linuxbox# adb pull /system
remote object '/system' does not exist
Что за ... Может быть, я могу проверить, что содержит / proc / kmsg (что выдает "dmesg")
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
Нет, мне нужно быть пользователем root, чтобы сделать это.
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
И это тоже.
Это оказывается довольно загадкой ...
fastboot
он все еще работает (отвечает на запросы очень хорошо), и поэтому я могу записать любой образ восстановления, (a) Я искал и не нашел образа восстановления CWM или TWRP для ME103K - я не думаю, что есть "универсальный", на который вы ссылаетесь, есть? (b) Выключение, нажатие кнопки питания + уменьшение громкости не приводит к восстановлению образа для восстановления - я все еще просто в состоянии быстрой загрузки. Мо идея почему. На самом деле я никогда не видел процесс восстановления (любопытно увидеть его) ...
fastboot boot <FILE>.img
), а затем перепрошить весь стандартный ZIP-файл. В качестве альтернативы, посмотрите, существуют ли (в Интернете) стандартные файлы ROM, которые можно прошить с помощью fastboot.
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
показывает только пару сценариев оболочки - я посмотрю, но там точно нет recovery.img
). Гугл тоже не помог - нигде нет образов восстановления этого планшета ... Думаю, мне придется подождать какую-нибудь добрую душу в dd
их разделе восстановления и поделиться?