Давний парень из 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
их разделе восстановления и поделиться?Ответы:
Эпизод 3: Возвращение раковины.
Если у меня когда-нибудь был шанс решить эту проблему, я сначала должен был выяснить, почему оболочка не работает.
adbd
сам отвечал, поэтому он был запущен на стороне планшета - но он не мог выполнить оболочку, даже когда я взломал ее, чтобы вызвать файл (/sbin/sh
), который я сам поместил в загрузочный образ - будучи на 100% уверенным, что он имел соответствующие разрешения и были доступны изshell
(id = 2000) учетной записи, котораяadbd
использует.Который оставил только одно объяснение - SELinux «Клетки».
Итак, я проверил, как
adbd
был запущен мой загрузочный образinit.rc
:... и попробовал очевидное изменение:
Я переупаковал и, к моему глубокому удовлетворению, увидел ...
Наконец-то я получил доступ к планшету - изнутри.
Проверяя смонтированную / систему, стало ясно, что процесс перепрошивки - даже несмотря на то, что
fastboot flash system ...
сообщалось, что все в порядке - провалился эффектно . Было удивительно, что раздел был установлен в первую очередь.Это объяснило, почему планшет не загружался, и дало мне окончательную идею, которая решила проблему.
Мне нужно было загрузить планшет так, чтобы он использовал мою нетронутую копию раздела / system, но на этом этапе, даже несмотря на то, что у меня был доступ к оболочке, я не был пользователем root ( изменения, которые я делал, по-
default.prop
видимому, игнорируются ядром Asus) Мне придется перекомпилировать его в ближайшее время ... ), чтобы я не смог смонтировать внешний SDCard иdd
поверх моей хорошей копии.Но у меня был свой загрузочный образ - это означало, что я могу отредактировать его
/fstab.qcom
внутри и сделать это:Оригинальная линейка, рассказывающая планшету как монтировать / систему
Мое редактирование
... и вернувшись в свою коробку linux, я
dd
сделал первичную резервную копию системного раздела планшета на 2-й раздел моей внешней SD-карты, который я создал с помощьюgparted
точно 2 ГБ.Вот и все - планшет загрузился с моей внешней SD-карты.
РЕДАКТИРОВАТЬ : путешествие продолжалось - я в конечном итоге исправил и скомпилировал свое собственное ядро и стал root .
источник
fastboot boot ...
), а/system
раздел находится на SD-карте, настраиваемый на все, что я хочу. Вроде как, загрузка ПК с флешки :-)Кажется, вы уже нашли какое-то решение вашей проблемы (на этой странице много текста для чтения), но, вероятно, это можно было бы решить гораздо проще.
Из этих переменных ваш планшет возвращал
max-download-size
переменную? Если это так, то это могло бы сразу послужить предупреждением о том, что процесс перепрошивки может иметь некоторые проблемы с таким большим изображением. Текущий код fastboot предназначен для работы сmax-download-size
слишком маленьким файлом, но я столкнулся с той же ошибкой, даже если изображение меньше, чем, по словам устройства, оно может обработать, так что, на самом деле, это не совсем понятно.Так или иначе, здесь кажется, что по какой-то причине вы не можете мигать. Если вы и я правы, и речь идет о размере (у вашего планшета есть только 1 ГБ ОЗУ, и, предположительно, большинство устройств пытаются прочитать весь образ в ОЗУ перед перепрошивкой ), то здесь я думаю, что простая настройка добавления
-S
опции чтобы fastboot мог исправить вашу флешку так же, как для меня:Однако вместо этого, похоже, вы пытались заставить свой образ размером 2 ГБ в размер, в который (1) может быть невозможно вставить его, а (2) не соответствует размеру, который должен иметь системный раздел вашего устройства.
Что касается пункта № 1, то, по моему опыту, я бы не стал рассчитывать на хрупкие инструменты сборки Android, чтобы жаловаться, если вы попросите их сделать что-то, в чем они потерпят неудачу, и, возможно, они могут это сделать здесь.
Что касается пункта № 2, я не верю, что вы не можете просто сделать это; дополнительные шаги потребуются для использования системного раздела другого размера.
Предполагая, что ваш планшет ожидает редкие файлы изображений, я думаю, что команда, которую вы хотели попробовать вместо,
make_ext4fs -l 1536M new_system.img /system
былаmake_ext4fs -l 2048M -s new_system.img /system
. Скорректированная команда создаст изображение, которое надувается до нужного размера, но временно сохраняется без лишнего жира, например больших карманов с пустыми данными: « разреженный файл изображения» (см. Страницу, на которую я ссылался ранее, для получения дополнительной информации о них; У меня недостаточно репутации на этом сайте, чтобы повторить ссылку).Этот старый файл readme, который кто-то написал для набора инструментов, должен помочь понять, как идет процесс.
Приветствия.
источник
max-download-
в выводе ничего не былоgetvar
. (2) Я буду помнить об этой-S
опции в будущих версиях - так как после загрузки я стал пользователем root (путем перекомпиляции ядра) иdd
-ed поверх старого системного раздела, так что будет ли работать прошивка с -S приходится ждать следующих тестов (3) Я попытался с разреженными изображениями, получил тот же результат (т.е.fastboot
сообщил, что перепрошивка была в порядке, но системный раздел был испорчен).all
ее можно передать getvar - это полезно). (2) О, хорошо. Если это сработает, дайте нам знать. (3) Упс! Я этого не заметил. Это много текста, извините. Это было упомянуто в ваших сообщениях? (Было ли это похоже на команду make_ext4fs, которую я предложил, с указанием-s
полной длины 2 ГБ?) Возможно, планшет не обрабатывает разреженные файлы.-s
на make_ext4fs - fastboot сообщил «OK» для записи, но / system была испорчена. Моя теория заключается в том, что, как вы сказали, что-либо больше, чем память планшета (1 ГБ) не будет работать, и-S
для правильной работы нужна опция в fastboot (что объясняет полуразрушенное состояние - раздел был смонтирован, потому что первая часть изображения помещается в память и фактически записывается, что позволяет монтировать его, но файлы внутри него были ... случайно повреждены, в зависимости от того, были ли записаны их сектора или нет).С моим Moto GI я создал резервную копию, используя dd, как и вы. Мне нужно было восстановить системный раздел на днях, поэтому я загрузил TWRP (я не прошивал его, я просто загрузил образ в RAM). Затем я использовал adb для подключения во время работы TWRP, и я просто нажал img, который я сделал с dd, на свою SD-карту, а затем использовал dd, чтобы записать образ в системный раздел.
Проверьте видео, которые я сделал об этом здесь: https://youtu.be/BHCamV-sHx0?list=PLcUid3OP_4OVI1Rtuwxk1RjABh1PxXXQq
источник
recovery.img
от Asus, и CWM или TWRP не существует (для ME103K).