Тут давній хлопець UNIX, але порівняно новий у світі Android. Читайте далі.
ЕПІЗОД 1: Нова резервна копія (я сподівався)
Я нещодавно придбав Asus MemoPAD (ME103K); Потім я запустив корінь і сфотографував розділ, доступний 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
Розмір (рівно 2GiB) був трохи підозрілим - чи може це статися через розділ FAT32 на SD-картці?
Ні, не було - tune2fs -l
виявлено, що це дійсно дійсне зображення EXT4, точно розміром 2GiB, яке проходило 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?
Гугл, пошук - виявляється, вони використовують цей 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. І довелося живити планшетний ПК, який завантажився назад у режимі швидкої завантаження.
Це не добре виглядає.
Що робити, якщо я будую менший образ? Можливо, 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-файлу Over-the-air. Це, в свою чергу, містить резервну копію файлової системи з кореня - тобто system
папка існує там як просто папка, а не зображення, не system.img
те, що я можу спалахнути, так що це не дуже допомагає мені.
ЕПІЗОД 2: Атака на замовні чоботи
За відсутності будь-якого типу recovery.img
від Asus (чому виробник покладається на публікацію recovery.img
швидкої завантажувальної? поодинці.
На щастя, файл оновлення Over-the-air від 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 файл у прямому ефірі ) у /sbin/sh
. Я робив те ж саме із зайнятим ящиком - досить зручним інструментом.
І перепакували 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 в корені 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
Ні, мені потрібно зробити корінь для цього.
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
їх розділити і поділитися?